Menyimpan artefak di Artifact Registry

Halaman ini menjelaskan cara mengonfigurasi Cloud Build untuk menyimpan artefak yang di-build 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 dalam project dengan 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:

  1. 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 pada waktu build.
    • $PROJECT_ID adalah penggantian default yang di-resolve Cloud Build dengan project ID Google Cloud 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.

  2. Jika Anda siap menjalankan build, tentukan nilai untuk penggantian yang ditentukan pengguna. Misalnya, perintah ini akan mengganti:

    • 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 untuk mengupload modul Go ke repositori Go.

Untuk mengonfigurasi build:

  1. 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_ID dan $TAG_NAME adalah substitusi default yang diganti oleh Cloud Build dengan yang berikut ini:

      • $PROJECT_ID diganti dengan project ID Google Cloud 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.

      • $TAG_NAME diganti dengan nama tag Anda untuk mendukungkonvensi Go menggunakan tag Git sebagai nomor versi.

  2. 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 menjadi go build untuk mengompilasi modul, go test untuk menjalankan pengujian, atau go mod tidy untuk mendownload dependensi.

    Untuk langkah perintah go, GOPROXY ditetapkan 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. Jika Anda siap menjalankan build, tentukan nilai untuk penggantian yang ditentukan pengguna. Misalnya, perintah ini akan mengganti:

    • 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 untuk mengupload paket Java ke repositori Maven.

Untuk mengonfigurasi build:

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

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

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    
  3. 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:

  1. Tambahkan repositori Artifact Registry ke file .npmrc dalam project Node.js Anda. File tersebut terletak di direktori dengan 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 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 repositori.
    • REPOSITORY adalah nama repositori.
  2. Tambahkan skrip ke file package.json dalam project Anda yang memuat ulang token akses untuk autentikasi dengan repositori.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  1. 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:

  1. Di direktori dengan file konfigurasi build Cloud Build, 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 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 keyring Artifact Registry. Langkah kedua mengupload file Python yang telah di-build di subdirektori dist. Sesuaikan jalur ke requirements.txt dan 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_ID adalah penggantian default yang di-resolve Cloud Build dengan project ID Google Cloud 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.

  3. 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.

  4. Jika Anda siap menjalankan build, tentukan nilai untuk penggantian yang ditentukan pengguna. Misalnya, perintah ini akan mengganti:

    • 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