Webサービスを構築・更新する際、デプロイするためにローカルからまたはサーバ上でコマンドを入力し、適切な位置へファイル群を配置したりします。この手順を自動化するために Jenkins や Circle CI など自動化する CIツール が利用されたりします。
本ブログでもよく出てくる Google App Engine (GAE) などもJenkinsを利用して自動化できますが、サーバにCloud SDKのインストールが必要であったり、インストールされているプログラミング言語のバージョンなど注意が必要です。
そこで今回紹介するのは Cloud Build です。これは Google Cloud Platform (GCP) で用意されているCIツールであり、GCPのサービスをうまく連携することができます。特に GAE との相性はとてもよく、簡単に設定することができます。
それでは Cloud Build を利用して GAE へデプロイしてみましょう。
手順
Cloud Build を利用して GAE へデプロイする手順は以下の通りです。ここでは事前にCloud Source Repositories上にApp Engine 用のプロジェクトが存在することを前提に説明します。利用したプロジェクトはGAEのチュートリアルである hello_world です。これを私のアカウントのリポジトリとして用意しました。
https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/appengine/standard_python37/hello_world
- Google App Engine を有効にする
- App Engine Admin API を有効にする
- Cloud Build のトリガーを作成
- Cloud Build サービスアカウントにApp Engineの権限を追加する
- cloudbuild.yaml を作成し Push する
では順番に確認しましょう。
1. Google App Engine を有効にする
GCPのコンソールより「App Engine」を選択し、Google Cloud Platform 上に GAE を配置するためのプロジェクトを作成します。もちろん既存プロジェクトでも問題ありません。そして Google App Engine を表示し有効にします。
2. App Engine Admin API を有効にする
GCPのコンソールより「APIとサービス」を選択し、画面上部にある「APIとサービスを有効化」ボタンをクリックします。
「APIとサービスを検索」から「App Engine Admin API」を探しクリックします。
「有効にする」ボタンをクリックすると App Engine Admin API が有効になります。
3. Cloud Build のトリガーを作成
GCPのコンソールより「Cloud Build」を選択し、「Cloud Build APIを有効にする」ボタンをクリックします。
GCPのコンソールより「Cloud Build > トリガー」を選択し、画面上部にある「トリガーを追加」ボタンをクリックします。
「1. ソースを選択」では、プロジェクトのリポジトリホスティングサービスを選択します。今回私は「Cloud Source Repositories」にファイルを置いているので、これを選択します。
「2. リポジトリを選択」では、プロジェクトのリポジトリを選択します。
「3. トリガーの設定」では、ビルドのトリガーとなるPushを設定します。ここでは一例として、masterブランチにPushされたときにビルドを開始するように設定します。
- トリガーのタイプ … ブランチ
- ブランチ … master
- ビルド設定 … Cloud Build 構成ファイル
- Cloud Build 構成ファイルの場所 … /cloudbuild.yaml
ここで、cloudbuild.yaml はまだ用意していないですが、この後作成します。トリガーを作成するタイミングではまだ存在しなくても大丈夫です。
4. Cloud Build サービスアカウントにApp Engineの権限を追加する
GCPのコンソールより「IAMと管理」を選択し、「Cloud Build サービス アカウント ( xxxxx@cloudbuild.gserviceaccount.com )」の編集ボタンをクリックします。
そして「+別の役割を追加」より「App Engine管理者」を追加します。
5. cloudbuild.yaml を作成し Push する
それではプロジェクトに「cloudbuild.yaml」を作成します。その内容は次のように記述します。には、選択しているプロジェクトのIDを入力してください。
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy', 'app.yaml', '--project', '']
では、このファイルを Commit して master ブランチに Push しましょう。
そして、GCPのコンソールより「Cloud Build」を選択します。すると、ビルドが自動で開始されていることがわかります。
まとめ
私も以前は Jenkins を利用して自動ビルド・デプロイを行っていましたが、断然 Cloud Build を利用したほうが簡単です。ぜひ Cloud Build と Google App Engine を組み合わせて利用してみてください。