Circle CIでCloud Functionをデプロイする
Circle CIからGoogle Cloud Functionsに関数をデプロイする方法を調べたのでメモします。
具体的には、GitHub → Circle CI → Cloud Source Repository → Cloud Functionの流れで継続的インテグレーションと継続的デプロイを行います。
- 開発者がGitHubのリポジトリにソースコードをpushする。
- Circle CIでビルドとテストを行う。
- Circle CIでCloud Source Repositoryに成果物をpushする。
- Cloud Source RepositoryからCloud Functionにデプロイが行われる。
開発者がCloud Source Repositoryに直接pushしてもよいのですが、CIをパスした場合のみデプロイしたい、あるいはビルドした成果物をデプロイしたい場合はCircle CIを経由させると実現できます。
設定方法
まず、Cloud Source Repositoriesで新しいリポジトリを作成します。リポジトリを作成したら、 “Generate and store your Git credentials” でSSHでアクセスするためのクレデンシャルを取得します。下記のような文字列が表示されるのでメモしておきます。
machine source.developers.google.com login **** password ****
Circle CIの管理コンソールで環境変数を設定します。
キー | 設定値 |
---|---|
GCLOUD_PROJECT |
GCPのプロジェクト名 |
GCLOUD_REPO |
Cloud Source Repositoriesのリポジトリ名 |
NETRC |
リポジトリにSSHでアクセスするためのクレデンシャル(前述) |
circle.yml
を作成します。
machine: node: version: 6 deployment: cloud-repository: branch: master commands: - echo "$NETRC" > "$HOME/.netrc" - git remote add google "https://source.developers.google.com/p/${GCLOUD_PROJECT}/r/${GCLOUD_REPO}" - git push google master -f
GitHubのリポジトリにmasterブランチをpushしてみましょう。Circle CIでビルドが実行されて、Cloud Source Repositoriesのリポジトリが新しくなれば成功です。
最後に、Cloud Source RepositoryからデプロイするようにCloud Functionを設定すれば完了です。
APIキー等の秘密情報を追加してデプロイする
Circle CIで秘密情報を管理してデプロイ時に追加することで、公開リポジトリから秘密情報を切り出すことができます。(Cloud Functionsが環境変数に対応するまでのワークアラウンドですが)
deployment: cloud-repository: branch: master commands: - git config user.name circle - git config user.email circle@example.com - echo "$TWITTER_API_CREDENTIALS_JSON" > twitter-api-credentials.json - git add twitter-api-credentials.json - git commit -m 'Add Twitter API Credentials' - echo "$NETRC" > "$HOME/.netrc" - git remote add google "https://source.developers.google.com/p/${GCLOUD_PROJECT}/r/${GCLOUD_REPO}" - git push google master -f
ビルドした成果物をデプロイする
Babel等でビルドした成果物をデプロイしたい場合は、下記のように成果物をコミットしてからpushします。もしくは、新しいローカルリポジトリに成果物を追加してpushします。
deployment: cloud-repository: branch: master commands: - git config user.name circle - git config user.email circle@example.com - git add build - git commit -m 'Add build' - echo "$NETRC" > "$HOME/.netrc" - git remote add google "https://source.developers.google.com/p/${GCLOUD_PROJECT}/r/${GCLOUD_REPO}" - git push google master -f