Archiviazione dei moduli Go in Artifact Registry

Configura un repository Go privato di Artifact Registry, carica un modulo al suo interno e utilizza il modulo come dipendenza.

Prima di iniziare

  1. Accedi al tuo Account Google.

    Se non ne hai già uno, registrati per un nuovo account.

  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Installa Google Cloud CLI.

  6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  7. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Installa Google Cloud CLI.

  12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  14. Installa Go1.15 o versioni successive.
  15. Installa il componente aggiuntivo package-go-module di gcloud CLI:
    gcloud components install package-go-module

Crea un repository

Per creare e configurare un nuovo repository:

  1. Esegui questo comando per creare un nuovo repository.

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=go \
        --location=LOCATION \
        --description=DESCRIPTION
    

    Sostituisci quanto segue:

    • REPOSITORY è il nome del repository. Per ogni località del repository in un progetto, i nomi dei repository devono essere univoci.
    • LOCATION è la località regionale o multiregionale del repository. Puoi omettere questo flag se imposti un valore predefinito. Per visualizzare un elenco delle località supportate, esegui il comando gcloud artifacts locations list.
    • DESCRIPTION è una descrizione facoltativa del repository. Non includere dati sensibili, poiché le descrizioni dei repository non sono criptate.
  2. Esegui questo comando per visualizzare i dettagli del repository.

      gcloud artifacts repositories describe --location=LOCATION REPOSITORY
    

    L'output è simile al seguente:

      Encryption: Google-managed key
      Repository Size: 0.000MB
      createTime: '2022-06-03T20:20:01.644813Z'
      format: GO
      mode: STANDARD_REPOSITORY
      name: projects/my-project/locations/us-west1/repositories/my-repo
      updateTime: '2022-06-03T20:20:01.644813Z'
    

Imposta i valori predefiniti per i comandi gcloud

Puoi semplificare i comandi gcloud CLI configurando i valori predefiniti per progetto, repository e località. Una volta configurati i valori predefiniti, i tag --project, --location e --repository non sono necessari.

Crea un pacchetto e carica un modulo Go

Il componente aggiuntivo package-go-module di gcloud CLI crea pacchetti dei moduli Go, consentendoti di versionarli e caricarli in Artifact Registry utilizzando il comando gcloud.

Crea un modulo Go

Per prima cosa, crea un semplice modulo Go da caricare nel repository.

  1. Nella directory home, crea una directory denominata "foo" per il modulo.

    mkdir foo
    
  2. Passa alla directory del modulo ed esegui go mod init per creare un file go.mod per il modulo.

      cd foo \
      go mod init example.com/foo
    

    Sostituisci example.com/foo con il percorso del modulo. Per ulteriori informazioni, consulta la documentazione di riferimento sui moduli Go.

  3. Crea un file foo.go nella directory foo con i seguenti contenuti:

    
    package foo
    
    const HelloWorld = "Hello World!"
    

Crea un pacchetto e carica il modulo

Crea un pacchetto e carica il modulo nel repository:

  gcloud artifacts go upload --project=PROJECT \
      --repository=REPOSITORY \
      --location=LOCATION \
      --module-path=example.com/foo \
      --version=VERSION \
      --source=SOURCE_LOCATION

Sostituisci quanto segue:

  • PROJECT con l' Google Cloud ID progetto.
  • REPOSITORY con il nome del repository in cui è archiviato il pacchetto.
  • LOCATION con la località regionale o multiregionale località del repository.
  • example.com/foo con il percorso del modulo. Per ulteriori informazioni, consulta la documentazione di riferimento sui moduli Go.
  • VERSION con la versione semantica del modulo nel formato vX.Y.Z, dove X è la versione principale, Y è la versione secondaria e Z è la versione della patch.
  • SOURCE_LOCATION con il percorso della directory principale del modulo Go. Se ometti il flag --source, il valore predefinito è la directory attuale.

Il modulo viene caricato in Artifact Registry.

Per ulteriori informazioni sulla creazione di moduli Go, consulta questo tutorial.

Elenca i moduli

Esegui questo comando per esaminare il modulo Go caricato nel progetto, nel repository e nella località predefiniti quando i valori predefiniti sono configurati:

  gcloud artifacts packages list

L'output è simile al seguente:

  Listing items under project my-project, location us-west1, repository my-repo.

  PACKAGE                   CREATE_TIME          UPDATE_TIME
  example.com/foo           2022-06-03T20:43:39  2022-06-20T20:37:40

Visualizza i dettagli della versione del modulo

Esegui questo comando per visualizzare le versioni del modulo nel progetto, nel repository e nella località predefiniti quando i valori predefiniti sono configurati:

  gcloud artifacts versions list --package=MODULE_PATH

L'output è simile al seguente:

  Listing items under project my-project, location us-west1, repository my-repo, package example.com/foo.

  VERSION  DESCRIPTION  CREATE_TIME          UPDATE_TIME
  v0.1.0                2022-06-03T20:43:39  2022-06-03T20:43:39
  v0.1.1                2022-06-20T20:37:40  2022-06-20T20:37:40

Scarica i moduli

Per importare i moduli archiviati in Artifact Registry, devi indicare a Go di cercare le dipendenze in Artifact Registry e di ignorare il database dei checksum.

Configura l'ambiente Go

  1. Indica a Go di scaricare i moduli da Artifact Registry, dal proxy pubblico dei moduli Go e poi dall'origine, in questo ordine:

      export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
    

    Sostituisci quanto segue:

    • LOCATION è la località regionale o multiregionale location del repository.
    • PROJECT è l'ID Google Cloud progetto.
    • REPOSITORY è il nome del repository in cui è archiviato il pacchetto.
  2. Escludi il modulo dal controllo utilizzando il database dei checksum pubblico:

      export GONOSUMDB=MODULE_PATH_REGEX
    

    Sostituisci MODULE_PATH_REGEX con il percorso del modulo o un'espressione regolare se vuoi escludere più moduli.

    Per escludere il modulo example.com/foo dal controllo utilizzando il database dei checksum pubblico, esegui questo comando:

      export GONOSUMDB=example.com/foo
    

    Se vuoi che tutti i moduli con percorsi di moduli che iniziano con example.com vengano esclusi dal controllo utilizzando il database dei checksum pubblico, esegui questo comando:

      export GONOSUMDB=example.com/*
    

Esegui l'autenticazione in Artifact Registry

Quando scarica i moduli Go in pacchetto da utilizzare come dipendenze da Artifact Registry, il file binario Go utilizza le credenziali nel file netrc per l'autenticazione in Artifact Registry. Per semplificare la procedura di autenticazione, puoi utilizzare l'helper delle credenziali Go per aggiornare i token nel file netrc per l'autenticazione in Artifact Registry.

La località del file netrc può essere impostata con la variabile di ambiente netrc. Se la variabile NETRC non è impostata, il comando go leggerà $HOME/.netrc sulle piattaforme di tipo UNIX o %USERPROFILE%\_netrc su Windows.

Artifact Registry supporta i seguenti metodi di autenticazione.

Credenziali di breve durata (opzione consigliata)
Utilizza lo strumento helper delle credenziali Go di Artifact Registry per aggiornare i token di autenticazione nel file netrc.
Utilizza una chiave dell'account di servizio

Utilizza questa opzione quando non puoi utilizzare le credenziali nel tuo ambiente per l'autenticazione. Aggiungi la chiave dell'account di servizio non criptata al file netrc.

Aggiungi l'helper delle credenziali Go a GONOPROXY

Prima di utilizzare l'helper delle credenziali Go, devi aggiungerlo all'elenco GONOPROXY per forzare Go a scaricarlo direttamente da GitHub. Se hai altri moduli che vuoi scaricare direttamente dall'origine, puoi aggiungerli in un elenco separato da virgole, come mostrato nell'esempio seguente:

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

Dove MODULE_PATH1 e MODULE_PATH2 sono i percorsi dei moduli da scaricare dall'origine.

Per aggiungere l'helper delle credenziali Go all'elenco GONOPROXY ed eseguirlo per configurare le credenziali:

  1. Aggiungi l'helper delle credenziali Go a GONOPROXY

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. Esegui questo comando per aggiungere le credenziali di Artifact Registry al file netrc con lo strumento per i pacchetti dei moduli Go:

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.4.0 \
          add-locations --locations=LOCATION \
          [--json_key=path/to/service/account/key.json]
    

    Dove LOCATION è la località regionale o multiregionale del repository. Per aggiungere più località, inseriscile come elenco separato da virgole.

    L'helper delle credenziali Go aggiunge le impostazioni al file netrc per l'autenticazione in Artifact Registry. Se passi il flag --json_key, la chiave viene aggiunta al file netrc per l'autenticazione con password.

Utilizza il modulo come dipendenza

  1. Se utilizzi credenziali di breve durata per l'autenticazione in Artifact Registry, dovrai aggiornare il token OAuth eseguendo questo comando:

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.4.0 refresh
    
  2. Nella directory home, crea una directory denominata "bar".

      mkdir bar
    
  3. Passa alla directory del modulo ed esegui go mod init per creare un file go.mod per il pacchetto.

      cd bar \
      go mod init example.com/bar
    

    Sostituisci example.com/bar con il percorso del modulo. Per ulteriori informazioni, consulta la documentazione di riferimento sui moduli Go.

  4. Per richiedere la versione di foo archiviata in Artifact Registry, modifica il file go.mod in modo che sia simile al seguente:

    
    module example.com/bar
    
    go 1.19
    
    require example.com/foo v0.1.0
    

    Sostituisci quanto segue:

    • example.com/foo è il percorso del modulo richiesto.
    • v0.1.0 è la versione archiviata in Artifact Registry.
  5. Crea un file main.go nella directory bar con i seguenti contenuti:

      
      package main
    
      import (
        "fmt"
    
        foo "example.com/foo"
      )
    
      func main() {
        fmt.Println(foo.HelloWorld)
      }
    
      
    
  6. Esegui go mod tidy per scaricare le dipendenze, incluso il pacchetto foo:

      go mod tidy
    
  7. Esegui il modulo bar:

      go run .
    

    L'output è simile al seguente:

      Hello World!
    

Libera spazio

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi. Prima di rimuovere il repository, assicurati che tutti i moduli che vuoi conservare siano disponibili in un'altra località.

  1. Per eliminare il repository:

      gcloud artifacts repositories delete \
          --location=LOCATION \
          --project=PROJECT \
          REPOSITORY
    

    Sostituisci quanto segue:

    • LOCATION con la località regionale o multiregionale località del repository.
    • PROJECT con l' Google Cloud ID progetto.
    • REPOSITORY con il nome del repository.
  2. Se vuoi rimuovere il repository predefinito e le impostazioni di località configurate per la configurazione gcloud attiva, esegui i comandi seguenti:

      gcloud config unset artifacts/repository
      gcloud config unset artifacts/location
    

Passaggi successivi