Menyimpan artefak di Artifact Registry

Halaman ini menjelaskan cara mengonfigurasi Cloud Build untuk menyimpan artefak yang dibangun di repositori Artifact Registry.

Sebelum memulai

  1. Jika repositori target tidak ada di Artifact Registry, buat repositori baru.
  2. 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 di project yang memiliki repositori.

    Akun layanan Cloud Build default memiliki akses untuk melakukan tindakan berikut dengan repositori dalam project Google Cloud yang sama:

Mengonfigurasi build Docker

Setelah memberikan izin ke repositori target, Anda siap untuk mengonfigurasi build.

Untuk mengonfigurasi build Anda:

  1. Di file konfigurasi build, tambahkan langkah untuk membangun 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 mengirim image ke repositori untuk lingkungan yang berbeda, seperti pengujian, staging, atau produksi.

    • ${_LOCATION}, ${_REPOSITORY}, dan ${_IMAGE} adalah substitusi yang ditentukan pengguna untuk lokasi repositori, nama repositori, dan image. Anda menentukan nilai untuk variabel-variabel ini pada waktu build.
    • $PROJECT_ID adalah penggantian default yang diselesaikan oleh Cloud Build dengan project ID Google Cloud untuk build.

      • Jika Anda menjalankan perintah gcloud builds submit, Cloud Build akan menggunakan project ID aktif dalam sesi gcloud.
      • Jika Anda menggunakan pemicu build, Cloud Build akan menggunakan ID project tempat Cloud Build berjalan.

      Atau, Anda dapat menggunakan substitusi yang ditentukan pengguna, bukan $PROJECT_ID, sehingga Anda dapat menentukan project ID pada waktu build.

  2. Setelah siap menjalankan build, tentukan nilai untuk substitusi yang ditentukan pengguna. Misalnya, perintah ini menggantikan:

    • us-east1 untuk lokasi repositori
    • my-repo untuk nama repositori
    • my-image untuk 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 Anda untuk mengupload modul Go ke repositori Go.

Untuk mengonfigurasi build Anda:

  1. Untuk mengupload modul Go ke repositori Go di build Anda, tambahkan langkah-langkah berikut ke file konfigurasi build Anda:

    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 substitusi yang ditentukan pengguna untuk lokasi repositori, nama repositori, dan jalur modul. Anda menentukan nilai untuk variabel-variabel ini pada waktu build.
    • $PROJECT_ID dan $TAG_NAME adalah substitusi default yang diganti oleh Cloud Build dengan:

      • $PROJECT_ID diganti dengan project ID Google Cloud untuk build.

        • Jika Anda menjalankan perintah gcloud builds submit, Cloud Build akan menggunakan project ID aktif dalam sesi gcloud.
        • Jika Anda menggunakan pemicu build, Cloud Build akan menggunakan ID project tempat Cloud Build berjalan.

        Atau, Anda dapat menggunakan substitusi yang ditentukan pengguna, bukan $PROJECT_ID, sehingga Anda dapat menentukan project ID pada waktu build.

      • $TAG_NAME diganti dengan nama tag Anda untuk mendukung konvensi Go penggunaan tag Git sebagai nomor versi.

  2. Untuk menginstal paket dari repositori Go, tambahkan langkah-langkah berikut ke file konfigurasi build Anda ke:

    • Tambahkan endpoint Cloud Build regional di lokasi repositori Anda ke file .netrc.
    • Jalankan alat pembantu kredensial untuk memperbarui token OAuth.
    • Jalankan perintah go run. Anda juga dapat mengubahnya menjadi go build untuk mengompilasi modul, go test untuk menjalankan pengujian, atau go mod tidy untuk mendownload dependensi.

    Untuk langkah perintah go, GOPROXY disetel ke repositori Cloud Build yang menghosting dependensi pribadi. Anda dapat menambahkan proxy publik ke daftar GOPROXY yang 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}'
    
  3. Setelah siap menjalankan build, tentukan nilai untuk substitusi yang ditentukan pengguna. Misalnya, perintah ini menggantikan:

    • us-east1 untuk lokasi repositori
    • my-project untuk project ID
    • my-repo untuk nama repositori
    • example.com/greetings untuk 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 Anda untuk mengupload paket Java ke repositori Maven.

Untuk mengonfigurasi build Anda:

  1. Siapkan autentikasi untuk Maven. Pastikan Anda menentukan project target dan repositori yang benar di file pom.xml Anda.

  2. Di file konfigurasi build Cloud Build, tambahkan langkah untuk mengupload paket dengan Maven:

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    
  3. Setelah file konfigurasi build Anda sudah siap, mulai build Anda 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 Anda:

  1. Tambahkan repositori Artifact Registry ke file .npmrc di project Node.js Anda. File ini terletak di direktori yang berisi file package.json Anda.

    @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 akan memastikan bahwa Anda selalu memublikasikan dan menginstal paket dari repositori yang benar.
    • PROJECT_ID adalah ID project Google Cloud Anda.
    • LOCATION adalah lokasi regional atau multi-regional dari repositori.
    • REPOSITORY adalah nama repositori.
  2. Tambahkan skrip ke file package.json di project Anda yang memperbarui token akses untuk autentikasi dengan repositori.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  1. Di 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 substitusi 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 Anda untuk mengupload paket Python ke repositori Python dan menginstal paket menggunakan pip.

Untuk mem-build dan memasukkan aplikasi Python ke dalam container, lalu mendorongnya ke repositori Docker, lihat Membangun aplikasi Python dalam dokumentasi Cloud Build.

Untuk mengonfigurasi build Anda:

  1. Di direktori yang berisi file konfigurasi build Cloud Build Anda, buat file bernama requirements.txt dengan 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.
  2. Untuk mengupload paket Python ke repositori Python di build Anda, 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 akan menginstal backend keyring Twine dan Artifact Registry. Langkah kedua mengupload file Python yang telah Anda build di subdirektori dist. Sesuaikan jalur ke requirements.txt dan file Python yang Anda buat jika tidak cocok dengan cuplikan.

    Jalur repositori mencakup 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} dan ${_REPOSITORY} adalah substitusi yang ditentukan pengguna untuk lokasi repositori, nama repositori, dan nama paket. Anda menentukan nilai untuk variabel ini pada waktu build.
    • $PROJECT_ID adalah penggantian default yang diselesaikan oleh Cloud Build dengan project ID Google Cloud untuk build.

      • Jika Anda menjalankan perintah gcloud builds submit, Cloud Build akan menggunakan project ID aktif dalam sesi gcloud.
      • Jika Anda menggunakan pemicu build, Cloud Build akan menggunakan ID project tempat Cloud Build berjalan.

      Atau, Anda dapat menggunakan substitusi yang ditentukan pengguna, bukan $PROJECT_ID, sehingga Anda dapat menentukan project ID pada waktu build.

  3. Untuk menginstal paket dari repositori Python, tambahkan langkah ke file konfigurasi build Anda 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 mencakup substitusi ${_PACKAGE} tambahan untuk nama paket.

  4. Setelah siap menjalankan build, tentukan nilai untuk substitusi yang ditentukan pengguna. Misalnya, perintah ini menggantikan:

    • us-east1 untuk lokasi repositori
    • my-repo untuk nama repositori
    • my-package untuk nama paket
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .
    

Langkah selanjutnya