File konfigurasi build berisi petunjuk bagi Cloud Build untuk melakukan tugas berdasarkan spesifikasi Anda. Misalnya, file konfigurasi build Anda dapat berisi petunjuk untuk mem-build, mengemas, dan mengirim image Docker.
Halaman ini menjelaskan skema file konfigurasi Cloud Build. Untuk mengetahui petunjuk tentang cara membuat dan menggunakan file konfigurasi build, lihat Membuat file konfigurasi build dasar.
Struktur file konfigurasi build
File konfigurasi build dimodelkan menggunakan resource
Build
Cloud Build API.
Anda dapat menulis file konfigurasi build menggunakan sintaksis YAML atau JSON. Jika Anda mengirimkan permintaan build menggunakan alat http pihak ketiga seperti curl, gunakan sintaksis JSON.
File konfigurasi build memiliki struktur berikut:
YAML
steps:
- name: string
args: [string, string, ...]
env: [string, string, ...]
allowFailure: boolean
allowExitCodes: [string (int64 format), string (int64 format), ...]
dir: string
id: string
waitFor: [string, string, ...]
entrypoint: string
secretEnv: string
volumes: object(Volume)
timeout: string (Duration format)
script: string
automapSubstitutions: boolean
- name: string
...
- name: string
...
timeout: string (Duration format)
queueTtl: string (Duration format)
logsBucket: string
options:
env: [string, string, ...]
secretEnv: string
volumes: object(Volume)
sourceProvenanceHash: enum(HashType)
machineType: enum(MachineType)
diskSizeGb: string (int64 format)
substitutionOption: enum(SubstitutionOption)
dynamicSubstitutions: boolean
automapSubstitutions: boolean
logStreamingOption: enum(LogStreamingOption)
logging: enum(LoggingMode)
defaultLogsBucketBehavior: enum(DefaultLogsBucketBehavior)
pool: object(PoolOption)
pubsubTopic: string
requestedVerifyOption: enum(RequestedVerifyOption)
substitutions: map (key: string, value: string)
tags: [string, string, ...]
serviceAccount: string
secrets: object(Secret)
availableSecrets: object(Secrets)
artifacts: object(Artifacts)
goModules: [object(GoModules), ...]
mavenArtifacts: [object(MavenArtifact), ...]
pythonPackages: [object(PythonPackage), ...]
npmPackages: [object(npmPackage), ...]
images:
- [string, string, ...]
JSON
{
"steps": [
{
"name": "string",
"args": [
"string",
"string",
"..."
],
"env": [
"string",
"string",
"..."
],
"allowFailure": "boolean",
"allowExitCodes: [
"string (int64 format)",
"string (int64 format)",
"..."
],
"dir": "string",
"id": "string",
"waitFor": [
"string",
"string",
"..."
],
"entrypoint": "string",
"secretEnv": "string",
"volumes": "object(Volume)",
"timeout": "string (Duration format)",
"script" : "string",
"automapSubstitutions" : "boolean"
},
{
"name": "string"
...
},
{
"name": "string"
...
}
],
"timeout": "string (Duration format)",
"queueTtl": "string (Duration format)",
"logsBucket": "string",
"options": {
"sourceProvenanceHash": "enum(HashType)",
"machineType": "enum(MachineType)",
"diskSizeGb": "string (int64 format)",
"substitutionOption": "enum(SubstitutionOption)",
"dynamicSubstitutions": "boolean",
"automapSubstitutions": "boolean",
"logStreamingOption": "enum(LogStreamingOption)",
"logging": "enum(LoggingMode)"
"defaultLogsBucketBehavior": "enum(DefaultLogsBucketBehavior)"
"env": [
"string",
"string",
"..."
],
"secretEnv": "string",
"volumes": "object(Volume)",
"pool": "object(PoolOption)"
"requestedVerifyOption": "enum(RequestedVerifyOption)"
},
"substitutions": "map (key: string, value: string)",
"tags": [
"string",
"string",
"..."
],
"serviceAccount": "string",
"secrets": "object(Secret)",
"availableSecrets": "object(Secrets)",
"artifacts": "object(Artifacts)",
"goModules": [object(GoModules), ...],
"mavenArtifacts": ["object(MavenArtifact)", ...],
"pythonPackages": ["object(PythonPackage)", ...],
"npmPackages": ["object(npmPackage)", ...],
"images": [
"string",
"string",
"..."
]
}
Setiap bagian file konfigurasi build menentukan bagian tugas yang ingin Anda jalankan oleh Cloud Build:
Langkah-langkah build
Langkah build menentukan tindakan yang ingin Anda lakukan di Cloud Build. Untuk setiap langkah build, Cloud Build mengeksekusi container Docker
sebagai instance docker run. Langkah-langkah build serupa dengan perintah dalam skrip dan memberi Anda fleksibilitas untuk mengeksekusi petunjuk arbitrer dalam build Anda. Jika Anda dapat memaketkan alat build ke dalam container, Cloud Build dapat mengeksekusinya sebagai bagian dari build Anda. Secara default,
Cloud Build mengeksekusi semua langkah build secara berurutan di mesin yang sama.
Jika Anda memiliki langkah-langkah yang dapat berjalan secara bersamaan, gunakan opsi waitFor.
Anda dapat menyertakan hingga 300 langkah build dalam file konfigurasi.
Gunakan kolom steps di file konfigurasi build untuk menentukan langkah build. Berikut adalah
cuplikan jenis konfigurasi yang dapat Anda tetapkan di kolom steps:
YAML
steps:
- name: 'gcr.io/cloud-builders/kubectl'
args: ['set', 'image', 'deployment/mydepl', 'my-image=gcr.io/my-project/myimage']
env:
- 'CLOUDSDK_COMPUTE_ZONE=us-east4-b'
- 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/my-project-id/myimage', '.']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/kubectl",
"args": [
"set",
"image"
"deployment/mydepl"
"my-image=gcr.io/my-project/myimage"
],
"env": [
"CLOUDSDK_COMPUTE_ZONE=us-east4-b",
"CLOUDSDK_CONTAINER_CLUSTER=my-cluster"
]
},
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/my-project-id/myimage",
"."
]
}
]
}
name
Gunakan kolom name dari langkah build untuk menentukan cloud
builder, yang merupakan image container
yang menjalankan alat umum. Anda menggunakan builder di langkah build untuk menjalankan tugas.
Cuplikan berikut menunjukkan langkah-langkah build yang memanggil
pembangun bazel,
gcloud, dan
docker:
YAML
steps:
- name: 'gcr.io/cloud-builders/bazel'
...
- name: 'gcr.io/cloud-builders/gcloud'
...
- name: 'gcr.io/cloud-builders/docker'
...
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/bazel"
...
},
{
"name": "gcr.io/cloud-builders/gcloud"
...
},
{
"name": "gcr.io/cloud-builders/docker"
...
}
]
}
args
Kolom args dari langkah build mengambil daftar argumen dan meneruskannya ke
builder yang dirujuk oleh kolom name. Argumen yang diteruskan ke builder akan diteruskan ke alat yang berjalan di builder, sehingga Anda dapat memanggil perintah apa pun yang didukung oleh alat tersebut. Jika builder yang digunakan dalam langkah build memiliki
titik entri, argumen akan digunakan sebagai argumen untuk titik entri tersebut. Jika builder
tidak menentukan titik entri, elemen pertama dalam args akan digunakan sebagai
titik entri, dan sisanya akan digunakan sebagai argumen.
Anda dapat membuat hingga 100 argumen per langkah. Panjang argumen maksimum adalah 10.000 karakter.
Cuplikan berikut memanggil perintah docker build dan menginstal dependensi
Maven:
YAML
steps:
- name: 'gcr.io/cloud-builders/mvn'
args: ['install']
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/my-project-id/myimage', '.']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/mvn",
"args": [
"install"
]
},
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/my-project-id/myimage",
"."
]
}
]
}
env
Kolom env dari langkah build mengambil daftar variabel lingkungan yang akan digunakan saat menjalankan langkah. Variabelnya memiliki format KEY=VALUE.
Dalam konfigurasi build berikut, kolom env dari langkah build menetapkan
zona Compute Engine dan cluster GKE sebelum menjalankan
kubectl:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
- name: 'gcr.io/cloud-builders/kubectl'
args: ['set', 'image', 'deployment/myimage', 'frontend=gcr.io/myproject/myimage']
env:
- 'CLOUDSDK_COMPUTE_ZONE=us-east1-b'
- 'CLOUDSDK_CONTAINER_CLUSTER=node-example-cluster'
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/myproject/myimage",
"."
]
},
{
"name": "gcr.io/cloud-builders/kubectl",
"args": [
"set",
"image",
"deployment/myimage",
"frontend=gcr.io/myproject/myimage"
],
"env": [
"CLOUDSDK_COMPUTE_ZONE=us-east1-b",
"CLOUDSDK_CONTAINER_CLUSTER=node-example-cluster"
]
}
]
}
dir
Gunakan kolom dir dalam langkah build untuk menetapkan direktori kerja yang akan digunakan saat menjalankan container langkah. Jika Anda menetapkan kolom dir di langkah build,
direktori kerja akan ditetapkan ke /workspace/<dir>. Jika nilai ini adalah jalur
relatif, maka jalur ini relatif terhadap direktori kerja build. Jika nilai ini bersifat
absolut, nilai ini mungkin berada di luar direktori kerja build, sehingga
konten jalur mungkin tidak dipertahankan di seluruh eksekusi langkah build (kecuali jika
volume untuk jalur tersebut ditentukan).
Cuplikan kode berikut menetapkan direktori kerja untuk langkah build sebagai
/workspace/examples/hello_world:
YAML
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['install', '.']
env: ['PROJECT_ROOT=hello']
dir: 'examples/hello_world'
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/go",
"args": [
"install",
"."
],
"env": [
"PROJECT_ROOT=hello"
],
"dir": "examples/hello_world"
}
]
}
timeout
Gunakan kolom timeout di langkah build untuk menetapkan batas waktu dalam mengeksekusi
langkah. Jika Anda tidak menyetel kolom ini, langkah akan berjalan hingga selesai atau hingga build itu sendiri mencapai waktu tunggu habis. Kolom timeout untuk langkah build tidak boleh
melebihi nilai timeout yang ditentukan untuk build.
timeout ditentukan dalam detik (menggunakan format
Durasi) dengan maksimal sembilan digit pecahan, yang diakhiri dengan s (misalnya: 3.5s).
Dalam konfigurasi build berikut, langkah ubuntu akan habis waktunya setelah 500 detik:
YAML
steps:
- name: 'ubuntu'
args: ['sleep', '600']
timeout: 500s
- name: 'ubuntu'
args: ['echo', 'hello world, after 600s']
JSON
{
"steps": [
{
"name": "ubuntu",
"args": [
"sleep",
"600"
],
"timeout": "500s"
},
{
"name": "ubuntu",
"args": [
"echo",
"hello world, after 600s"
]
}
]
}
skrip
Gunakan kolom script di langkah build untuk menentukan skrip shell yang akan dijalankan di
langkah tersebut. Jika Anda menentukan script dalam langkah build, Anda tidak dapat menentukan args
atau entrypoint dalam langkah yang sama. Untuk mengetahui petunjuk penggunaan kolom script, lihat
Menjalankan skrip bash.
automapSubstitutions
Jika disetel ke true, petakan semua substitusi secara otomatis dan sediakan sebagai variabel lingkungan dalam satu langkah. Jika disetel ke false, abaikan
penggantian untuk langkah tersebut. Untuk contoh, lihat Mengganti nilai variabel.
ID
Gunakan kolom id untuk menetapkan ID unik bagi langkah build. id digunakan dengan kolom waitFor untuk mengonfigurasi urutan langkah-langkah build yang harus dijalankan. Untuk mengetahui petunjuk tentang cara menggunakan waitFor dan id, lihat Mengonfigurasi urutan langkah build.
waitFor
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 selesai dengan berhasil sebelum dijalankan. Untuk mengetahui petunjuk tentang cara menggunakan waitFor dan id, lihat Mengonfigurasi urutan langkah build.
entrypoint
Gunakan entrypoint dalam langkah build untuk menentukan titik entri jika Anda tidak ingin
menggunakan titik entri default builder. Jika Anda tidak menetapkan kolom ini, Cloud Build akan menggunakan titik entri builder. Cuplikan berikut menetapkan titik entri untuk langkah build npm:
YAML
steps:
- name: 'gcr.io/cloud-builders/npm'
entrypoint: 'node'
args: ['--version']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/npm",
"entrypoint": "node",
"args": [
"--version"
]
}
]
}
secretEnv
Daftar variabel lingkungan yang dienkripsi menggunakan kunci kriptografis Cloud KMS. Nilai ini harus ditentukan dalam rahasia build. Untuk informasi tentang penggunaan kolom ini, lihat Menggunakan variabel terenkripsi dalam permintaan build.
volumes
Volume
adalah volume container Docker yang dipasang ke langkah-langkah build untuk mempertahankan file
di seluruh langkah-langkah build. Saat menjalankan langkah build, Cloud Build akan otomatis memasang volume workspace ke /workspace. Anda dapat menentukan volume tambahan yang akan di-mount ke dalam penampung langkah build menggunakan kolom volumes untuk langkah Anda.
Misalnya, file konfigurasi build berikut menulis file ke dalam volume pada
langkah pertama dan membacanya pada langkah kedua. Jika langkah-langkah ini tidak menentukan jalur
/persistent_volume sebagai volume persisten, langkah pertama akan menulis
file di jalur tersebut, lalu file tersebut akan dihapus sebelum langkah kedua
dieksekusi. Dengan menentukan volume dengan nama yang sama di kedua langkah, konten /persistent_volume di langkah pertama akan dipertahankan ke langkah kedua.
YAML
steps:
- name: 'ubuntu'
volumes:
- name: 'vol1'
path: '/persistent_volume'
entrypoint: 'bash'
args:
- '-c'
- |
echo "Hello, world!" > /persistent_volume/file
- name: 'ubuntu'
volumes:
- name: 'vol1'
path: '/persistent_volume'
args: ['cat', '/persistent_volume/file']
JSON
{
"steps": [
{
"name": "ubuntu",
"volumes": [
{
"name": "vol1",
"path": "/persistent_volume"
}
],
"entrypoint": "bash",
"args": [
"-c",
"echo \"Hello, world!\" > /persistent_volume/file\n"
]
},
{
"name": "ubuntu",
"volumes": [
{
"name": "vol1",
"path": "/persistent_volume"
}
],
"args": [
"cat",
"/persistent_volume/file"
]
}
]
}
allowFailure
Dalam langkah build, jika Anda menetapkan nilai kolom allowFailure ke true, dan langkah build gagal, maka build akan berhasil selama semua langkah build lainnya dalam build tersebut berhasil.
Jika semua langkah build dalam build memiliki allowFailure yang ditetapkan ke true dan semua langkah build gagal, status build tetap Successful.
allowExitCodes lebih diprioritaskan daripada kolom ini.
Cuplikan kode berikut memungkinkan build berhasil saat langkah pertama gagal:
YAML
steps:
- name: 'ubuntu'
args: ['-c', 'exit 1']
allowFailure: true
steps:
- name: 'ubuntu'
args: ['echo', 'Hello World']
JSON
{
"steps": [
{
"name": "ubuntu",
"args": [
"-c",
"exit -1"
],
"allowFailure": true,
},
{
"name": "ubuntu",
"args": [
"echo",
"Hello World"
]
}
]
}
allowExitCodes
Gunakan kolom allowExitCodes untuk menentukan bahwa kegagalan langkah build dapat diabaikan saat langkah tersebut menampilkan kode keluar tertentu.
Jika langkah build gagal dengan kode keluar yang cocok dengan nilai yang telah Anda berikan di allowExitCodes, Cloud Build akan mengizinkan langkah build ini gagal tanpa membuat seluruh build Anda gagal.
Jika 100% langkah build gagal, tetapi setiap langkah keluar dengan kode yang telah Anda tentukan di kolom allowExitCodes, build tetap berhasil.
Namun, jika langkah build gagal, dan menghasilkan kode keluar lain -- yang tidak cocok dengan nilai yang telah Anda tentukan di allowExitCodes -- maka build secara keseluruhan akan gagal.
Kode keluar yang relevan dengan build Anda bergantung pada software Anda. Misalnya, "1" adalah kode keluar umum di Linux. Anda juga dapat menentukan kode keluar sendiri dalam skrip. Kolom allowExitCodes menerima angka hingga maksimum 255.
Kolom ini lebih diprioritaskan daripada allowFailure.
Cuplikan kode berikut memungkinkan build berhasil jika langkah pertama gagal dengan salah satu kode keluar yang diberikan:
YAML
steps:
- name: 'ubuntu'
args: ['-c', 'exit 1']
allowExitCodes: [1]
steps:
- name: 'ubuntu'
args: ['echo', 'Hello World']
JSON
{
"steps": [
{
"name": "ubuntu",
"args": [
"-c",
"exit 1"
],
"allowExitCodes": [1],
},
{
"name": "ubuntu",
"args": [
"echo",
"Hello World"
]
}
]
}
timeout
Gunakan kolom timeout untuk build guna menetapkan batas waktu untuk mengeksekusi build.
Jika waktu ini berlalu, pekerjaan pada build akan berhenti dan
status build menjadi
TIMEOUT.
Jika timeout tidak disetel, build akan menggunakan timeout default 60 menit. Nilai
maksimum untuk timeout adalah 24 jam. timeout ditentukan dalam detik,
menggunakan
format
Durasi, dengan maksimal sembilan digit pecahan, yang diakhiri dengan s (misalnya:
3.5s).
Dalam cuplikan berikut, timeout ditetapkan ke 660 detik untuk menghindari waktu tunggu build habis karena perangkat tidur:
YAML
steps:
- name: 'ubuntu'
args: ['sleep', '600']
timeout: 660s
JSON
{
"steps": [
{
"name": "ubuntu",
"args": [
"sleep",
"600"
]
}
],
"timeout": "660s"
}
queueTtl
Gunakan kolom queueTtl untuk menentukan jangka waktu build dapat diantrekan. Jika
build berada dalam antrean lebih lama dari nilai yang ditetapkan di queueTtl, build akan
berakhir dan status
build ditetapkan ke
EXPIRED. Jika tidak ada nilai yang diberikan, Cloud Build akan menggunakan nilai default
3600s (1 jam). queueTtl mulai berdetak dari createTime. queueTtl harus
ditentukan dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's',
misalnya, 3.5s.
Dalam cuplikan berikut, timeout disetel ke 20s dan queueTtl disetel ke 10s.
queueTtl mulai berdetak pada createTime, yaitu waktu saat build
diminta, dan timeout mulai berdetak pada startTime, yaitu waktu saat
build dimulai. Oleh karena itu, queueTtl akan berakhir pada createTime + 10s kecuali jika build dimulai sebelum waktu tersebut.
YAML
steps:
- name: 'ubuntu'
args: ['sleep', '5']
timeout: 20s
queueTtl: 10s
JSON
{
"steps": [
{
"name": "ubuntu",
"args": [
"sleep",
"5"
]
}
],
"timeout": "20s",
"queueTtl": "10s"
}
logsBucket
Tetapkan kolom logsBucket untuk build guna menentukan bucket Cloud Storage
tempat log harus ditulis. Jika Anda tidak menetapkan kolom ini, Cloud Build akan menggunakan bucket default untuk menyimpan log build Anda.
Cuplikan berikut menetapkan bucket log untuk menyimpan log build:
YAML
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['install', '.']
logsBucket: 'gs://mybucket'
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/go",
"args": [
"install",
"."
]
}
],
"logsBucket": "gs://mybucket"
}
options
Gunakan kolom options
untuk menentukan argumen opsional berikut untuk build Anda:
enableStructuredLogging:
Mengaktifkan pemetaan kolom log build yang ditentukan
ke kolom LogEntry
saat log build dikirim ke Logging.
Misalnya, jika log build Anda berisi message, maka pesan akan muncul
di textPayload atau jsonPayload.message dalam entri log
yang dihasilkan. Kolom log build yang tidak dapat dipetakan akan muncul di entri log
jsonPayload. Untuk mengetahui informasi selengkapnya, lihat
Memetakan kolom log build ke kolom entri log.
env:
Daftar definisi variabel lingkungan global yang akan ada untuk semua langkah
build dalam build ini. Jika variabel ditentukan secara global dan dalam langkah build, variabel akan menggunakan nilai langkah build. Elemennya berbentuk
KEY=VALUE untuk variabel lingkungan KEY yang diberi nilai VALUE.
secretEnv:
Daftar variabel lingkungan global, dienkripsi menggunakan kunci kripto Cloud Key Management Service, yang akan tersedia untuk semua langkah build dalam build ini.
Nilai ini harus ditentukan dalam Secret build.
volumes:
Daftar volume yang akan dipasang secara global untuk SEMUA langkah build. Setiap volume dibuat
sebagai volume kosong sebelum memulai proses build. Setelah build selesai, volume dan isinya akan dihapus. Nama dan jalur volume global tidak boleh bertentangan dengan volume yang ditentukan dalam langkah build. Penggunaan volume global dalam build dengan hanya satu langkah tidak valid karena menandakan permintaan build dengan konfigurasi yang salah.
pubsubTopic:
Opsi untuk
memberikan nama topik Pub/Sub
untuk menerima notifikasi
status build. Jika Anda tidak memberikan nama, Cloud Build akan menggunakan
nama topik default cloud-builds. Cuplikan berikut menentukan
bahwa nama topik Pub/Sub adalah my-topic:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
options:
pubsubTopic: 'projects/my-project/topics/my-topic'
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/myproject/myimage",
"."
]
}
],
"options": {
"pubsubTopic": "projects/my-project/topics/my-topic"
}
}
sourceProvenanceHash:
Setel opsi sourceProvenanceHash untuk menentukan algoritma hash bagi provenans
sumber. Cuplikan berikut menentukan bahwa algoritma hash adalah
SHA256:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
options:
sourceProvenanceHash: ['SHA256']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/myproject/myimage",
"."
]
}
],
"options": {
"sourceProvenanceHash": ["SHA256"]
}
}
machineType:
Cloud Build menyediakan empat jenis mesin virtual dengan CPU tinggi untuk menjalankan build Anda: dua jenis mesin dengan 8 CPU dan dua jenis mesin dengan 32 CPU. Cloud Build juga menyediakan dua jenis virtual machine tambahan dengan 1 CPU dan 2 CPU untuk menjalankan build Anda. Jenis mesin default adalah e2-standard-2 dengan 2 CPU.
Meminta virtual machine dengan CPU tinggi dapat meningkatkan waktu startup build Anda. Tambahkan opsi machineType untuk meminta virtual machine dengan CPU yang lebih tinggi:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
options:
machineType: 'E2_HIGHCPU_8'
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/myproject/myimage",
"."
]
},
],
"options": {
"machineType": "E2_HIGHCPU_8"
}
}
Untuk mengetahui informasi selengkapnya tentang penggunaan opsi machineType, lihat Mempercepat build.
diskSizeGb:
Gunakan opsi diskSizeGb untuk meminta ukuran disk kustom untuk build Anda. Ukuran
maksimum yang dapat Anda minta adalah 4000 GB.
Cuplikan berikut meminta ukuran disk 200 GB:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
options:
diskSizeGb: '200'
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/myproject/myimage",
"."
]
}
],
"options": {
"diskSizeGb": '200'
}
}
logStreamingOption:
Gunakan opsi ini untuk menentukan apakah Anda ingin melakukan streaming log build ke Cloud Storage. Secara default, Cloud Build mengumpulkan log build setelah build selesai; opsi ini menentukan apakah Anda ingin melakukan streaming log build secara real time selama proses build. Cuplikan berikut menentukan bahwa log build
di-streaming ke Cloud Storage:
YAML
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['install', '.']
options:
logStreamingOption: STREAM_ON
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/go",
"args": [
"install",
"."
]
}
],
"options": {
"logStreamingOption": "STREAM_ON"
}
}
logging:
Gunakan opsi ini untuk menentukan apakah Anda ingin menyimpan log di Cloud Logging
atau Cloud Storage. Jika Anda tidak menyetel opsi ini, Cloud Build akan menyimpan log di Cloud Logging dan Cloud Storage. Anda dapat
menetapkan opsi logging ke GCS_ONLY untuk menyimpan log hanya di
Cloud Storage. Cuplikan berikut menentukan bahwa log disimpan di
Cloud Storage:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
options:
logging: GCS_ONLY
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/myproject/myimage",
"."
]
}
],
"options": {
"logging": "GCS_ONLY"
}
}
defaultLogsBucketBehavior:
Opsi defaultLogsBucketBehavior memungkinkan Anda mengonfigurasi Cloud Build untuk membuat bucket log default dalam project Anda sendiri di region yang sama dengan build Anda. Untuk mengetahui informasi selengkapnya, lihat Menyimpan log build di bucket regional yang dimiliki pengguna.
Konfigurasi build berikut menetapkan kolom defaultLogsBucketBehavior ke nilai REGIONAL_USER_OWNED_BUCKET:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/myproject/myrepo/myimage', '.' ]
options:
defaultLogsBucketBehavior: REGIONAL_USER_OWNED_BUCKET
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"us-central1-docker.pkg.dev/myproject/myrepo/myimage",
"."
]
}
],
"options": {
"defaultLogsBucketBehavior": "REGIONAL_USER_OWNED_BUCKET"
}
}
dynamicSubstitutions:
Gunakan opsi ini untuk mengaktifkan atau menonaktifkan
ekspansi parameter bash
secara eksplisit dalam substitusi. Jika build Anda dipanggil oleh pemicu, kolom
dynamicSubstitutions akan selalu disetel ke benar (true) dan tidak perlu
ditentukan dalam file konfigurasi build Anda. Jika build dipanggil secara manual, Anda harus
menetapkan kolom dynamicSubstitutions ke benar (true) agar ekspansi parameter bash
dapat ditafsirkan saat menjalankan build.
automapSubstitutions:
Memetakan semua penggantian ke variabel lingkungan secara otomatis yang akan
tersedia di seluruh build. Untuk contoh, lihat
Mengganti nilai variabel.
substitutionOption:
Anda akan menyetel opsi ini bersama dengan kolom substitutions di bawah untuk menentukan
perilaku saat terjadi error dalam pemeriksaan
penggantian.
pool:
Tetapkan nilai kolom ini ke nama resource kumpulan pribadi untuk menjalankan
build. Untuk mengetahui petunjuk tentang cara menjalankan build di pool pribadi, lihat
Menjalankan build di pool pribadi.
requestedVerifyOption:
Tetapkan nilai requestedVerifyOption ke VERIFIED untuk mengaktifkan dan memverifikasi
pembuatan
pengesahan dan
metadata asal untuk
build Anda. Setelah ditetapkan, build Anda hanya akan ditandai SUCCESS
jika pengesahan dan asal-usul dibuat.
substitutions
Gunakan substitusi di file konfigurasi build untuk mengganti variabel tertentu pada
waktu build. Substitusi berguna untuk variabel yang nilainya tidak diketahui hingga waktu build, atau untuk menggunakan kembali permintaan build yang sudah ada dengan nilai variabel yang berbeda. Secara default, build akan menampilkan error jika ada variabel penggantian yang tidak ada atau penggantian yang tidak ada. Namun, Anda dapat menggunakan opsi ALLOW_LOOSE untuk melewati pemeriksaan ini.
Cuplikan berikut menggunakan penggantian untuk mencetak "hello world". Opsi penggantian
ALLOW_LOOSE ditetapkan, yang berarti build tidak akan menampilkan
error jika ada variabel penggantian yang tidak ada atau penggantian yang tidak ada.
YAML
steps:
- name: 'ubuntu'
args: ['echo', 'hello ${_SUB_VALUE}']
substitutions:
_SUB_VALUE: world
options:
substitution_option: 'ALLOW_LOOSE'
JSON
{
"steps": [
{
"name": "ubuntu",
"args": [
"echo",
"hello ${_SUB_VALUE}"
]
}
],
"substitutions": {
"_SUB_VALUE": "world"
},
"options": {
"substitution_option": "ALLOW_LOOSE"
}
}
Untuk petunjuk tambahan tentang penggunaan substitutions, lihat Mengganti nilai variabel.
tags
Gunakan kolom tags untuk mengatur build ke dalam grup dan memfilter build. Konfigurasi berikut menetapkan dua tag bernama mytag1 dan mytag2:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
...
- name: 'ubuntu'
...
tags: ['mytag1', 'mytag2']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker"
},
{
"name": "ubuntu"
}
],
"tags": [
"mytag1",
"mytag2"
]
}
availableSecrets
Gunakan kolom ini untuk menggunakan secret dari Secret Manager dengan Cloud Build. Untuk mengetahui informasi selengkapnya, lihat Menggunakan secret.
secrets
Secret memasangkan sekumpulan variabel lingkungan rahasia yang berisi nilai terenkripsi dengan kunci Cloud KMS yang akan digunakan untuk mendekripsi nilai.
serviceAccount
Gunakan kolom ini untuk menentukan akun layanan IAM yang akan digunakan pada waktu build. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi akun layanan yang ditentukan pengguna.
Anda tidak dapat menentukan akun layanan Cloud Build lama di kolom ini.
images
Kolom images dalam file konfigurasi build menentukan satu atau beberapa image Docker Linux yang akan di-push oleh Cloud Build ke Artifact Registry. Anda mungkin memiliki build yang melakukan tugas tanpa menghasilkan image Docker Linux, tetapi jika Anda membangun image dan tidak mengirimkannya ke registry, image akan dihapus setelah build selesai. Jika gambar yang ditentukan tidak dihasilkan selama build, build akan gagal. Untuk mengetahui informasi selengkapnya tentang cara menyimpan image, lihat
Menyimpan artefak di Artifact Registry.
Konfigurasi build berikut menetapkan kolom images untuk menyimpan image yang dibangun:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
images: ['gcr.io/myproject/myimage']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"-t",
"gcr.io/myproject/myimage",
"."
]
}
],
"images": [
"gcr.io/myproject/myimage"
]
}
artifacts
Kolom artifacts dalam file konfigurasi build menentukan satu atau beberapa
artefak non-container yang akan disimpan di Cloud Storage. Untuk mengetahui informasi selengkapnya tentang
menyimpan artefak non-kontainer, lihat Menyimpan artefak build di Cloud Storage.
Konfigurasi build berikut menetapkan kolom artifacts untuk menyimpan paket Go yang dibangun ke gs://mybucket/:
YAML
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['build', 'my-package']
artifacts:
objects:
location: 'gs://mybucket/'
paths: ['my-package']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/go",
"args": [
"build",
"my-package"
]
}
],
"artifacts": {
"objects": {
"location": "gs://mybucket/",
"paths": [
"my-package"
]
}
}
}
goModules
Kolom goModules memungkinkan Anda mengupload modul Go non-container ke repositori Go di Artifact Registry. Untuk mengetahui informasi selengkapnya, lihat
Membangun dan menguji aplikasi Go.
Kolom repository_location menentukan repositori Artifact Registry
untuk menyimpan paket Anda. Kolom module_path menentukan direktori lokal yang berisi modul Go yang akan diupload. Direktori ini harus berisi file
go.mod.
Sebaiknya gunakan jalur absolut untuk nilai module_path. Anda dapat menggunakan
. untuk merujuk ke direktori kerja saat ini, tetapi kolom tidak boleh dihilangkan
atau dibiarkan kosong. Untuk mengetahui petunjuk selengkapnya tentang cara menggunakan module_path, lihat
Membangun dan menguji aplikasi Go.
Konfigurasi build berikut menetapkan kolom goModules untuk mengupload
modul di example.com/myapp ke repositori Artifact Registry
quickstart-go-repo:
YAML
artifacts:
goModules:
- repositoryName: 'quickstart-go-repo'
repositoryLocation: 'us-central1'
repositoryProjectId: 'argo-local-myname'
sourcePath: '/workspace/myapp'
modulePath: 'example.com/myapp'
moduleVersion: 'v1.0.0'
JSON
{
"artifacts": {
"goModules": [
{
"repositoryName": "quickstart-go-repo",
"repositoryLocation": "us-central1",
"repositoryProjectId": "argo-local-myname",
"sourcePath": "/workspace/myapp",
"modulePath": "example.com/myapp",
"moduleVersion": "v1.0.0"
}
]
}
}
mavenArtifacts
Kolom mavenArtifacts memungkinkan Anda mengupload artefak Java non-container ke repositori Maven di Artifact Registry. Untuk mengetahui informasi selengkapnya, lihat
Membangun dan menguji aplikasi Java.
Konfigurasi build berikut menetapkan kolom mavenArtifacts untuk mengupload file yang dikemas my-app-1.0-SNAPSHOT.jar ke repositori Artifact Registry https://us-central1-maven.pkg.dev/my-project-id/my-java-repo:
YAML
artifacts:
mavenArtifacts:
- repository: 'https://us-central1-maven.pkg.dev/my-project-id/my-java-repo'
path: '/workspace/my-app/target/my-app-1.0-SNAPSHOT.jar'
artifactId: 'my-app-1'
groupId: 'com.mycompany.app'
version: '1.0.0'
JSON
{
"artifacts": {
"mavenArtifacts": [
{
"repository": "https://us-central1-maven.pkg.dev/my-project-id/my-java-repo",
"path": "/workspace/my-app/target/my-app-1.0-SNAPSHOT.jar",
"artifactId": "my-app-1",
"groupId": "com.mycompany.app",
"version": "1.0.0"
}
]
}
}
pythonPackages
Kolom pythonPackages memungkinkan Anda mengupload paket Python ke Artifact Registry.
Untuk mengetahui informasi selengkapnya, lihat
Membangun dan menguji aplikasi Python.
Konfigurasi build berikut menetapkan kolom pythonPackages untuk mengupload paket Python dist/my-pkg.whl ke repositori Artifact Registry https://us-east1-python.pkg.dev/my-project/my-repo:
YAML
artifacts:
pythonPackages:
- repository: 'https://us-east1-python.pkg.dev/my-project/my-repo'
paths: ['dist/my-pkg.whl']
JSON
{
"artifacts": {
"pythonPackages": [
{
"repository": "https://us-east1-python.pkg.dev/my-project/my-repo",
"paths": ["dist/my-pkg.whl"]
}
]
}
}
npmPackages
Gunakan kolom npmPackages untuk mengonfigurasi Cloud Build agar mengupload paket npm yang dibangun ke repositori yang didukung di Artifact Registry. Anda harus
memberikan nilai untuk repository dan packagePath.
Kolom repository menentukan repositori Artifact Registry untuk menyimpan paket Anda. Kolom packagePath menentukan direktori lokal yang berisi
paket npm yang akan diupload. Direktori ini harus berisi file package.json.
Sebaiknya gunakan jalur absolut untuk nilai packagePath. Anda dapat menggunakan
. untuk merujuk ke direktori kerja saat ini, tetapi kolom tidak boleh dihilangkan
atau dibiarkan kosong. Untuk mengetahui petunjuk selengkapnya tentang cara menggunakan npmPackages, lihat Membangun dan menguji aplikasi Node.js.
Konfigurasi build berikut menetapkan kolom npmPackages untuk mengupload paket npm di direktori /workspace/my-pkg ke repositori Artifact Registry https://us-east1-npm.pkg.dev/my-project/my-repo.
YAML
artifacts:
npmPackages:
- repository: 'https://us-east1-npm.pkg.dev/my-project/my-repo'
packagePath: '/workspace/my-pkg'
JSON
{
"artifacts": {
"npmPackages": [
{
"repository": "https://us-east1-npm.pkg.dev/my-project/my-repo",
"packagePath": "/workspace/my-pkg"
}
]
}
}
Menggunakan Dockerfile
Jika Anda menjalankan build Docker di Cloud Build menggunakan
gcloud CLI atau
pemicu build, Anda
dapat menggunakan Dockerfile
tanpa file konfigurasi build terpisah. Jika ingin melakukan penyesuaian lebih lanjut pada build Docker, Anda dapat memberikan file konfigurasi build selain Dockerfile. Untuk mengetahui petunjuk tentang cara membangun image Docker menggunakan
Dockerfile, lihat Panduan memulai: Membangun.
Jaringan Cloud Build
Saat menjalankan setiap langkah build, Cloud Build melampirkan container
langkah ke jaringan Docker lokal bernama cloudbuild. Jaringan cloudbuild
menghosting Kredensial Default Aplikasi
(ADC) yang dapat digunakan oleh layanan Google Cloud untuk menemukan kredensial Anda secara otomatis. Jika Anda menjalankan container Docker bertingkat dan ingin mengekspos
ADC ke container yang mendasarinya atau menggunakan gcloud dalam langkah docker,
gunakan flag --network dalam langkah build Docker Anda:
YAML
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '--network=cloudbuild', '.']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"build",
"--network=cloudbuild",
"."
]
}
]
}
Langkah berikutnya
- Pelajari cara membuat file konfigurasi build dasar untuk mengonfigurasi build untuk Cloud Build.
- Baca Memulai Build secara Manual untuk mengetahui petunjuk cara menjalankan build di Cloud Build.