LoginSignup
12
8

More than 3 years have passed since last update.

CloudBuildを使ってgithubのpushをGKEにデプロイする

Posted at

記事の目的

自分の備忘録
GitHubのPUSHをトリガーにCloudBuildを発火させてGKEにデプロイする方法

準備

GitHub
GCP
IAMにサービスアカウントにGKEの権限設定
デプロイするアプリケーション(Docker)

CloudBuildとは

スピードと柔軟性

Cloud Build では、すべての言語でソフトウェアを迅速にビルドでき、複数の環境(VM、サーバーレス、Kubernetes、Firebase など)でのビルド、テスト、デプロイ用にカスタム ワークフローの定義を完全に制御できます。cloudbuild.png
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を実行してトリガーが発火されるか確認

最後に

備忘録がてら書いたので雑な部分も多いです
わからない部分の質問や間違っている部分のコメントお待ちしております

参考にしたサイト

今日から始めるDocker【Dockerfileを書いてみよう編】
GCPのCloud Buildを使おう

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8