Google Cloud Buildを使い、WEBフロントコードのビルドの自動化を行いましたのでGoogle Cloud Buildの簡単な導入方法について紹介しようと思います。
Google Cloud Build とは
2018/7/24のサンフランシスコで行われたGoogleのクラウド・カンファレンスでCI/CDプラットフォームとして発表されたGCP上で継続的なビルド、テスト、デプロイを実現するマネージドサービスです。
- 1日あたり120分までのビルド時間が無料(これを超える部分の料金は毎分0.0034ドル)
- 最大10並列処理まで
- もともと Container Builderって名前のサービスだった
今回はWEBフロントのコードをビルドしてGCSに配置するのに使用しています。1ビルド数分で完了するため無料で使用可能です。
デプロイ要件
- develop、staging、production環境ごとにデプロイ
- 社内で開発した共通コンポーネントをGitHubのprivateレポジトリで管理しているためビルド時に取得が必要
デプロイ設定
GCPのCloud Buildでトリガーの作成(2018/09/28時点 ベータ版)を行います。このトリガーをGitHubのレポジトリと連携させて、特定のブランチにマージが実行された時に「cloudbuild.yaml」を実行するように設定します。
steps:
# 1 Get rsa and known_hosts files to access to git
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', 'gs://*******.com/ssh/gitlab-deploy-key', '/root/.ssh/id_rsa']
volumes:
- name: 'ssh'
path: /root/.ssh
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', 'gs://*******.com/ssh/known_hosts', '/root/.ssh/known_hosts']
volumes:
- name: 'ssh'
path: /root/.ssh
# 2 Set up files to access to git
- name: 'gcr.io/cloud-builders/yarn:node-8.11.0'
entrypoint: 'bash'
args:
- '-c'
- |
chmod 600 /root/.ssh/id_rsa
cat <<EOF >/root/.ssh/config
Hostname github.com
IdentityFile /root/.ssh/id_rsa
EOF
volumes:
- name: 'ssh'
path: /root/.ssh
# 3 Start deploy
- name: 'gcr.io/cloud-builders/yarn:node-8.11.0'
args: ['install']
volumes:
- name: 'ssh'
path: /root/.ssh
- name: 'gcr.io/cloud-builders/yarn:node-8.11.0'
args: ['run', 'build:$_REACT_APP_ENV']
- name: 'gcr.io/cloud-builders/gsutil'
args: ['-m', 'cp', '-r', 'build/*', 'gs://*******.com/']
トリガーにはアンダーバーから始まる変数の設定が可能ですので、これを使って環境別のビルドコマンドの切り替えを行なっています。ここでは「_REACT_APP_ENV」という変数を作成しています。
社内共通コンポーネントのprivateレポジトリへアクセスできるようにGCSに鍵を配置しておいてビルド実行時に取得し、その鍵を利用してアクセスできるようにしています。(# 1、# 2 の部分)
鍵の設定が不要であれば「# 3 Start deploy」以下のスクリプトだけ(volumes 部分も不要)で済むので非常にシンプルなファイルでの記述が可能になっています。
まとめ
今回はシンプルなCloud Buildの導入の紹介をさせていただきました。鍵の管理にはKMSを使った方がシンプルかもしれません。今後はこれにテストも組み込んでいく予定です。
GitHubにCloud Build のアプリを入れることでビルド結果をGitHub上で確認できるようになります。コマンドベースの記述で簡単に構築できますので皆さんもぜひ使ってみてください。