Halaman ini memberikan praktik terbaik untuk mempercepat waktu build Cloud Build.
Membuat container yang lebih ramping
Saat Anda membuat container aplikasi, file yang tidak diperlukan saat runtime, seperti dependensi waktu build dan file perantara, dapat secara tidak sengaja disertakan dalam image container. File yang tidak diperlukan ini dapat meningkatkan ukuran image container dan menambah waktu serta biaya tambahan saat image dipindahkan antara registry image container dan runtime container Anda.
Untuk membantu mengurangi ukuran image container, pisahkan pembangunan aplikasi, beserta alat yang digunakan untuk membangunnya, dari perakitan container runtime.
Untuk mengetahui informasi selengkapnya, lihat Membangun container yang lebih ramping.
Menggunakan image Docker yang di-cache
Cara termudah untuk meningkatkan kecepatan build image Docker adalah dengan
menentukan image yang di-cache yang dapat digunakan untuk build berikutnya. Anda dapat
menentukan image yang di-cache dengan menambahkan argumen --cache-from dalam file
konfigurasi build, yang akan menginstruksikan Docker untuk melakukan build menggunakan image tersebut sebagai sumber
cache.
Setiap image Docker terdiri dari lapisan bertumpuk. Menggunakan --cache-from akan membangun ulang
semua lapisan dari lapisan yang diubah hingga akhir build; oleh karena itu,
penggunaan --cache-from tidak bermanfaat jika Anda mengubah lapisan di tahap
awal build Docker.
Sebaiknya Anda selalu menggunakan --cache-from untuk build, tetapi perhatikan peringatan berikut:
- Anda memerlukan image Docker yang dibuat sebelumnya untuk di-cache.
- Anda hanya dapat menggunakan
--cache-fromuntuk build Docker; Anda tidak dapat menggunakannya untuk pembangun yang membuat jenis artefak lain. - Gambar yang di-cache harus diambil dari registry, yang dapat menambah waktu yang diperlukan untuk membangun.
Langkah-langkah berikut menjelaskan cara membangun menggunakan image yang di-cache sebelumnya:
YAML
Di konfigurasi build, tambahkan petunjuk untuk:
- Tarik image yang di-cache dari Artifact Registry. Langkah build
docker pullmenetapkanentrypointkebash, yang memungkinkan Anda menjalankan perintah dan mengabaikan error yang ditampilkan. Konfigurasi ini diperlukan saat Anda membuat image untuk pertama kalinya, dandocker pulltidak memiliki image yang ada untuk ditarik. Tambahkan argumen
--cache-fromuntuk menggunakan gambar tersebut saat membangun ulang.steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker pull ${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest || exit 0'] - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest', '--cache-from', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest' '.' ] images: ['${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest']
- Tarik image yang di-cache dari Artifact Registry. Langkah build
Bangun image Anda menggunakan konfigurasi build sebelumnya:
gcloud builds submit --config cloudbuild.yaml .
JSON
Di konfigurasi build, tambahkan petunjuk untuk:
- Tarik image yang di-cache dari Artifact Registry. Langkah build
docker pullmenetapkanentrypointkebash, yang memungkinkan Anda menjalankan perintah dan mengabaikan error yang ditampilkan. Konfigurasi ini diperlukan saat Anda membuat image untuk pertama kalinya, dandocker pulltidak memiliki image yang ada untuk ditarik. - Tambahkan argumen
--cache-fromuntuk menggunakan gambar tersebut saat membangun ulang.
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": ["-c", "docker pull ${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest || exit 0"] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest", "--cache-from", "${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest", "." ] } ], "images": ["${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}:latest"] }where [IMAGE] is the name of your image.- Tarik image yang di-cache dari Artifact Registry. Langkah build
Bangun image Anda menggunakan konfigurasi build sebelumnya:
gcloud builds submit --config cloudbuild.json .
Meng-cache direktori dengan Google Cloud Storage
Untuk meningkatkan kecepatan build, gunakan kembali hasil dari build sebelumnya. Anda dapat menyalin hasil build sebelumnya ke bucket Cloud Storage, menggunakan hasilnya untuk penghitungan yang lebih cepat, lalu menyalin kembali hasil baru ke bucket. Gunakan metode ini saat build Anda memerlukan waktu yang lama dan menghasilkan sejumlah kecil file yang tidak memerlukan waktu untuk disalin ke dan dari Cloud Storage
Tidak seperti --cache-from, yang hanya untuk build Docker, caching Cloud Storage dapat digunakan untuk builder apa pun yang didukung oleh Cloud Build.
Gunakan langkah-langkah berikut untuk menyimpan direktori dalam cache menggunakan Cloud Storage:
YAML
Dalam file konfigurasi build, tambahkan petunjuk untuk:
- Salin hasil build sebelumnya dari bucket Cloud Storage.
- Gunakan hasil untuk build saat ini.
Salin kembali hasil baru ke dalam bucket.
steps: - name: gcr.io/cloud-builders/gcloud args: ['storage', 'cp', 'gs://mybucket/results.zip', 'previous_results.zip'] # operations that use previous_results.zip and produce new_results.zip - name: gcr.io/cloud-builders/gcloud args: ['storage', 'cp', 'new_results.zip', 'gs://mybucket/results.zip']
Bangun kode Anda menggunakan konfigurasi build sebelumnya:
gcloud builds submit --config cloudbuild.yaml .
JSON
Dalam file konfigurasi build, tambahkan petunjuk untuk:
- Salin hasil build sebelumnya dari bucket Cloud Storage.
- Gunakan hasil untuk build saat ini.
Salin kembali hasil baru ke dalam bucket.
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "args": ["storage", "cp", "gs://mybucket/results.zip", "previous_results.zip"] }, { // operations that use previous_results.zip and produce new_results.zip }, { "name": "gcr.io/cloud-builders/gcloud", "args": ["storage", "cp", "new_results.zip", "gs://mybucket/results.zip"] } ] }
Bangun kode Anda menggunakan konfigurasi build sebelumnya:
gcloud builds submit --config cloudbuild.json .
Menghindari upload file yang tidak perlu
Saat build dipicu, direktori kode Anda diupload untuk digunakan oleh Cloud Build.
Anda dapat mengecualikan file yang tidak diperlukan oleh build dengan file
.gcloudignore
untuk mengoptimalkan waktu upload.
Contoh file yang biasanya dikecualikan meliputi:
- Dokumentasi dan contoh kode untuk developer project
- Kode scaffolding, biner, file
*.jar, atau aset web yang dikompilasi yang dihasilkan dan digunakan untuk pengembangan. - Dependensi pihak ketiga milik vendor untuk pengembangan lokal
Untuk menyiapkan file .gcloudignore guna menangani kasus ini, buat file di root project Anda dengan konten seperti:
.git
dist
node_modules
vendor
*.jar
Mengecualikan kode yang dikompilasi dan dependensi pihak ketiga juga menghasilkan proses build yang lebih konsisten dan mengurangi risiko deployment kode yang tidak disengaja yang masih dalam pengembangan aktif.
Langkah berikutnya
- Pelajari cara meningkatkan vCPU untuk build.