Memorizzare 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
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Installa Go 1.15 o versioni successive.
- Installa il componente aggiuntivo
package-go-module
gcloud CLI:
gcloud components install package-go-module
Crea un repository
Per creare e configurare un nuovo repository:
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 è la posizione 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.
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'
Impostare 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. Una volta configurati i valori predefiniti,
i tag --project
, --location
e --repository
non sono necessari.
Pacchettizzare e caricare un modulo Go
Il componente aggiuntivo package-go-module
gcloud CLI pacchettizza i tuoi moduli Go,
consentendoti di eseguire la versione e il caricamento su Artifact Registry utilizzando il comando gcloud
.
Creare un modulo Go
Per prima cosa, crea un semplice modulo Go da caricare nel tuo repository.
Nella tua home directory, crea una directory denominata "foo" per il modulo
mkdir foo
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.Crea un file
foo.go
nella directory foo con i seguenti contenuti:package foo const HelloWorld = "Hello World!"
Impacchetta e carica il 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 Google Cloud ID progetto.
- REPOSITORY con il nome del repository in cui è memorizzato il pacchetto.
- LOCATION con la posizione regionale o multiregionale del repository.
example.com/foo
con il percorso del modulo. Per ulteriori informazioni, consulta il riferimento a Go Modules.- VERSION con la
versione semantica
del modulo nel formato
vX.Y.Z
, doveX
è la versione principale,Y
è la versione secondaria eZ
è la versione patch. - SOURCE_LOCATION con il percorso della directory principale del modulo Go. 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.
Elenca moduli
Esegui il seguente comando per ispezionare il modulo Go caricato nel progetto, nel repository e nella posizione 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
Visualizzare i dettagli della versione del modulo
Esegui il seguente comando per visualizzare le versioni del modulo nel progetto, nel repository e nella posizione predefiniti quando sono configurati i valori predefiniti:
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
Scaricare i 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.
Configurare l'ambiente Go
Chiedi a Go di scaricare i moduli da Artifact Registry, il proxy del modulo Go pubblico e poi la sorgente in questo ordine:
export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
Sostituisci quanto segue:
- LOCATION è la posizione regionale o multiregionale del repository.
- PROJECT è il tuo Google Cloud ID progetto.
- REPOSITORY è il nome del repository in cui è memorizzato il pacchetto.
Escludere il modulo dal controllo 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 controllo del modulo
example.com/foo
utilizzando il database di checksum pubblico, esegui il seguente comando:export GONOSUMDB=example.com/foo
Se vuoi che tutti i moduli con percorsi che iniziano con
example.com
vengano esclusi dal controllo utilizzando il database di checksum pubblico, esegui il seguente comando:export GONOSUMDB=example.com/*
Esegui l'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 ad 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 UNIX-like 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 l'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 hai altri moduli che vuoi scaricare direttamente dal codice sorgente, 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 lo strumento di assistenza per le credenziali Go al tuo elenco GONOPROXY
ed eseguirlo per configurare le tue credenziali:
Aggiungi lo strumento di assistenza per le credenziali Go a
GONOPROXY
export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
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 è la località regionale o multiregionale del tuo repository. Per aggiungere più sedi, inseriscile sotto forma di elenco separato da virgole.
Lo strumento di assistenza per le credenziali Go aggiunge impostazioni al file netrc per l'autenticazione in Artifact Registry. Se passi il flag
--json_key
, la chiave viene aggiunta al tuo file netrc per l'autenticazione tramite password.
Utilizzare il modulo come dipendenza
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
Nella tua home directory, crea una directory denominata "bar"
mkdir bar
Cambia directory nella directory del modulo ed esegui
go mod init
per creare un filego.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 a Go Modules.Per richiedere la versione di foo archiviata in Artifact Registry, modifica il file
go.mod
in modo che assomigli 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 richiestov0.1.0
è la versione archiviata in Artifact Registry
Crea un file
main.go
nella directorybar
con i seguenti contenuti:package main import ( "fmt" foo "example.com/foo" ) func main() { fmt.Println(foo.HelloWorld) }
Esegui go mod tidy per scaricare le dipendenze, incluso il pacchetto foo:
go mod tidy
Esegui il modulo della barra:
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 su questa pagina, segui questi passaggi.
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate su questa pagina, segui questi passaggi. Prima di rimuovere il repository, assicurati che tutti i moduli che vuoi conservare siano disponibili in un'altra posizione.
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 il tuo Google Cloud ID progetto.
- REPOSITORY con il nome del repository.
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
- Scopri di più sulla configurazione dell'autenticazione.
- Scopri di più sulla gestione dei repository.
- Scopri di più sulla gestione dei moduli Go.
- Leggi le nostre risorse su DevOps ed esplora il programma di ricerca DevOps Research and Assessment.