このページでは、Cloud Build を使用して Go アプリケーションをビルド、テスト、デプロイする方法について説明します。
準備
このページの説明は、Go と以下の知識があることを前提としています。
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
- このページで
gcloud
コマンドを実行するには、Google Cloud CLI をインストールします。 - Go プロジェクトを用意します。
- Cloud Build を使用して Go アプリをコンテナ化する場合は、ソースコードとともに
Dockerfile
が必要になります。 - ビルドしたコンテナを Artifact Registry に保存する場合は、Artifact Registry に Docker リポジトリを作成します。
- テストログを Cloud Storage に保存する場合は、Cloud Storage にバケットを作成します。
必要な IAM 権限
テストログを Logging に保存するには、Cloud Storage バケットのストレージ オブジェクト作成者(
roles/storage.objectCreator
)ロールをビルドサービス アカウントに付与します。ビルドされたイメージを Artifact Registry に保存するには、ビルドサービス アカウントに Artifact Registry 書き込み(
roles/artifactregistry.writer
)ロールを付与します。
これらのロールを付与する方法については、IAM ページを使用してロールを付与するをご覧ください。
Go ビルドの構成
Docker Hub にある一般公開の golang
イメージは、Go モジュールを使用したビルドの作成に対応しています。このイメージを Cloud Build 構成ファイルのビルドステップとして使用すると、イメージ内で go
コマンドを呼び出すことができます。このビルドステップに渡された引数が golang
ツールに直接渡されるので、このイメージで任意の go
コマンドを実行できます。
このセクションでは、Go アプリのビルド構成ファイルの例を紹介します。これにはアプリのビルド、単体テストの追加、テスト合格後、アプリをコンテナ化、デプロイするためのビルドステップが含まれます。
Go アプリケーションをビルドするには:
プロジェクトのルート ディレクトリに、
cloudbuild.yaml
という名前で Cloud Build 構成ファイルを作成します。ビルドとテスト: アプリケーションで単体テストを定義している場合、ビルドステップに次のフィールドを追加してテストを実行するように Cloud Build を構成できます。
name
: タスクの Docker Hub から取得した Golang イメージを使用するには、このフィールドの値をgolang
に設定します。entrypoint
: このフィールドの値を/bin/bash
に設定します。これにより、ビルドステップから複数行の bash コマンドを直接実行できます。args
: ビルドステップのargs
フィールドは引数のリストを受け取り、name
フィールドによって参照されるイメージに渡します。次の例では、args
フィールドが次の引数を受け取ります。- テストログ フォーマッタを実行してテストログ出力をダウンロードする。
- ログ出力を出力する。
- テスト結果を
sponge.log
に保存する。 sponge.log
の結果を JUNIT XML ファイルに出力します。JUNIT XML ファイルの名前は、ビルドに関連付けられた commit ID の短縮バージョンを使用して作成されます。以降のビルドステップでは、このファイルのログを Cloud Storage に保存します。
アプリをコンテナ化する: ビルドステップを追加してテストに合格したことを確認したら、アプリケーションをビルドします。Cloud Build には、Go アプリケーションのコンテナ化に使用できるビルド済み Docker イメージがあります。アプリをコンテナ化するには、ビルドステップに次のフィールドを追加します。
name
: タスクに事前ビルドされた Docker イメージを使用するには、このフィールドの値をgcr.io/cloud-builders/docker
に設定します。args
:docker build
コマンドの引数を、このフィールドの値として追加します。
次のビルドステップでは、イメージ
myimage
をビルドし、commit ID の短縮バージョンでタグ付けします。ビルドステップでは、プロジェクト ID、リポジトリ名、短縮 SHA 値の置換を使用するため、これらの値はビルド時に自動的に置き換えられます。イメージを保存するためには、Artifact Registry に Docker リポジトリを作成するか、既存のリポジトリが必要です。コンテナを Artifact Registry に push: ビルドされたコンテナは Artifact Registry 内に保存できます。Artifact Registry は、ビルド アーティファクトを保存、管理、保護するために使用できる Google Cloud サービスです。これを行うには、Artifact Registry 内に既存の Docker リポジトリが必要です。Artifact Registry Docker リポジトリにイメージを格納するように Cloud Build を構成するには、次のフィールドを含むビルドステップを追加します。
name
: タスクに公式のdocker
ビルダー イメージを使用するには、このフィールドの値をgcr.io/cloud-builders/docker
に設定します。args
:docker push
コマンドの引数を、このフィールドの値として追加します。リンク先 URL には、イメージを保存する Artifact Registry Docker リポジトリを入力します。
次のビルドステップでは、前の手順でビルドしたイメージを Artifact Registry に push します。
コンテナを Cloud Run にデプロイする: Cloud Run にイメージをデプロイするには、次のフィールドを含むビルドステップを追加します。
name
: このフィールドの値をgoogle/cloud-sdk
に設定して、gcloud CLI イメージを使用し、gcloud
コマンドを呼び出して Cloud Run にイメージをデプロイします。args
:gcloud run deploy
コマンドの引数をこのフィールドの値として追加します。
次のビルドステップでは、以前にビルドしたイメージを Cloud Run にデプロイします。
テストログを Cloud Storage に保存する: 既存のバケットのロケーションとテストログのパスを指定して、テストログを Cloud Storage に保存するように Cloud Build を構成できます。
次のビルドステップでは、JUNIT XML ファイルに保存したテストログを Cloud Storage バケットに保存します。
次のスニペットは、上述のすべてのステップの完全なビルド構成ファイルを示しています。
gcloud CLI またはビルドトリガーを使用してビルドを開始します。 ビルドの開始時に Artifact Registry リポジトリ名を指定する必要があります。
gcloud CLI を使用してビルドを開始するときに、Artifact Registry リポジトリを指定するには、次を実行します。
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \ --substitutions=_AR_REPO_NAME="AR_REPO_NAME"
AR_REPO_NAME
を Artifact Registry リポジトリの名前に置き換えます。ビルドトリガーを使用してビルドするときに Artifact Registry リポジトリを指定するには、ビルドトリガーの作成時に置換変数フィールドで Artifact Registry リポジトリの名前を指定します。
次のステップ
- Compute Engine で Blue/Green デプロイを実行する方法を学習する。
- コンテナ イメージを作成する方法を学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。