selmertsxの素振り日記

ひたすら日々の素振り内容を書き続けるだけの日記

GCPのCloud BuildでCloudFunctionsをデプロイする

モチベーション

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を選択します。

f:id:selmertsx:20181005170848p:plain

Cloud Build Triggerの設定

  • Cloud Buildのトリガー設定ページにアクセス
  • Add Triggerを選択
  • Cloud Source Repositories のリポジトリを選択
  • 先程設定したCloud Source Repositoriesを選択
  • Triggerの設定をする
    • 今回はmaster branchの変更時にcloud buildを実行したいので、下記のように設定した

f:id:selmertsx:20181005170953p:plain

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が実行されます。

f:id:selmertsx:20181005170801p:plain

今回のjavascriptコードはcloud buildの実行をtriggerにしているので、deployされたコードはそのまま実行されちゃいます。その結果がこちらです。

f:id:selmertsx:20181005170712p:plain

というわけで、Cloud BuildからCloud Functionsがデプロイできるところまで確認できました。