コマンドラインと API からビルドを開始する

このページでは、gcloud コマンドライン ツールと Cloud Build API を使用して、Cloud Build でビルドを手動で開始する方法について説明します。

始める前に

必要な IAM 権限

IAM ロールを付与する方法については、Cloud Build リソースへのアクセスを構成するをご覧ください。

ビルドの実行

gcloud

Dockerfile の使用:

Dockerfile には、Cloud Build で Docker イメージをビルドするために必要な情報がすべて記載されています。

Dockerfile を使用してビルド リクエストを実行するには、アプリケーション コード、Dockerfile、その他のアセットが存在するディレクトリから次のコマンドを実行します。

gcloud builds submit --tag gcr.io/project-id/image-name .

ここで

  • project-id は、Cloud プロジェクトの名前です。
  • image-name は、ビルドするイメージです。
  • . は、ソースコードが現在の作業ディレクトリにあることを指定します。

ビルドされるイメージのフルネームは「gcr.io/project-id/image-name」です。Container Registry に push されるイメージは、レジストリ名の形式を使用します。

gcloud builds submit コマンド:

  • . で参照される現在のディレクトリ内のアプリケーション コード、Dockerfile、その他のすべてのアセットを圧縮します。
  • ファイルを Cloud Storage バケットにアップロードします。
  • アップロードされたファイルを入力として使用して、ビルドを開始します。
  • 指定された名前を使用してイメージをタグ付けします
  • ビルドされたイメージを Container Registry に push します。

ビルドの進行中は、出力がシェルまたはターミナル ウィンドウに表示されます。ビルドが完了すると、次のような出力が表示されます。

    DONE
    ---------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION STATUS
    $BUILD_ID                             2016-10-28T15:21:18+00:00  12S      SUCCESS

ここで、$BUILD_ID はビルドの一意の識別子です。

Cloud Build のビルド構成ファイルの使用:

ビルド構成を使用してビルドを送信するには、次のコマンドを実行します。

    gcloud builds submit --config build-config source-code

ここで

  • build-config は、ビルド構成ファイルへのパスです。
  • source-code は、パスまたは URL のソースコードです。

Cloud プロジェクトで初めて gcloud builds submit を実行すると、Cloud Build はそのプロジェクトに [YOUR_PROJECT_NAME]_cloudbuild という名前の Cloud Storage バケットを作成します。Cloud Build はこのバケットを使用して、ビルドに使用するソースコードを保存します。Cloud Build は、このバケット内のコンテンツを自動的に削除しません。ビルドで使用しなくなったオブジェクトを削除するには、バケットでライフサイクル構成を設定するか、手動でオブジェクトを削除します。

次のコマンドは、Cloud Storage バケットに保存されたアーカイブ済みのソースコードを使用して cloudbuild.yaml ビルド リクエストを送信します。

    gcloud builds submit --config cloudbuild.yaml \
        gs://cloud-build-examples/node-docker-example.tar.gz

. を使用すると、ソースコードが現在の作業ディレクトリにあることを指定できます。

    gcloud builds submit --config cloudbuild.yaml .

gcloudignore: 上記のコマンドで、ビルドのソースコードを含めると、指定されたディレクトリにあるすべてのファイルが Google Cloud Platform にアップロードされ、ビルドが実行されます。ディレクトリ内の特定のファイルを除外する場合は、最上位のアップロード ディレクトリに .gcloudignore という名前のファイルを含めることができます。それにより指定されるファイルが無視されます。トップレベルのアップロード ディレクトリに .gcloudignore ファイルが存在せず、.gitignore ファイルが存在する場合、.gitignore で指定されるファイルに基づく Git 互換の .gcloudignore ファイルが、gcloud ツールにより生成されます。詳細については、gcloudignore のドキュメントをご覧ください。

ビルドに渡すソースコードがない場合は、--no-source フラグを使用します。build-config はビルド構成ファイルのパスです。

    gcloud builds submit --config build-config --no-source

API

デフォルトのワーカープールで curl を使用してビルド リクエストを送信するには:

  1. 次の内容のファイルを request.json という名前で作成します。

    {
        "source": {
            "storageSource": {
                "bucket": "cloud-build-examples",
                "object": "node-docker-example.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/$PROJECT_ID/my-image",
                "."
            ]
        }],
        "images": [
            "gcr.io/$PROJECT_ID/my-image"
        ]
    }
    

    このビルド リクエストで、Cloud Build は build -t gcr.io/$PROJECT_ID/cb-demo-img . 引数を使用して docker ビルドステップを呼び出します。

    ビルドするイメージの完全名は gcr.io/$PROJECT_ID/cb-demo-img です。 Container Registry に push されるイメージは、レジストリ名の形式を使用します。

    ビルドのコードソースは、圧縮された tar アーカイブである node-docker-example.tar.gz にあります。ファイルは、cloud-build-examples という名前の Cloud Storage バケットに保存されます。

  2. 次のコマンドを実行します。ここで、project-id は Cloud プロジェクトの ID です。

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/project-id/locations/global/builds
    

    このコマンドでは、curlprojects.builds.create API メソッドの builds エンドポイントに対する POST 呼び出しで request.json を送信します。

    このコマンドは、ビルドの詳細をシェルまたはターミナル ウィンドウに表示します。出力は JSON レスポンスになり、次のように表示されます。

    {
        "name": "operations/build/$PROJECT-ID/NmZhZW...",
        "metadata": {
            "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
            "build": {
                "id": $BUILD-ID,
                "status": "QUEUED",
                "source": {
                    "storageSource": {
                        "bucket": "cloud-build-examples",
                        "object": "node-docker-example.tar.gz"
                    }
                },
                "createTime": "2017-05-12T18:58:07.341526Z",
                "steps": [
                {
                    "name": "gcr.io/cloud-builders/docker",
                    "args": [
                        "build",
                        "-t",
                        "gcr.io/$PROJECT-ID/cb-demo-img",
                        "."
                    ]
                }
                ],
                "timeout": "600s",
                "images": [
                    "gcr.io/$PROJECT-ID/cb-demo-img"
                ],
                "projectId": $PROJECT-ID,
                "logsBucket": "gs://...",
                "sourceProvenance": {
                    "resolvedStorageSource": {
                        "bucket": "cloud-build-examples",
                        "object": "node-docker-example.tar.gz",
                        "generation": "..."
                    }
                },
                "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=$PROJECT-ID"
            }
        }
    }
    

    JSON レスポンスは、Cloud Build API の Operation リソースを使用してモデル化されます。metadata フィールドは、Build リソースを使用してモデル化されます。QUEUED ステータスはビルドが実行を待機している状態であることを示しています。

カスタム ワーカープールで curl を使用してビルド リクエストを送信するには:

  1. 次の内容のファイルを request.json という名前で作成します。

    {
        "source": {
            "storageSource": {
                "bucket": "cloud-build-examples",
                "object": "node-docker-example.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/$PROJECT_ID/my-image",
                "."
            ]
        }],
        "images": [
            "gcr.io/$PROJECT_ID/my-image"
        ]
    }
    

    このビルド リクエストで、Cloud Build は build -t gcr.io/$PROJECT_ID/cb-demo-img . 引数を使用して docker ビルドステップを呼び出します。

    ビルドするイメージの完全名は gcr.io/$PROJECT_ID/cb-demo-img です。 Container Registry に push されるイメージは、レジストリ名の形式を使用します。

    ビルドのコードソースは、圧縮された tar アーカイブである node-docker-example.tar.gz にあります。ファイルは、cloud-build-examples という名前の Cloud Storage バケットに保存されます。

  2. 次のコマンドを実行します。ここで、project-id は Cloud プロジェクト ID、REGION はカスタム ワーカープールを作成したリージョンです。

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/project-id/REGION/global/builds
    

    このコマンドでは、curlprojects.builds.create API メソッドの builds エンドポイントに対する POST 呼び出しで request.json を送信します。

次のステップ