このページでは、Cloud Build を使用して Go アプリケーションをビルド、テスト、コンテナ化、デプロイする方法と、テストログを Cloud Storage に保存する方法について説明します。
始める前に
このページの説明は、Go と以下の知識があることを前提としています。
-
Cloud Build、Cloud Run、Artifact Registry API を有効にする。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。 - このページで
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 デプロイを実行する方法を学習する。
- コンテナ イメージを作成する方法を学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。