モチベーション
GitHub上で管理しているCloud Functionsのコードについて、masterにマージされたタイミングでdeployして欲しい。
Cloud Buildとは何か?
Docker Image作ったり Cloud Functionsをdeployしたり、テストしたりできます。CircleCIみたいなものをイメージして頂けるとよいかなと思います。各タスクに必要なDocker Imageについて、GCPが提供している公式のイメージが使え、GCP内のリソースにもアクセスできるので、GCP固有の機能を使う際にはCloud Buildを用いるのが便利なのではないでしょうか。GCPを利用しているサービスでCloud Buildを利用すると、Credentialsな情報をGCP内のみで扱うことができるというメリットもあります。
今回やることの一覧
- Cloud Source Repositoriesを作成
- Cloud Source RepositoriesとGitHubを連携
- Cloud Buildの Triggerを設定
- Cloud Buildの build config fileを設定
事前準備
今回デプロイしたいコードを用意したGitHubリポジトリを作成しておきます。今回はサンプルとして下記のリポジトリを用意しました。
https://github.com/selmertsx/cloud_source_repository_test
Cloud Source Repositoriesの設定
Cloud Source Repositoriesに関して設定しなければならない項目は下記2点です。全部で10分程度で終わります。
- Cloud Source Repositoriesを作成
- Cloud Source RepositoriesとGitHubを連携
この設定ですが、基本的に公式で提供されているこの手順通りにやれば大丈夫です。すると、このように連携可能なGitHubリポジトリの一覧が出てくるので、ここから目的のものを選びましょう。今回はcloud_source_repository_testを選択します。
Cloud Build Triggerの設定
- Cloud Buildのトリガー設定ページにアクセス
- Add Triggerを選択
- Cloud Source Repositories のリポジトリを選択
- 先程設定したCloud Source Repositoriesを選択
- Triggerの設定をする
- 今回はmaster branchの変更時にcloud buildを実行したいので、下記のように設定した
cloud functionsの実装
最初にコードをuploadする際のbucketを用意します。
$ gsutil mb gs://selmertsx-sample-bucket Creating gs://selmertsx-sample-bucket/...
exports.subscribe = (event, callback) => { return callback(null, "Success"); }
今回はシンプルにこれだけです!
build config fileの設定
build config fileの設定については、下記資料を参考にして行いました。
steps: - name: 'gcr.io/cloud-builders/gcloud' args: - beta - functions - deploy - subscribe - --stage-bucket=selmertsx-sample-bucket - --trigger-topic=cloud-builds
上記ファイルをloud_source_repository_testのルートディレクトリに置いて、master branchにpushします。すると下記のようにcloud buildが実行されます。
今回のjavascriptコードはcloud buildの実行をtriggerにしているので、deployされたコードはそのまま実行されちゃいます。その結果がこちらです。
というわけで、Cloud BuildからCloud Functionsがデプロイできるところまで確認できました。