Archiviare i moduli Go in Artifact Registry

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

Prima di iniziare

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

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

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Artifact Registry API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Installa Go 1.15 o versioni successive.
  13. Installa il componente aggiuntivo package-go-module dell'interfaccia a riga di comando gcloud:
    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 posizione del repository in un progetto, i nomi dei repository devono essere univoci.
    • LOCATION indica una o più regioni località per il repository. Puoi omettere questo flag se imposti un valore predefinito. Per visualizzare un elenco delle località supportate, esegui il comandogcloud artifacts locations list.
    • DESCRIPTION è una descrizione facoltativa del repository. Non includere dati sensibili, poiché le descrizioni dei repository non sono criptate.
  2. Esegui il comando seguente 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 i valori di progetto, repository e posizione. Dopo aver configurato i valori predefiniti, I tag --project, --location e --repository non sono necessari.

Pacchettizzare e caricare un modulo Go

Il componente aggiuntivo gcloud CLI di package-go-module pacchettizza i tuoi moduli Go, consentendoti di eseguire la versione e il caricamento su Artifact Registry utilizzando il gcloud .

Crea un modulo Go

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

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

    mkdir foo
    
  2. Cambia directory nella 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 il riferimento a Go Modules.

  3. Crea un file foo.go nella directory foo con il seguente contenuto:

    
    package foo
    
    const HelloWorld = "Hello World!"
    

Pacchettizzazione e caricamento del modulo

Impacchetta e carica il modulo nel tuo 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 il tuo ID progetto Google Cloud.
  • REPOSITORY con il nome del repository in cui quando viene archiviato un pacchetto.
  • LOCATION con una o più regioni località del repository.
  • example.com/foo con il percorso del modulo. Consulta le Riferimento ai moduli Go per ulteriori informazioni.
  • 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 patch.
  • SOURCE_LOCATION con il percorso della directory root di Go in maggior dettaglio più avanti in questo modulo. Se ometti il flag --source, il valore predefinito è la directory corrente.

Il modulo viene caricato in Artifact Registry.

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

Elenco moduli

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

  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 valore predefinito progetto, repository e località i valori predefiniti siano 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 moduli

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

configura l'ambiente Go

  1. Indica a Go per scaricare i moduli da Artifact Registry, il programma pubblico Go per il modulo proxy e quindi l'origine in questo ordine:

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

    Sostituisci quanto segue:

    • LOCATION indica una o più regioni località del repository.
    • PROJECT è il tuo account Google Cloud ID progetto.
    • REPOSITORY è il nome del repository in cui quando viene archiviato un pacchetto.
  2. Per escludere il controllo del modulo utilizzando il database del checksum pubblico:

      export GONOSUMDB=MODULE_PATH_REGEX
    

    Sostituisci MODULE_PATH_REGEX con il percorso del modulo o con una regex se vuoi escludere più moduli.

    Per escludere il modulo example.com/foo dai controlli pubblici database di checksum, esegui questo comando:

      export GONOSUMDB=example.com/foo
    

    Se vuoi che tutti i moduli con percorsi dei moduli che iniziano con example.com siano esclusi dalla verifica mediante il database di checksum pubblico, esegui seguente comando:

      export GONOSUMDB=example.com/*
    

Autenticazione in Artifact Registry

Quando scarichi moduli Go pacchettizzati da utilizzare come dipendenze da Artifact Registry, il file binario Go utilizza le credenziali nel file netrc per autenticarsi in Artifact Registry. Per semplificare la procedura di autenticazione, puoi utilizzare lo strumento di assistenza per le credenziali Go per aggiornare i token nel file netrc per l'autenticazione in Artifact Registry.

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

Artifact Registry supporta i seguenti metodi di autenticazione.

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

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

Aggiungi l'utilità di supporto delle credenziali Go a GONOPROXY

Prima di utilizzare l'helper per le credenziali Go, devi aggiungerlo all'elenco GONOPROXY per forzare Go a scaricarlo direttamente da GitHub. Se sono presenti altri moduli Se vuoi scaricarli direttamente dall'origine, puoi aggiungerli separati da una virgola come mostrato nell'esempio seguente:

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

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

Per aggiungere l'assistente per le credenziali Go al tuo elenco GONOPROXY ed eseguirlo per configurare la tua credenziali:

  1. Aggiungi l'assistente per le credenziali Go a GONOPROXY

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. Esegui il comando seguente per aggiungere le credenziali di Artifact Registry al file netrc con lo strumento di pacchettizzazione del modulo Go:

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

    Dove LOCATION indica una o più regioni località del tuo repository. Per aggiungere più località, inseriscile sotto forma di elenco separato da virgole.

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

Utilizza il modulo come dipendenza

  1. Se utilizzi credenziali a vita breve per l'autenticazione in Artifact Registry, dovrai aggiornare il token OAuth eseguendo il seguente comando:

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

      mkdir bar
    
  3. Cambia directory nella 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 il riferimento ai moduli Go.

  4. Per richiedere la versione di foo archiviata in Artifact Registry, modifica il go.mod file 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 quanto segue 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 a barre:

      go run .
    

    L'output è simile al seguente:

      Hello World!
    

Esegui la pulizia

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

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzati in questa pagina, procedi nel seguente modo. Prima di rimuovere il repository, assicurati che tutti i moduli che vuoi conservare siano disponibili in un'altra posizione.

  1. Per eliminare il repository:

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

    Sostituisci quanto segue:

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

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

Passaggi successivi