Mengonfigurasi urutan langkah-langkah build

Anda dapat menentukan urutan eksekusi langkah-langkah build. Secara default, langkah build berjalan secara berurutan, tetapi Anda dapat mengonfigurasinya agar berjalan secara serentak.

Halaman ini menjelaskan cara mengonfigurasi urutan langkah build.

Urutan langkah build dan dependensi

Gunakan kolom waitFor dalam langkah build untuk menentukan langkah mana yang harus dijalankan sebelum langkah build dijalankan. Jika tidak ada nilai yang diberikan untuk waitFor, langkah build akan menunggu semua langkah build sebelumnya dalam permintaan build berhasil diselesaikan sebelum dijalankan.

Untuk menjalankan langkah build segera pada waktu build, gunakan - di kolom waitFor.

Urutan langkah build di kolom steps berkaitan dengan urutan langkah yang dijalankan. Langkah akan berjalan secara berurutan atau serentak berdasarkan dependensi yang ditentukan di kolom waitFor.

Langkah bergantung pada setiap id dalam waitFor-nya dan tidak akan diluncurkan hingga setiap dependensi berhasil diselesaikan.

Langkah tanpa kolom waitFor opsional (atau dengan waitFor kosong) akan menunggu semua langkah sebelumnya berhasil diselesaikan sebelum dieksekusi. Oleh karena itu, jika tidak ada langkah yang berisi id di kolom waitFor-nya, semua langkah akan dieksekusi secara berurutan sesuai urutan yang ditentukan.

Langkah-langkah dapat bergantung pada awal build dengan membuat waitFor hanya berisi -. Dengan mendeklarasikan bahwa langkah hanya bergantung pada -, langkah tersebut langsung berjalan saat build dimulai. Langkah pertama yang ditentukan secara implisit bergantung pada awal.

Cuplikan berikut menunjukkan konfigurasi build dengan dua langkah yang berjalan secara berurutan:

YAML

steps:
- name: foo
- name: bar

JSON

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

Cuplikan berikut menunjukkan dua langkah serentak yang keduanya bergantung pada awal; langkah ketiga menunggu dua langkah pertama berhasil diselesaikan sebelum diluncurkan. Build serentak ini menjalankan langkah A dan B di awal build. Langkah ketiga akan menunggu secara implisit hingga kedua langkah sebelumnya selesai sebelum dimulai. Contoh ini dapat disederhanakan dengan menghapus kolom id, yang tidak direferensikan dalam waitFor berikutnya.

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"
    }
    ]
}

Cuplikan berikut menunjukkan langkah serentak yang bergantung pada langkah sebelumnya. Langkah A langsung berjalan saat build dimulai. Langkah B dan C dijalankan secara serentak setelah A berhasil diselesaikan. Perhatikan bahwa kolom id dan waitFor di langkah B, serta kolom id di langkah C, dapat dihilangkan tanpa mengubah urutan eksekusi.

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"
        ]
    }
    ]
}

Contoh

Contoh di bawah memanggil langkah gsutil dan wget secara serentak. Setelah langkah-langkah ini selesai, langkah ubuntu akan dipanggil.

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"
      ]
    }
  ]
}

Contoh di bawah menggunakan kolom id untuk mengidentifikasi langkah-langkah build tertentu. Nilai dari id digunakan di waitFor untuk menentukan urutan langkah build:

  • Pertama, langkah fetch-resources menggunakan gsutil untuk menyalin resource lokal dari Cloud Storage. Secara bersamaan, go membuat, menguji, dan menginstal kode sumber.
  • Kemudian, langkah build docker akan mem-build image setelah semua langkah lainnya selesai.

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"
  ]
}

Langkah selanjutnya