Halaman ini menjelaskan cara mengonfigurasi Cloud Build untuk menyimpan artefak yang di-build di repositori Artifact Registry.
Sebelum memulai
- Jika repositori target tidak ada di Artifact Registry, buat repositori baru.
Jika Cloud Build dan repositori Anda berada dalam project yang berbeda atau jika Anda menggunakan akun layanan yang ditentukan pengguna untuk menjalankan build, berikan peran Artifact Registry Writer ke akun layanan build dalam project dengan repositori.
Akun layanan Cloud Build default memiliki akses untuk melakukan tindakan berikut dengan repositori dalam project Google Cloud yang sama:
- Mengupload dan mendownload artefak
- Membuat repositori gcr.io di Artifact Registry
Mengonfigurasi build Docker
Setelah memberikan izin ke repositori target, Anda siap untuk mengonfigurasi build.
Untuk mengonfigurasi build:
Dalam file konfigurasi build, tambahkan langkah untuk mem-build dan memberi tag pada image.
steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ] images: - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'Cuplikan ini menggunakan substitusi Cloud Build. Pendekatan ini berguna jika Anda ingin menggunakan file konfigurasi build yang sama untuk mendorong image ke repositori untuk lingkungan yang berbeda, seperti pengujian, staging, atau produksi.
${_LOCATION},${_REPOSITORY}, dan${_IMAGE}adalah penggantian yang ditentukan pengguna untuk lokasi repositori, nama repositori, dan image. Anda menentukan nilai untuk variabel ini saat waktu build.$PROJECT_IDadalah penggantian default yang di-resolve Cloud Build dengan Google Cloud project ID untuk build.- Jika Anda menjalankan perintah
gcloud builds submit, Cloud Build akan menggunakan project ID yang aktif dalam sesi gcloud. - Jika Anda menggunakan pemicu build, Cloud Build akan menggunakan ID project tempat Cloud Build berjalan.
Atau, Anda dapat menggunakan penggantian yang ditentukan pengguna, bukan
$PROJECT_ID, sehingga Anda dapat menentukan project ID pada waktu build.- Jika Anda menjalankan perintah
Jika Anda siap menjalankan build, tentukan nilai untuk penggantian yang ditentukan pengguna. Misalnya, perintah ini akan mengganti:
us-east1untuk lokasi repositorimy-repountuk nama repositorimy-imageuntuk nama gambar
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
Mengonfigurasi build Go
Setelah memberikan izin ke repositori target, Anda siap untuk mengonfigurasi build. Petunjuk berikut menjelaskan cara mengonfigurasi build untuk mengupload modul Go ke repositori Go.
Untuk mengonfigurasi build:
Untuk mengupload modul Go ke repositori Go dalam build, tambahkan langkah-langkah berikut ke file konfigurasi build:
steps: - name: gcr.io/cloud-builders/gcloud args: - 'artifacts' - 'go' - 'upload' - '--project=$PROJECT_ID' - '--location=${_LOCATION}' - '--repository=${_REPOSITORY}' - '--module-path=${_MODULE_PATH}' - '--version=$TAG_NAME'File konfigurasi build menyertakan substitusi Cloud Build. Pendekatan ini berguna jika Anda ingin menggunakan file konfigurasi build yang sama untuk mengupload paket ke repositori untuk lingkungan yang berbeda, seperti pengujian, staging, atau produksi.
${_LOCATION},${_REPOSITORY}, dan${_MODULE_PATH}adalah penggantian yang ditentukan pengguna untuk lokasi repositori, nama repositori, dan jalur modul. Anda menentukan nilai untuk variabel ini pada waktu build.$PROJECT_IDdan$TAG_NAMEadalah substitusi default yang diganti oleh Cloud Build dengan yang berikut ini:$PROJECT_IDdiganti dengan Google Cloud project ID untuk build.- Jika Anda menjalankan perintah
gcloud builds submit, Cloud Build akan menggunakan project ID yang aktif dalam sesi gcloud. - Jika Anda menggunakan pemicu build, Cloud Build akan menggunakan ID project tempat Cloud Build berjalan.
Atau, Anda dapat menggunakan penggantian yang ditentukan pengguna, bukan
$PROJECT_ID, sehingga Anda dapat menentukan project ID pada waktu build.- Jika Anda menjalankan perintah
$TAG_NAMEdiganti dengan nama tag Anda untuk mendukungkonvensi Go menggunakan tag Git sebagai nomor versi.
Untuk menginstal paket dari repositori Go, tambahkan langkah-langkah berikut ke file konfigurasi build Anda untuk:
- Tambahkan endpoint Cloud Build regional di lokasi repositori Anda ke file
.netrc. - Jalankan alat helper kredensial untuk memuat ulang token OAuth.
- Jalankan perintah
go run. Anda juga dapat mengubahnya menjadigo builduntuk mengompilasi modul,go testuntuk menjalankan pengujian, ataugo mod tidyuntuk mendownload dependensi.
Untuk langkah perintah
go,GOPROXYditetapkan ke repositori Cloud Build yang menghosting dependensi pribadi. Anda dapat menambahkan proxy publik ke daftarGOPROXYyang dipisahkan koma jika modul memiliki dependensi publik.steps: - name: golang entrypoint: go args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'add-locations', '--locations=${_LOCATION}'] env: # Set GOPROXY to the public proxy to pull the credential helper tool - 'GOPROXY=https://proxy.golang.org' - name: golang entrypoint: go args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'refresh'] env: # Set GOPROXY to the public proxy to pull the credential helper tool - 'GOPROXY=https://proxy.golang.org' - name: golang entrypoint: go args: ['run', '.'] env: - 'GOPROXY=https://${_LOCATION}-go.pkg.dev/${_PROJECT_ID}/${_REPOSITORY}' options: env: # Disable GO sumdb checks for private modules. - 'GONOSUMDB=${_MODULE_PATH}'- Tambahkan endpoint Cloud Build regional di lokasi repositori Anda ke file
Jika Anda siap menjalankan build, tentukan nilai untuk penggantian yang ditentukan pengguna. Misalnya, perintah ini akan mengganti:
us-east1untuk lokasi repositorimy-projectuntuk project IDmy-repountuk nama repositoriexample.com/greetingsuntuk jalur modul
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
Mengonfigurasi build Java
Setelah memberikan izin ke repositori target, Anda siap untuk mengonfigurasi build. Petunjuk berikut menjelaskan cara mengonfigurasi build untuk mengupload paket Java ke repositori Maven.
Untuk mengonfigurasi build:
Siapkan autentikasi untuk Maven. Pastikan Anda menentukan project dan repositori target yang benar dalam file
pom.xml.Di file konfigurasi build Cloud Build, tambahkan langkah untuk mengupload paket dengan Maven:
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']Jika file konfigurasi build sudah siap, mulai build dengan perintah berikut:
gcloud builds submit
Mengonfigurasi build Node.js
Setelah memberikan izin ke repositori target, Anda siap untuk mengonfigurasi build. Petunjuk berikut menjelaskan cara mengonfigurasi build Anda untuk mengupload paket Node.js ke repositori npm.
Untuk mengonfigurasi build:
Tambahkan repositori Artifact Registry ke file
.npmrcdalam project Node.js Anda. File tersebut terletak di direktori dengan filepackage.jsonAnda.@SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY/:always-auth=true- SCOPE-NAME adalah nama cakupan npm yang akan dikaitkan dengan repositori. Menggunakan cakupan memastikan bahwa Anda selalu memublikasikan dan menginstal paket dari repositori yang benar.
- PROJECT_ID adalah Google Cloud project ID Anda.
- LOCATION adalah lokasi regional atau multi-regional repositori.
- REPOSITORY adalah nama repositori.
Tambahkan skrip ke file
package.jsondalam project Anda yang memuat ulang token akses untuk autentikasi dengan repositori."scripts": { "artifactregistry-login": "npx google-artifactregistry-auth" }Dalam file konfigurasi build, tambahkan langkah untuk mengupload paket ke repositori.
steps: - name: gcr.io/cloud-builders/npm args: ['run', 'artifactregistry-login'] - name: gcr.io/cloud-builders/npm args: ['publish', '${_PACKAGE}']${_PACKAGE}adalah penggantian Cloud Build yang mewakili direktori project Node.js Anda. Anda dapat menentukan direktori saat menjalankan perintah untuk menjalankan build.Misalnya, perintah ini mengupload paket dari direktori bernama
src:gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_PACKAGE="src" .
Mengonfigurasi build Python
Setelah memberikan izin ke repositori target, Anda siap untuk mengonfigurasi build. Petunjuk berikut menjelaskan cara mengonfigurasi build untuk mengupload paket Python ke repositori Python dan menginstal paket menggunakan pip.
Untuk mem-build dan menyimpan aplikasi Python dalam container, lalu mendorongnya ke repositori Docker, lihat Mem-build aplikasi Python dalam dokumentasi Cloud Build.
Untuk mengonfigurasi build:
Di direktori dengan file konfigurasi build Cloud Build, buat file bernama
requirements.txtdengan dependensi berikut:twine keyrings.google-artifactregistry-auth- Twine digunakan untuk mengupload paket ke Artifact Registry.
- keyrings.google-artifactregistry-auth adalah backend keyring Artifact Registry yang menangani autentikasi dengan Artifact Registry untuk pip dan Twine.
Untuk mengupload paket Python ke repositori Python dalam build, tambahkan langkah-langkah berikut ke file konfigurasi build:
steps: - name: python entrypoint: pip args: ["install", "-r", "requirements.txt", "--user"] - name: python entrypoint: python args: - '-m' - 'twine' - 'upload' - '--repository-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/' - 'dist/*'Dalam cuplikan ini, langkah pertama menginstal Twine dan backend ring kunci Artifact Registry. Langkah kedua mengupload file Python yang telah di-build di subdirektori
dist. Sesuaikan jalur kerequirements.txtdan file Python yang di-build jika tidak cocok dengan cuplikan.Jalur repositori menyertakan penggantian Cloud Build. Pendekatan ini berguna jika Anda ingin menggunakan file konfigurasi build yang sama untuk mengupload paket ke repositori untuk lingkungan yang berbeda, seperti pengujian, staging, atau produksi.
${_LOCATION}dan${_REPOSITORY}adalah penggantian yang ditentukan pengguna untuk lokasi repositori, nama repositori, dan nama paket. Anda menentukan nilai untuk variabel ini pada waktu build.$PROJECT_IDadalah penggantian default yang di-resolve Cloud Build dengan Google Cloud project ID untuk build.- Jika Anda menjalankan perintah
gcloud builds submit, Cloud Build akan menggunakan project ID yang aktif dalam sesi gcloud. - Jika Anda menggunakan pemicu build, Cloud Build akan menggunakan ID project tempat Cloud Build berjalan.
Atau, Anda dapat menggunakan penggantian yang ditentukan pengguna, bukan
$PROJECT_ID, sehingga Anda dapat menentukan project ID pada waktu build.- Jika Anda menjalankan perintah
Untuk menginstal paket dari repositori Python, tambahkan langkah ke file konfigurasi build yang menjalankan perintah
pip install.steps: - name: python entrypoint: pip args: - 'install' - '--index-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/' - '${_PACKAGE}' - '--verbose'Cuplikan ini menyertakan penggantian
${_PACKAGE}tambahan untuk nama paket.Jika Anda siap menjalankan build, tentukan nilai untuk penggantian yang ditentukan pengguna. Misalnya, perintah ini akan mengganti:
us-east1untuk lokasi repositorimy-repountuk nama repositorimy-packageuntuk nama paket
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .
Menyimpan artefak di registry pribadi menggunakan sertifikat yang ditandatangani sendiri
Jika memiliki certificate authority pribadi dan perlu menyimpan artefak di registry pribadi, Anda dapat menyiapkan file konfigurasi build untuk menggunakan sertifikat yang ditandatangani sendiri. Untuk melakukannya, tambahkan langkah build yang mendorong sertifikat Anda ke sistem host sehingga sertifikat tersedia untuk langkah build berikutnya. Contoh:
- name: gcr.io/cloud-builders/docker
args:
- run
- --rm
- --volume=/etc/docker/certs.d/:/etc/docker/certs.d/
- --volume=certificates:/certificates
- ubuntu
- bash
- -c
- |
cp /certificates/ca.crt /etc/docker/certs.d/quay.apps.cloud.inter
volumes:
- name: certificates
path: /certificates
Langkah berikutnya
- Pelajari cara men-deploy di Cloud Run.
- Pelajari cara men-deploy di Google Kubernetes Engine.