Archiviare gli elementi in Artifact Registry

Questa pagina descrive come configurare Cloud Build in modo da archiviare gli artefatti che crei in un repository Artifact Registry.

Prima di iniziare

  1. Se il repository di destinazione non esiste in Artifact Registry, crea un nuovo repository.
  2. Se Cloud Build e il tuo repository si trovano in progetti diversi o se utilizzi un account di servizio specificato dall'utente per eseguire le compilazioni, concedi il ruolo Artifact Registry Writer all'account di servizio di compilazione nel progetto con i repository.

    L'account di servizio Cloud Build predefinito ha accesso per eseguire le seguenti azioni con un repository nello stesso Google Cloud progetto:

Configura una build Docker

Dopo aver concesso le autorizzazioni al repository di destinazione, puoi configurare la build.

Per configurare la build:

  1. Nel file di configurazione della build, aggiungi il passaggio per creare e taggare l'immagine.

    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}'
    

    Questo snippet utilizza le sostituzioni di Cloud Build. Questo approccio è utile se vuoi utilizzare lo stesso file di configurazione della build per eseguire il push delle immagini nei repository per ambienti diversi, come test, gestione temporanea o produzione.

    • ${_LOCATION}, ${_REPOSITORY} e ${_IMAGE} sono sostituzione definita dall'utente per la posizione, il nome e l'immagine del repository. Specifica i valori per queste variabili al momento della compilazione.
    • $PROJECT_ID è una sostituzione predefinita che Cloud Build risolve con l' Google Cloud ID progetto per la compilazione.

      • Se esegui il comando gcloud builds submit, Cloud Build utilizza l'ID progetto attivo nella sessione gcloud.
      • Se utilizzi un trigger di compilazione, Cloud Build utilizza l'ID del progetto in cui è in esecuzione.

      In alternativa, puoi utilizzare una sostituzione definita dall'utente anziché $PROJECT_ID in modo da poter specificare un ID progetto in fase di compilazione.

  2. Quando è tutto pronto per eseguire la compilazione, specifica i valori per le sostituzione predefinite dall'utente. Ad esempio, questo comando sostituisce:

    • us-east1 per la posizione del repository
    • my-repo per il nome del repository
    • my-image per il nome dell'immagine
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
    

Configurare una build Go

Dopo aver concesso le autorizzazioni al repository di destinazione, puoi configurare la build. Le istruzioni riportate di seguito descrivono la configurazione della compilazione per caricare un modulo Go in un repository Go.

Per configurare la build:

  1. Per caricare un modulo Go nel repository Go nella build, aggiungi i seguenti passaggi al file di configurazione della 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'
    

    Il file di configurazione della build include le sostituzione di Cloud Build. Questo approccio è utile se vuoi utilizzare lo stesso file di configurazione di compilazione per caricare i pacchetti nei repository per ambienti diversi, ad esempio di test, di gestione temporanea o di produzione.

    • ${_LOCATION}, ${_REPOSITORY} e ${_MODULE_PATH} sono sostituzioni predefinite dall'utente per la posizione del repository, il nome del repository e il percorso del modulo. Specifichi i valori di queste variabili al momento della compilazione.
    • $PROJECT_ID e $TAG_NAME sono sostituzione predefinite che Cloud Build sostituisce con quanto segue:

      • $PROJECT_ID viene sostituito con l'ID progetto Google Cloud per la compilazione.

        • Se esegui il comando gcloud builds submit, Cloud Build utilizza l'ID progetto attivo nella sessione gcloud.
        • Se utilizzi un trigger di compilazione, Cloud Build utilizza l'ID del progetto in cui è in esecuzione.

        In alternativa, puoi utilizzare una sostituzione definita dall'utente anziché $PROJECT_ID in modo da poter specificare un ID progetto in fase di compilazione.

      • $TAG_NAME viene sostituito con il nome del tag per supportare la convenzione Go di utilizzare i tag Git come numeri di versione.

  2. Per installare il pacchetto dal repository Go, aggiungi i seguenti passaggi al file di configurazione di build per:

    • Aggiungi un endpoint Cloud Build regionale nella posizione del repository al file .netrc.
    • Esegui lo strumento di assistenza per le credenziali per aggiornare i token OAuth.
    • Esegui il comando go run. Puoi anche impostare il valore su go build per compilare il modulo, su go test per eseguire i test o su go mod tidy per scaricare le dipendenze.

    Per il passaggio del comando go, GOPROXY è impostato sul repository Cloud Build che ospita le dipendenze private. Puoi aggiungere il proxy pubblico all'elenco GOPROXY separato da virgole se il modulo ha dipendenze pubbliche.

    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. Quando è tutto pronto per eseguire la compilazione, specifica i valori per le sostituzione predefinite dall'utente. Ad esempio, questo comando sostituisce:

    • us-east1 per la posizione del repository
    • my-project per l'ID progetto
    • my-repo per il nome del repository
    • example.com/greetings per il percorso del modulo
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
    

Configurare una build Java

Dopo aver concesso le autorizzazioni al repository di destinazione, puoi configurare la build. Le istruzioni riportate di seguito descrivono la configurazione del processo di compilazione per caricare un pacchetto Java in un repository Maven.

Per configurare la build:

  1. Configura l'autenticazione per Maven. Assicurati di specificare il progetto e il repository di destinazione corretti nel file pom.xml.

  2. Nel file di configurazione di Cloud Build, aggiungi il passaggio per caricare il pacchetto con Maven:

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    
  3. Quando il file di configurazione della build è pronto, avvia la build con il seguente comando:

    gcloud builds submit
    

Configurare una compilazione Node.js

Dopo aver concesso le autorizzazioni al repository di destinazione, puoi configurare la build. Le istruzioni riportate di seguito descrivono la configurazione della compilazione per caricare un pacchetto Node.js in un repository npm.

Per configurare la build:

  1. Aggiungi il repository di Artifact Registry al file .npmrc nel progetto Node.js. Il file si trova nella directory con il file package.json.

    @SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY
    //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY/:always-auth=true
    
    • SCOPE-NAME è il nome dello scopo npm da associare al repository. L'utilizzo degli ambiti ti garantisce di pubblicare e installare sempre i pacchetti dal repository corretto.
    • PROJECT_ID è il tuo Google Cloud ID progetto.
    • LOCATION è la posizione regionale o multiregionale del repository.
    • REPOSITORY è il nome del repository.
  2. Aggiungi uno script al file package.json del progetto che aggiorna il token di accesso per l'autenticazione con il repository.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  1. Nel file di configurazione di compilazione, aggiungi il passaggio per caricare il pacchetto nel repository.

    steps:
    - name: gcr.io/cloud-builders/npm
      args: ['run', 'artifactregistry-login']
    - name: gcr.io/cloud-builders/npm
      args: ['publish', '${_PACKAGE}']
    

    ${_PACKAGE} è una sostituzioni Cloud Build che rappresenta la directory del progetto Node.js. Puoi specificare la directory quando esegui il comando per eseguire la compilazione.

    Ad esempio, questo comando carica il pacchetto da una directory denominata src:

    gcloud builds submit --config=cloudbuild.yaml \
        --substitutions=_PACKAGE="src" .
    

Configurare una compilazione Python

Dopo aver concesso le autorizzazioni al repository di destinazione, puoi configurare la build. Le istruzioni riportate di seguito descrivono la configurazione della compilazione per caricare un pacchetto Python in un repository Python e installarlo utilizzando pip.

Per compilare e conteinerizzare un'applicazione Python ed eseguirne il push in un repository Docker, consulta la sezione Creazione di applicazioni Python nella documentazione di Cloud Build.

Per configurare la build:

  1. Nella directory con il file di configurazione della build di Cloud Build, crea un file denominato requirements.txt con le seguenti dipendenze:

    twine
    keyrings.google-artifactregistry-auth
    
    • Twine è destinato al caricamento dei pacchetti in Artifact Registry.
    • keyrings.google-artifactregistry-auth è il backend della chiave privata di Artifact Registry che gestisce l'autenticazione con Artifact Registry per pip e Twine.
  2. Per caricare un pacchetto Python nel tuo repository Python nella build, aggiungi i seguenti passaggi al file di configurazione della 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/*'
    

    In questo snippet, il primo passaggio installa Twine e il backend del keyring di Artifact Registry. Il secondo passaggio carica i file Python compilati nella subdirectory dist. Modifica i percorsi a requirements.txt e ai file Python compilati se non corrispondono allo snippet.

    Il percorso del repository include le sostituzione di Cloud Build. Questo approccio è utile se vuoi utilizzare lo stesso file di configurazione di compilazione per caricare i pacchetti nei repository per ambienti diversi, ad esempio di test, di gestione temporanea o di produzione.

    • ${_LOCATION} e ${_REPOSITORY} sono sostituzioni definite dall'utente per la posizione del repository, il nome del repository e il nome del pacchetto. Specifica i valori di queste variabili in fase di compilazione.
    • $PROJECT_ID è una sostituzione predefinita che Cloud Build risolve con l' Google Cloud ID progetto per la compilazione.

      • Se esegui il comando gcloud builds submit, Cloud Build utilizza l'ID progetto attivo nella sessione gcloud.
      • Se utilizzi un trigger di compilazione, Cloud Build utilizza l'ID del progetto in cui è in esecuzione.

      In alternativa, puoi utilizzare una sostituzione definita dall'utente anziché $PROJECT_ID in modo da poter specificare un ID progetto in fase di compilazione.

  3. Per installare il pacchetto dal repository Python, aggiungi un passaggio al file di configurazione di compilazione che esegue il comando pip install.

      steps:
      - name: python
        entrypoint: pip
        args:
        - 'install'
        - '--index-url'
        - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/'
        - '${_PACKAGE}'
        - '--verbose'
    

    Questo snippet include un'ulteriore sostituzione ${_PACKAGE} per il nome del pacchetto.

  4. Quando è tutto pronto per eseguire la compilazione, specifica i valori per le sostituzione predefinite dall'utente. Ad esempio, questo comando sostituisce:

    • us-east1 per la posizione del repository
    • my-repo per il nome del repository
    • my-package per il nome del pacchetto
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .
    

Passaggi successivi