Halaman ini memberikan praktik terbaik untuk mempercepat waktu build Cloud Build.
Membuat container yang lebih ramping
Saat Anda memasukkan aplikasi ke dalam container, file yang tidak diperlukan saat runtime, seperti dependensi waktu build dan file perantara, dapat disertakan secara tidak sengaja dalam image container. File yang tidak diperlukan ini dapat memperbesar ukuran image container serta menambah waktu dan biaya saat image berpindah antara registry image container dan runtime container.
Untuk membantu mengurangi ukuran image container, pisahkan build aplikasi, beserta alat yang digunakan untuk mem-build-nya, dari perakitan container runtime.
Untuk mengetahui informasi selengkapnya, lihat Membuat 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 milik Google, tempat lapisan tersebut tersedia untuk digunakan oleh build berikutnya. Untuk mengetahui informasi selengkapnya, lihat Menggunakan cache Kaniko.
Menggunakan image Docker yang di-cache
Cara termudah untuk meningkatkan kecepatan build image Docker Anda adalah dengan menentukan image cache yang dapat digunakan untuk build berikutnya. Anda dapat menentukan image yang di-cache dengan menambahkan argumen --cache-from
di 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 membangun ulang
semua lapisan dari lapisan yang diubah hingga akhir build. Oleh karena itu,
penggunaan --cache-from
tidak akan bermanfaat jika Anda mengubah lapisan dalam tahap
awal build Docker.
Sebaiknya selalu gunakan --cache-from
untuk build Anda, tetapi perhatikan peringatan berikut:
- Anda memerlukan image Docker yang telah dibangun sebelumnya untuk disimpan dalam cache.
- Anda hanya dapat menggunakan
--cache-from
untuk build Docker; Anda tidak dapat menggunakannya untuk builder yang membuat jenis artefak lainnya. - Image yang di-cache harus diambil dari registry, yang dapat menambah waktu yang diperlukan untuk mem-build.
Langkah-langkah berikut menjelaskan cara membangun menggunakan gambar yang di-cache sebelumnya:
YAML
Dalam konfigurasi build Anda, tambahkan petunjuk untuk:
- Ambil 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 membuat gambar untuk pertama kalinya, dandocker pull
tidak memiliki gambar yang sudah ada untuk diambil. Tambahkan argumen
--cache-from
agar dapat menggunakan image tersebut untuk proses 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 gambar Anda.
- Ambil 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
Dalam konfigurasi build Anda, tambahkan petunjuk untuk:
- Ambil 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 membuat gambar untuk pertama kalinya, dandocker pull
tidak memiliki gambar yang sudah ada untuk diambil. Tambahkan argumen
--cache-from
agar dapat menggunakan image tersebut untuk proses 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 gambar Anda.
- Ambil 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 cache direktori 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 kembali hasil baru ke bucket. Gunakan metode ini saat build membutuhkan waktu yang lama dan menghasilkan file dalam jumlah kecil yang tidak membutuhkan waktu untuk menyalin ke dan dari Google Cloud Storage.
Tidak seperti --cache-from
, yang hanya untuk build Docker, penyimpanan dalam cache Google Cloud Storage dapat digunakan untuk builder yang didukung oleh Cloud Build.
Gunakan langkah-langkah berikut untuk meng-cache direktori menggunakan Google Cloud Storage:
YAML
Di file konfigurasi build, tambahkan petunjuk untuk:
- Salin hasil build sebelumnya dari bucket Google Cloud Storage.
- Gunakan hasil untuk build saat ini.
Salin kembali hasil baru ke dalam 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
Di file konfigurasi build, tambahkan petunjuk untuk:
- Salin hasil build sebelumnya dari bucket Google Cloud Storage.
- Gunakan hasil untuk build saat ini.
Salin kembali hasil baru ke dalam 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 dibutuhkan
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 kode contoh untuk developer proyek
- Membuat kode scaffolding, biner, file
*.jar
, atau aset web kompilasi yang digunakan untuk pengembangan. - Dependensi pihak ketiga yang divendor untuk pengembangan lokal
Untuk menyiapkan file .gcloudignore
guna menangani kasus ini, buat file di
root project 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 secara tidak sengaja yang masih dalam pengembangan aktif.
Langkah selanjutnya
- Pelajari cara meningkatkan vCPU untuk build.