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-resourcesmenggunakangcloud storageuntuk menyalin resource lokal dari Cloud Storage. Secara bersamaan,gomembuat, menguji, dan menginstal kode sumber. Kemudian, langkah-langkah build
dockermembuat 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
- Mengonfigurasi Cloud Build untuk mem-build, menguji, dan men-deploy artefak.
- Pelajari cara menjalankan build secara manual dan menggunakan pemicu.