Halaman ini memberikan praktik terbaik untuk mempercepat waktu build Cloud Build.
Membuat container yang lebih ramping
Saat Anda membuat penampung aplikasi, file yang tidak diperlukan saat runtime, seperti dependensi waktu build dan file perantara, dapat secara tidak sengaja disertakan dalam image penampung. File yang tidak diperlukan ini dapat meningkatkan ukuran image container dan menambahkan waktu dan biaya tambahan saat image berpindah di antara registry image container dan runtime container.
Untuk membantu mengurangi ukuran image container, pisahkan pembuatan aplikasi, beserta alat yang digunakan untuk mem-build-nya, dari assembly container runtime.
Untuk mengetahui informasi selengkapnya, lihat Mem-build container yang lebih ramping.
Menggunakan cache Kaniko
Cache kaniko adalah fitur Cloud Build yang meng-cache artefak build container dengan menyimpan dan mengindeks lapisan perantara dalam registry image container, seperti Container Registry Google sendiri, tempat artefak tersebut tersedia untuk digunakan oleh build berikutnya. Untuk informasi selengkapnya, lihat Menggunakan cache Kaniko.
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 mem-build menggunakan image tersebut sebagai sumber
cache.
Setiap image Docker terdiri dari lapisan yang ditumpuk. Penggunaan --cache-from
akan mem-build ulang
semua lapisan dari lapisan yang diubah hingga akhir build; oleh karena itu,
penggunaan --cache-from
tidak bermanfaat jika Anda mengubah lapisan pada tahap
awal build Docker.
Sebaiknya Anda selalu menggunakan --cache-from
untuk build, tetapi perhatikan
peringatan berikut:
- Anda memerlukan image Docker yang telah dibuat sebelumnya untuk membuat cache.
- Anda hanya dapat menggunakan
--cache-from
untuk build Docker; Anda tidak dapat menggunakannya untuk builder yang membuat jenis artefak lainnya. - Gambar yang di-cache harus diambil dari registry, yang dapat menambah waktu yang diperlukan untuk mem-build.
Langkah-langkah berikut menjelaskan cara mem-build menggunakan image yang di-cache sebelumnya:
YAML
Di konfigurasi build, tambahkan petunjuk untuk:
- Tarik image yang di-cache dari Container Registry. Perhatikan bahwa langkah build
docker pull
di bawah menetapkanentrypoint
kebash
, yang memungkinkan Anda menjalankan perintah dan mengabaikan error yang ditampilkan. Hal ini diperlukan saat Anda mem-build image untuk pertama kalinya, dandocker pull
tidak memiliki image yang ada untuk diambil. Tambahkan argumen
--cache-from
untuk menggunakan gambar tersebut untuk mem-build ulang.steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker pull gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest || exit 0'] - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest', '--cache-from', 'gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest', '.' ] images: ['gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest']
dengan [IMAGE_NAME] adalah nama image Anda.
- Tarik image yang di-cache dari Container Registry. Perhatikan bahwa langkah build
Build image Anda menggunakan konfigurasi build di atas:
gcloud builds submit --config cloudbuild.yaml .
JSON
Di konfigurasi build, tambahkan petunjuk untuk:
- Tarik image yang di-cache dari Container Registry. Perhatikan bahwa langkah build
docker pull
di bawah menetapkanentrypoint
kebash
, yang memungkinkan Anda menjalankan perintah dan mengabaikan error yang ditampilkan. Hal ini diperlukan saat Anda mem-build image untuk pertama kalinya, dandocker pull
tidak memiliki image yang ada untuk diambil. Tambahkan argumen
--cache-from
untuk menggunakan gambar tersebut untuk mem-build ulang.{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": ["-c", "docker pull gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest || exit 0"] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest", "--cache-from", "gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest", "." ] } ], "images": ["gcr.io/$PROJECT_ID/[IMAGE_NAME]:latest"] }
dengan [IMAGE_NAME] adalah nama image Anda.
- Tarik image yang di-cache dari Container Registry. Perhatikan bahwa langkah build
Build image Anda menggunakan konfigurasi build di atas:
gcloud builds submit --config cloudbuild.json .
Menyimpan direktori dalam cache dengan Google Cloud Storage
Untuk meningkatkan kecepatan build, gunakan kembali hasil dari build sebelumnya. Anda dapat menyalin hasil build sebelumnya ke bucket Google Cloud Storage, menggunakan hasilnya untuk penghitungan yang lebih cepat, lalu menyalin hasil baru kembali ke bucket. Gunakan metode ini jika build Anda memerlukan waktu lama dan menghasilkan sedikit file yang tidak memerlukan waktu untuk disalin ke dan dari Google Cloud Storage.
Tidak seperti --cache-from
, yang hanya untuk build Docker, cache Google Cloud Storage dapat digunakan untuk builder apa pun yang didukung oleh Cloud Build.
Gunakan langkah-langkah berikut untuk meng-cache direktori menggunakan Google Cloud Storage:
YAML
Dalam file konfigurasi build, tambahkan petunjuk untuk:
- Salin hasil build sebelumnya dari bucket Google Cloud Storage.
- Gunakan hasil untuk build saat ini.
Salin hasil baru kembali ke bucket.
steps: - name: gcr.io/cloud-builders/gsutil args: ['cp', 'gs://mybucket/results.zip', 'previous_results.zip'] # operations that use previous_results.zip and produce new_results.zip - name: gcr.io/cloud-builders/gsutil args: ['cp', 'new_results.zip', 'gs://mybucket/results.zip']
Build kode Anda menggunakan konfigurasi build di atas:
gcloud builds submit --config cloudbuild.yaml .
JSON
Dalam file konfigurasi build, tambahkan petunjuk untuk:
- Salin hasil build sebelumnya dari bucket Google Cloud Storage.
- Gunakan hasil untuk build saat ini.
Salin hasil baru kembali ke bucket.
{ "steps": [ { "name": "gcr.io/cloud-builders/gsutil", "args": ["cp", "gs://mybucket/results.zip", "previous_results.zip"] }, { // operations that use previous_results.zip and produce new_results.zip }, { "name": "gcr.io/cloud-builders/gsutil", "args": ["cp", "new_results.zip", "gs://mybucket/results.zip"] } ] }
Build kode Anda menggunakan konfigurasi build di atas:
gcloud builds submit --config cloudbuild.json .
Menghindari upload file yang tidak perlu
Saat build dipicu, direktori kode Anda akan 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 kode contoh untuk developer project
- Kode scaffolding yang dihasilkan, biner, file
*.jar
, atau aset web yang dikompilasi yang digunakan untuk pengembangan. - Dependensi pihak ketiga yang divendorkan untuk pengembangan lokal
Untuk menyiapkan file .gcloudignore
guna mengatasi 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 selanjutnya
- Pelajari cara meningkatkan vCPU untuk build.