【Kubernetes入門 Part4】GitHub Actionsで自動ビルド!CI(継続的インテグレーション)を構築してDevOpsを完成させよう

導入:最後のピース「CI」を埋めよう

  • 読者への問いかけ: 前回のPart 3で、GitOps(自動デプロイ)を実現しました。しかし、肝心の「Dockerイメージ」はどうやって作っていますか?
    • 「手元のPCで docker build して…」
    • docker push して…」
    • 「そのあとマニフェストを書き換えて…」
  • 課題: これでは手間がかかるし、チーム開発では「AさんのPCだとビルドできるけど、Bさんだと動かない」という問題が起きます。
  • 解決策: GitHub Actions を使って、この作業も全自動化(CI: 継続的インテグレーション)します。
  • 【内部リンク】 自動デプロイって何?という方はPart 3「ArgoCD入門」をご覧ください。

CI(継続的インテグレーション)とは?

  • ざっくり解説: 「コード変更のたびに、テストやビルドを自動で行う仕組み」のこと。
  • 今回のゴール:
    1. あなたがGitHubにコードをPushする。
    2. GitHub Actions が検知して、勝手に docker build する。
    3. 完成したイメージを Docker Hub に勝手に docker push する。

ここまで出来れば、あとはPart 3のArgoCDがそれを拾ってくれる…という「完全自動化」が見えてきます!


【ハンズオン】GitHub Actionsで自動ビルドパイプラインを作る

今回は、簡単なWebページを作成し、それをDockerイメージ化してDocker Hubへ飛ばすまでを実装します。

前提条件

  • GitHubアカウント を持っていること。
  • Docker Hubアカウント を持っていること(無料枠でOK)。

手順1: リポジトリとアプリの準備

GitHubで新しいリポジトリ(例: my-ci-app)を作成し、手元にクローンします。 直下に index.html という簡単なファイルを作ります。

HTML

<!DOCTYPE html>
<html>
<body>
  <h1>Hello, GitHub Actions!</h1>
  <p>This image was built automatically.</p>
</body>
</html>

手順2: Dockerfileの作成

同じ場所に Dockerfile を作成します。

Dockerfile

# Nginxの軽量イメージをベースにする
FROM nginx:alpine
# 作成したhtmlファイルを配置
COPY index.html /usr/share/nginx/html/index.html

これだけで「Webサーバー入りのコンテナ」の設計図は完成です。

手順3: Docker Hubの認証情報を設定(重要!)

GitHub Actionsがあなたの代わりにDocker Hubにログインできるように、パスワードなどを教える必要があります。ただし、コードに直接書くのはセキュリティ的にNGです。

  1. GitHubリポジトリの 「Settings」 タブを開く。
  2. 左メニューの 「Secrets and variables」 > 「Actions」 をクリック。
  3. 「New repository secret」 をクリックして2つ登録します。
    • Name: DOCKER_USERNAME / Secret: (あなたのDocker ID)
    • Name: DOCKER_PASSWORD / Secret: (あなたのDockerパスワード、またはAccess Token)

手順4: Workflowファイルの作成

ここが本番です。GitHub Actionsへの指示書を書きます。 リポジトリ内に .github/workflows/docker-build.yaml というディレクトリとファイルを作成します。

YAML

name: Build and Push Docker Image

on:
  push:
    branches: [ "main" ]  # mainブランチにpushされたら実行

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # 1. リポジトリのコードを取得
      - name: Checkout code
        uses: actions/checkout@v4

      # 2. Docker Hubへログイン (設定したSecretを使う)
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      # 3. Dockerイメージのビルドとプッシュ
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          # タグ付け (latestと、コミットハッシュの2つを付けると便利)
          tags: |
            ${{ secrets.DOCKER_USERNAME }}/my-ci-app:latest
            ${{ secrets.DOCKER_USERNAME }}/my-ci-app:${{ github.sha }}

解説: uses: ... は、世界中のエンジニアが作った便利な部品(Action)を使う宣言です。Docker公式のActionを使っているので簡単かつ安全です。

手順5: Pushして動作確認

これらをコミットしてGitHubへPushしましょう。

Bash

git add .
git commit -m "Add CI workflow"
git push origin main

GitHubのリポジトリページを開き、「Actions」 タブを見てください。 Build and Push Docker Image というワークフローが緑色(Success)になれば成功です!

手順6: Docker Hubで確認

Docker Hubにログインし、自分のリポジトリを確認してください。 my-ci-app というイメージが追加され、タグに latest と謎の文字列(コミットハッシュ)の2つがアップロードされているはずです。

おめでとうございます!あなたは今、手元のPCを使わずにクラウド上でコンテナをビルドしました!


Part 3 (ArgoCD) とどう繋がるの?

今回作った仕組みと、前回のArgoCDを組み合わせると、以下のようなDevOpsサイクルが生まれます。

  1. Dev (あなた): コードを修正してGitHubへPush。
  2. CI (GitHub Actions): 自動でDockerイメージをビルド&Docker HubへPush。
  3. CD (ArgoCD): (設定により)新しいイメージを検知して、K8s上のPodを入れ替える。

これで、「コードを書く」ことだけに集中できる環境が整いました。

まとめ:自動化の沼へようこそ

本記事ではGitHub Actionsを使ったコンテナビルドの自動化(CI)を解説しました。

  • 手動ビルドは卒業: ミスが減り、誰でも同じ品質でビルドできる。
  • Secretsの活用: パスワードを守りながら自動化する基本テクニック。
  • Docker公式Action: 複雑なスクリプトを書かずに実現可能。

ここまで4回の連載で、Kubernetesと周辺エコシステムの基礎を一通り網羅しました。 もしさらに知識を深めたい場合は、以下の公式ドキュメントも参考にしてみてください。

あなたのエンジニアライフが、自動化によってより快適になることを願っています!


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です