導入:最後のピース「CI」を埋めよう
- 読者への問いかけ: 前回のPart 3で、GitOps(自動デプロイ)を実現しました。しかし、肝心の「Dockerイメージ」はどうやって作っていますか?
- 「手元のPCで
docker buildして…」 - 「
docker pushして…」 - 「そのあとマニフェストを書き換えて…」
- 「手元のPCで
- 課題: これでは手間がかかるし、チーム開発では「AさんのPCだとビルドできるけど、Bさんだと動かない」という問題が起きます。
- 解決策: GitHub Actions を使って、この作業も全自動化(CI: 継続的インテグレーション)します。
- 【内部リンク】 自動デプロイって何?という方はPart 3「ArgoCD入門」をご覧ください。
CI(継続的インテグレーション)とは?
- ざっくり解説: 「コード変更のたびに、テストやビルドを自動で行う仕組み」のこと。
- 今回のゴール:
- あなたがGitHubにコードをPushする。
- GitHub Actions が検知して、勝手に
docker buildする。 - 完成したイメージを 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です。
- GitHubリポジトリの 「Settings」 タブを開く。
- 左メニューの 「Secrets and variables」 > 「Actions」 をクリック。
- 「New repository secret」 をクリックして2つ登録します。
- Name:
DOCKER_USERNAME/ Secret: (あなたのDocker ID) - Name:
DOCKER_PASSWORD/ Secret: (あなたのDockerパスワード、またはAccess Token)
- Name:
手順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サイクルが生まれます。
- Dev (あなた): コードを修正してGitHubへPush。
- CI (GitHub Actions): 自動でDockerイメージをビルド&Docker HubへPush。
- CD (ArgoCD): (設定により)新しいイメージを検知して、K8s上のPodを入れ替える。
これで、「コードを書く」ことだけに集中できる環境が整いました。
まとめ:自動化の沼へようこそ
本記事ではGitHub Actionsを使ったコンテナビルドの自動化(CI)を解説しました。
- 手動ビルドは卒業: ミスが減り、誰でも同じ品質でビルドできる。
- Secretsの活用: パスワードを守りながら自動化する基本テクニック。
- Docker公式Action: 複雑なスクリプトを書かずに実現可能。
ここまで4回の連載で、Kubernetesと周辺エコシステムの基礎を一通り網羅しました。 もしさらに知識を深めたい場合は、以下の公式ドキュメントも参考にしてみてください。
- GitHub Actions ドキュメント <small>※外部リンク</small>
- Docker Hub クイックスタート <small>※外部リンク</small>
あなたのエンジニアライフが、自動化によってより快適になることを願っています!
コメントを残す