このページでは、Cloud Build を使用して Go バイナリをビルドし、Cloud Storage に push する方法について説明します。Cloud Build を初めて使用する場合は、最初にクイックスタートとビルド構成の概要をご覧ください。
Cloud Build を使用すると、一般公開されているコンテナ イメージを使用してタスクを実行できます。構成ファイルで DockerHub にある一般公開の golang
イメージを使用して Go アプリケーションをビルドできます。
始める前に
このページの説明は、Go
の知識があることを前提としています。また、次の準備が必要です。
- Go アプリケーションのソースコードが必要です。
- ビルドされた Go バイナリを push する Cloud Storage バケットが必要です。バケットの作成手順については、ストレージ バケットの作成をご覧ください。
- このページで
gcloud
コマンドを実行するには、gcloud
コマンドライン ツールをインストールします。
Go モジュールでビルドする
Go 1.11
には、バージョニングされたモジュールの予備サポートが含まれています。
Docker Hub にある一般公開の golang
イメージは、Go モジュールを使用したビルドの作成に対応しています。このイメージを Cloud Build 構成ファイルのビルドステップとして使用すると、イメージ内で go
コマンドを呼び出すことができます。このビルドステップに渡された引数が golang
ツールに直接渡されるため、このイメージで任意の go
コマンドを実行できます。
Go アプリケーションをビルドするには:
(Go モジュールを使用しない場合は省略可)Go モジュールを初期化する: アプリケーションのソースコードが格納されているのと同じディレクトリで、次のコマンドを実行して
GOPATH
を指定し、Go モジュールの使用を有効にします。go mod init [GOPATH]
Cloud Build 構成ファイルを
cloudbuild.yaml
またはcloudbuild.json
という名前で作成します。モジュールをビルドする: 構成ファイルで、
go build
コマンドを呼び出すビルドステップを追加します。YAML
# Build the module. steps: - name: golang args: ['go', 'build', '.']
JSON
{ "steps": [ { "name": "golang", "args": [ "go", "build", "." ] } ] }
ビルド アーティファクトを保存する: Cloud Storage バケットにバイナリを格納するため、
artifacts
フィールドを追加します。YAML
# Build the module. steps: - name: golang args: ['go', 'build', '.'] artifacts: objects: location: '[STORAGE_LOCATION]' paths: ['[ARTIFACT_PATH]']
JSON
{ "steps": [ { "name": "golang", "args": [ "go", "build", "." ] } ] "artifacts": { "objects": { "location": [ "[STORAGE_LOCATION]" ], "paths": [ "[ARTIFACT_PATH]" ] } } }
ここで
[STORAGE_LOCATION]
: Cloud Build がアーティファクトを保存する必要のある、Cloud Storage バケットまたはバケット内のフォルダ(gs://mybucket
、gs://mybucket/some/folder
など)。[ARTIFACT_PATH]
: 1 つ以上のアーティファクトへのパス。
ビルド構成ファイルを使用してビルドを開始します。
gcloud builds submit --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]
ここで
[CONFIG_FILE_PATH]
は、ビルド構成ファイルへのパスです。[SOURCE_DIRECTORY]
は、ソースコードのパスまたは URL です。
gcloud builds submit
コマンドに[CONFIG_FILE_PATH]
と[SOURCE_DIRECTORY]
を指定しないと、Cloud Build は、構成ファイルとソースコードが現在の作業ディレクトリにあることを前提とします。
次のステップ
- コンテナ イメージを作成する方法を学習する。