Google Cloud Buildの導入の紹介

Goro Ohba
VISITS Tech Blog
Published in
6 min readOct 16, 2018

こんにちは、VISITS Technologies エンジニアの@goroです。

Google Cloud Buildを使い、WEBフロントコードのビルドの自動化を行いました。この記事ではGoogle Cloud Buildの簡単な紹介と導入方法について紹介しようと思います。

Google Cloud Build とは

2018/7/24のサンフランシスコで行われたGoogleのクラウド・カンファレンスでCI/CDプラットフォームとして発表されたGCP上で継続的なビルド、テスト、デプロイを実現するマネージドサービスです。

  • 1日あたり120分までのビルド時間が無料(これを超える部分の料金は毎分0.0034ドル)
  • 最大10並列処理まで
  • もともと Container Builderって名前のサービスだった

CIの仕組み構築にあたりVISITSの他のプロダクトではCircleCIを使用しているのですが、GCP上で完結させてシンプルにできるためCloud Buildの導入を行いました。

今回はWEBフロントのコードをビルドしてGCSに配置するのに使用しています。1ビルド数分で完了するため無料で使用可能です。

Google Cloud Buildの導入で行ったこと

導入にあたってまずは要件の確認を行い、Cloud Buildでその要件をクリアする設定ができるかの検証を行いながら設定しました。

デプロイ要件

  • develop、staging、production環境ごとにデプロイ
  • 社内で開発した共通コンポーネントをGitHubのprivateレポジトリで管理しているためビルド時に取得が必要

デプロイ設定

GCPのCloud Buildでトリガーの作成(2018/09/28時点 ベータ版)を行います。このトリガーをGitHubのレポジトリと連携させて、特定のブランチにマージが実行された時に「cloudbuild.yaml」を実行するように設定します。

今回、実際に作成した「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上で確認できるようになります。コマンドベースの記述で簡単に構築できますので皆さんもぜひ使ってみてください。

最後に

VISITSではエンジニアを積極募集中です!

  • GCPによる環境構築に興味ある方
  • CI、自動化を極めていきたい方

は気軽にお声がけください!

--

--