記事の目的
自分の備忘録
GitHubのPUSHをトリガーにCloudBuildを発火させてGKEにデプロイする方法
準備
GitHub
GCP
IAMにサービスアカウントにGKEの権限設定
デプロイするアプリケーション(Docker)
CloudBuildとは
スピードと柔軟性
Cloud Build では、すべての言語でソフトウェアを迅速にビルドでき、複数の環境(VM、サーバーレス、Kubernetes、Firebase など)でのビルド、テスト、デプロイ用にカスタム ワークフローの定義を完全に制御できます。
https://cloud.google.com/cloud-build/?hl=ja
やってみよう
Dockerfileとは
- 作成したいイメージを作る際の設定や手順をまとめたもの
- docker buildコマンドを実行することでDockerfileに記載した手順を実行してくれる
- このファイルを共有すれば、誰でも同じ環境を構築できる
Dockerfileを書いてみる
今回は下記のディレクトリ構成でやっていきます
docker-ruby
├ sample.rb
├ Dockerfile
├ deployment.yaml
└ cloudbuild.yaml
sample.rb
puts 'Hello, from Docker container!'
Dockerfile
# ベースとなるイメージを指定する
FROM ruby:2.5
# コンテナ上のワーキングディレクトリを指定する
WORKDIR /usr/src/
# ディレクトリやファイルをコピーする
# 左側がホストのディレクトリ、右側がコンテナ上のディレクトリ
COPY ./sample.rb /usr/src/sample.rb
# "docker build"時に実行される処理
RUN echo "building..."
# "docker run"実行時に実行される処理
CMD ruby sample.rb
GKE(kubernetes)側のマニュフェストファイル
deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: cb-sample-server
spec:
replicas: 2
selector:
matchLabels:
name: cb-sample-server
template:
metadata:
labels:
name: cb-sample-server
cluster_name: cb-sample-server
spec:
containers:
- name: cb-sample-server
image: gcr.io/プロジェクト名設定/cb-sample-server:latest
ports:
- containerPort: 8080
protocol: TCP
revisionHistoryLimit: 100
cloudbuild.yaml
steps:
# Dockerfileを利用してアプリのテストビルドとイメージのビルドを行う。$_VERSIONはトリガーの変数として設定します。
# $PROJECT_IDには使用中のプロジェクトIDが自動的に挿入されます
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-f', 'Dockerfile', '--tag=gcr.io/$PROJECT_ID/cb-sample-server:$_VERSION', '.']
# 作成したcb-sample-serverイメージをPUSHする
- name: 'gcr.io/cloud-builders/docker'
args: ["push", "gcr.io/$PROJECT_ID/cb-sample-server:$_VERSION"]
# Clusterを取得。$_ZONEはトリガーの変数として設定します。
- name: 'gcr.io/cloud-builders/gcloud'
args:
- beta
- container
- clusters
- get-credentials
- cb-sample-server
- --zone=$_ZONE
- --project=$PROJECT_ID
# アプリのデプロイ設定
- name: 'gcr.io/cloud-builders/kubectl'
args:
- 'apply'
- '--filename=deployment.yaml'
timeout: 1000s
CloudBuildのトリガーの作成
ブラウザー上、GCPのWeb Console画面を開きます。
1. 左のナビゲーションメニューからTools > Cloud Build選択
2. Cloud Build > Build triggers > Add triggerボタンクリック
3. Github選択後、Continueボタンクリック
4. レポジトリ選択
※github.comの認証は省略させて頂きます。
5. トリガーの内容設定
トリガー名はなんでも構いません
cloudbuild.yamlを選択
cloudbuild.yamlで利用する変数を設定
_VERSION : latest
_ZONE : asia-northeast1-a
トリガー実行と動作確認
1. cloudbuildの画面からトリガーの実行を押して確認
2. GitHub Pushを実行してトリガーが発火されるか確認
最後に
備忘録がてら書いたので雑な部分も多いです
わからない部分の質問や間違っている部分のコメントお待ちしております