Mengonfigurasi urutan langkah-langkah build

Anda dapat menentukan urutan langkah-langkah build dieksekusi. Secara default, langkah-langkah build dijalankan secara berurutan, tetapi Anda dapat mengonfigurasinya agar berjalan secara bersamaan.

Halaman ini menjelaskan cara mengonfigurasi urutan langkah-langkah build.

Urutan dan dependensi langkah-langkah build

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

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

Urutan langkah-langkah build di kolom steps terkait dengan urutan langkah-langkah dieksekusi. Langkah-langkah akan dijalankan secara berurutan atau bersamaan berdasarkan dependensi yang ditentukan di kolom waitFor.

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

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

Langkah-langkah dapat bergantung pada awal build dengan waitFor yang hanya berisi -. Dengan mendeklarasikan bahwa langkah-langkah hanya bergantung pada -, langkah-langkah akan segera dijalankan saat build dimulai. Langkah-langkah pertama yang ditentukan bergantung secara implisit pada awal.

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

YAML

steps:
- name: foo
- name: bar

JSON

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

Cuplikan berikut menunjukkan dua langkah bersamaan yang bergantung pada awal; langkah-langkah ketiga menunggu dua langkah pertama berhasil diselesaikan sebelum diluncurkan. Build bersamaan ini menjalankan langkah-langkah A dan B pada awal build. Langkah-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-langkah bersamaan yang bergantung pada langkah-langkah sebelumnya. Langkah-langkah A akan segera dijalankan saat build dimulai. Langkah-langkah B dan C dijalankan secara bersamaan setelah A berhasil diselesaikan. Perhatikan bahwa kolom id dan waitFor di langkah-langkah B, dan kolom id di langkah-langkah C, dapat dihapus 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 berikut memanggil langkah-langkah gcloud storage dan wget secara bersamaan. Setelah langkah-langkah ini selesai, langkah-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/gcloud'
  args: ['storage', '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/gcloud",
      "args": [
        "storage",
        "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-langkah build:

  • Pertama, langkah-langkah fetch-resources menggunakan gcloud storage untuk menyalin resource lokal dari Cloud Storage. Secara bersamaan, go membuat, menguji, dan menginstal kode sumber.
  • Kemudian, langkah-langkah build docker membuat image setelah semua langkah-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/gcloud'
  args: ['storage', '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/gcloud",
      "args": [
        "storage",
        "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 berikutnya