ビルドステップの順序の構成

ビルドステップの実行順序を指定できます。デフォルトでは、ビルドステップは順番に実行されますが、同時に実行するように構成することもできます。

このページでは、ビルドステップの順序を構成する方法について説明します。

ビルドステップの順序と依存関係

ビルドステップで waitFor フィールドを使用して、そのビルドステップの前に実行する必要のあるステップを指定します。waitFor の値が指定されない場合、ビルドステップは、ビルド リクエスト内の先行するすべてのビルドステップが正常に完了するまで待機した後に実行されます。

ビルドステップをビルド時にすぐに実行するには、waitFor フィールドで - を使用します。

steps フィールド内のビルドステップの順序は、ステップが実行される順序に関係します。ステップは waitFor フィールド内で定義された依存関係に基づいて、順次または同時に実行されます。

ステップは、その waitFor 内のすべての id に依存し、各依存関係が正常に終了するまで開始しません。

オプションの waitFor フィールドを使用しない(または waitFor が空の)ステップは、先行するすべてのステップが正常に終了するまで開始しません。したがって、waitFor フィールドに id が含まれるステップがない場合、すべてのステップが定義された順序で 1 つずつ順番に実行されます。

ステップに - のみが含まれた waitFor があると、ビルドの開始に依存できます。ステップが - のみに依存すると宣言した場合、そのステップはビルド開始時にすぐに実行されます。最初に定義されたステップは、暗黙的に開始に依存します。

次のスニペットは、連続して実行される 2 つのステップを含むビルド構成を示しています。

YAML

steps:
- name: foo
- name: bar

JSON

{
    "steps": [{
        "name": "foo"
    },
    {
        "name": "bar"
    }
    ]
}

次のスニペットは、開始に依存する 2 つの同時ステップを示しています。3 番目のステップは、最初の 2 つのステップが正常に終了した後、開始します。この同時ビルドは、ビルドの開始時点でステップの AB を実行します。3 番目のステップは、先行する両方のステップが完了するまで、暗黙的に待機します。この例は、後続の waitFor で参照されていない id フィールドを省略することで簡略化できます。

YAML

steps:
- name: foo
  id: A
- name: bar
  id: B
  waitFor: ['-']
- name: baz

JSON

{
    "steps": [
    {
        "name": "foo",
        "id": "A"
    },
    {
        "name": "bar",
        "id": "B",
        "waitFor": ["-"]
    },
    {
        "name": "baz"
    }
    ]
}

次のスニペットは、前のステップに依存する同時ステップを示しています。ステップ A は、ビルド開始時にすぐに実行されます。ステップ BC は、A が正常に完了した後に同時に実行されます。ステップ BidwaitFor の各フィールドと、ステップ Cid フィールドは、省略しても実行順序が変化しないことに注意してください。

YAML

steps:
- name: foo
  id: A
- name: bar
  id: B
  waitFor:
  - A
- name: baz
  id: C
  waitFor:
  - A

JSON

{
    "steps": [
    {
        "name": "foo",
        "id": "A"
    },
    {
        "name": "bar",
        "id": "B",
        "waitFor": [
            "A"
        ]
    },
    {
        "name": "baz",
        "id": "C",
        "waitFor": [
            "A"
        ]
    }
    ]
}

以下の例では、gsutil ステップと wget ステップを同時に呼び出しています。 これらのステップが完了した後、ubuntu ステップが呼び出されます。

YAML

steps:
# Download the binary and the data in parallel.
- name: 'gcr.io/cloud-builders/wget'
  args: ['https://example.com/binary']
- name: 'gcr.io/cloud-builders/gsutil'
  args: ['cp', 'gs://$PROJECT_ID-data/rawdata.tgz', '.']
  waitFor: ['-']  # The '-' indicates that this step begins immediately.

# Run the binary on the data, once both are downloaded.
- name: 'ubuntu'
  args: ['./binary', 'rawdata.tgz']

JSON

{
  "steps": [
    {
      "name": "gcr.io/cloud-builders/wget",
      "args": [
        "https://example.com/binary"
      ]
    },
    {
      "name": "gcr.io/cloud-builders/gsutil",
      "args": [
        "cp",
        "gs://$PROJECT_ID-data/rawdata.tgz",
        "."
      ],
      "waitFor": [
        "-"
      ]
    },
    {
      "name": "ubuntu",
      "args": [
        "./binary",
        "rawdata.tgz"
      ]
    }
  ]
}

以下の例では、id フィールドを使用して、特定のビルドステップを特定します。id の値は、ビルドステップの順序を定義するために waitFor で使用されます。

  • 最初に、fetch-resources ステップで gsutil を使用して Cloud Storage のローカル リソースをコピーします。同時に、go でソースコードを生成、テスト、インストールします。
  • その後、他のすべてのステップが完了してから、docker ビルドステップでイメージがビルドされます。

YAML

steps:
- name: 'gcr.io/cloud-builders/go'
  args: ['generate']
- name: 'gcr.io/cloud-builders/go'
  args: ['test', './...']
- name: 'gcr.io/cloud-builders/go'
  args: ['install', 'mytarget']
  id: 'go-install'

- name: 'gcr.io/cloud-builders/gsutil'
  args: ['cp', '-r', './somefiles', 'gs://my-resource-bucket/somefiles']
  waitFor: ['-']  # The '-' indicates that this step begins immediately.
  id: 'fetch-resources'

- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/mytarget', '.']
  waitFor: ['go-install', 'fetch-resources']

images: ['gcr.io/$PROJECT_ID/mytarget']

JSON

{
  "steps": [
    {
      "name": "gcr.io/cloud-builders/go",
      "args": [
        "generate"
      ]
    },
    {
      "name": "gcr.io/cloud-builders/go",
      "args": [
        "test",
        "./..."
      ]
    },
    {
      "name": "gcr.io/cloud-builders/go",
      "args": [
        "install",
        "mytarget"
      ],
      "id": "go-install"
    },
    {
      "name": "gcr.io/cloud-builders/gsutil",
      "args": [
        "cp",
        "-r",
        "./somefiles",
        "gs://my-resource-bucket/somefiles"
      ],
      "waitFor": [
        "-"
      ],
      "id": "fetch-resources"
    },
    {
      "name": "gcr.io/cloud-builders/docker",
      "args": [
        "build",
        "-t",
        "gcr.io/$PROJECT_ID/mytarget",
        "."
      ],
      "waitFor": [
        "go-install",
        "fetch-resources"
      ]
    }
  ],
  "images": [
    "gcr.io/$PROJECT_ID/mytarget"
  ]
}

次のステップ