LoginSignup
1

More than 3 years have passed since last update.

posted at

updated at

Cloud Build トリガーで自動ビルド、テスト&デプロイ

概要

現在、β版として提供されているCloud Buildトリガーの紹介
Buildトリガーを有効にするための手順、設定をまとめました。

Cloud Build トリガーとは

Source RepositoryやGithubにPushを検知して、Cloud Buildを実行できる。
現時点ではβ版(いつからβが出現していたのか。。。)

ソースの取得元として選択できるリポジトリ
- Source Repository
- Github

やること

  • Cloud BuildトリガーでPushを検知してビルドを行う
  • GAE(Google App Engine)に自動でデプロイする

前提

やりたいこと

プログラムを作った後、品質を確保するためには継続的にテスト、デプロイを行う必要があります。(CI/CD)
また、自動化を行うことで人が行っているがためにおこるヌケやモレがなくなります。
GithubではGithub Actionsが実装されて自動でCloud Buildに連携が可能になっていましたが、Source Repositoryでソース管理を行っている場合にもCloud Build トリガーでできるようになりました。

How to set

Build トリガーを設定して実際に動かしてみます。
簡単なフロー図
スクリーンショット 2019-12-03 7.45.17.png

事前設定

クラウドビルドサービスアカウントにApp Engine管理者権限をつける
デプロイ管理者で行けると思ったんですが、なぜか管理者じゃないとダメでした。
App Engine APIを有効にする

Build トリガーの作成

ナビゲーションのCloud BuildからBuild トリガーを選択します。
スクリーンショット 2019-12-03 7.28.56.png

トリガーを作成
スクリーンショット 2019-12-03 7.34.23.png

トリガーの設定
特に何も考えずに全てのpushに反応するようにします。
各項目を設定後、トリガーを作成します。
スクリーンショット 2019-12-04 7.30.32.png

ビルドトリガーの起動

Source Repositoryにpushします。
(適当に改行とか追加してpush)

$ git commit -m "Cloud Build Test"
[master 71e85cb] Cloud Build Test
 1 file changed, 1 insertion(+)
$ git push origin master
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 343 bytes | 343.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2)
To https://source.developers.google.com/p/$PROJECT_ID/r/source-repository-demo
   aab808d..71e85cb  master -> master

ビルドログの確認

Source RepositoryにpushするとBuild トリガーによって自動でビルドが行われます。
Cloud Buildの履歴から確認できます。
スクリーンショット 2019-12-04 7.49.06.png

App Engineに配備されていることの確認

App Engineの該当のサービスにアクセスします。
サービス名はapp.yamlのserviceで定義した名前です。
スクリーンショット 2019-12-04 16.49.06.png

スクリーンショット 2019-12-04 16.52.59.png

自動テスト

go testも実行されています。
この自動テストがエラーになると、後続のデプロイは行われません。
cloudbuild.yamlの環境変数を変更します。

cloudbuild.yaml
steps:
  - name: "gcr.io/cloud-builders/go"
    args: ["test", "./test/..."]
    env:
      - "TEST_ENV_VAL=null"
      - "GOPATH=golib"
  - name: "gcr.io/cloud-builders/gcloud"
    args: ["app", "deploy"]
timeout: "1600s"

main.goも以下のように変更します。

main.go
package main

import (
    "fmt"
    "net/http"
)

func main() {
    // ①
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, Build Trigger! Test error")
    })

    // ②
    http.ListenAndServe(":8080", nil)
}

ソースを変更してSource Repositoryにpushします。
テストがエラーになっています。

スクリーンショット 2019-12-04 17.00.41.png

デプロイが行われておらず、ソースが反映されていません。
スクリーンショット 2019-12-04 16.52.59.png

いい感じだと思われる使い方

開発用、ステージング用、本番用のブランチを用意し、それぞれのブランチに対応したBuild トリガーを作成する。
スクリーンショット 2019-12-04 17.07.12.png

といいんじゃないかなぁとおもいました

その他機能

RESTAPIが用意されているみたいです。
Build Trigger REST API

Buildの開始は
POST https://cloudbuild.googleapis.com/v1/projects/{projectId}/builds
でJsonパラメーターに応じて指定のトリガーが起動されるようです。

実行中のBuildのキャンセルもあるようですが、どんなふうに使うんだろう。。。

今後望むこと

AWSのこのめっちゃべんりきのうがほしい。Build トリガーかんけいない
Test Reports with AWS CodeBuild

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
What you can do with signing up
1