Devi eseguire l'autenticazione in Artifact Registry quando utilizzi un server per la connessione a un repository Artifact Registry. Questa documentazione è incentrata sulla configurazione di Maven e Gradle.
Non è necessario configurare l'autenticazione per Cloud Build o Google Cloud di ambienti di runtime come Google Kubernetes Engine e Cloud Run, verifica che le autorizzazioni richieste sono configurate. Per scoprire di più, consulta le informazioni su Cloud Build e sul deployment negli ambienti di runtime di Google Cloud.
Prima di iniziare
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- (Facoltativo) Configura i valori predefiniti per i comandi gcloud.
Se stai configurando l'autenticazione con un repository standard, verifica criterio di versione per permetterti di configurare Il progetto Maven è corretto per i tipi di pacchetti Java che puoi caricare.
Console
Apri la pagina Repository nella console Google Cloud.
Fai clic sul repository in cui vuoi eseguire l'autenticazione.
La sezione Dettagli mostra il criterio di versione. Se il repository ha un criterio di versione snapshot, il campo Consenti sovrascritture snapshot. indica se gli snapshot possono sovrascrivere le versioni degli snapshot corrispondenti nel repository Git.
gcloud
Esegui questo comando per visualizzare la descrizione di un repository.
gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT \ --location=LOCATION
Dove
- REPOSITORY è l'ID del repository. Se hai configurato Artifact Registry predefinito repository, viene utilizzato quando questo flag viene omesso dal comando.
- PROJECT è l'ID progetto. Se questo flag viene omesso, viene utilizzato il progetto corrente o predefinito.
- LOCATION indica una o più regioni location del repository.
L'output del comando include informazioni sulle norme relative alle versioni in
mavenConfig
. In questo esempio, il repository ha uno snapshot il criterio di versione e gli snapshot non possono sovrascrivere versioni identiche nel repository Git.Encryption: Google-managed key createTime: '2021-10-04T19:39:10.897404Z' format: MAVEN mavenConfig: allowSnapshotOverwrites: false versionPolicy: SNAPSHOT
Se un repository non ha un criterio di versione, il valore di
mavenConfig
è{}
.
Panoramica
Artifact Registry supporta i seguenti metodi di autenticazione.
- Utilizzare un helper di autenticazione
- Questa opzione offre la massima flessibilità. Se includi l'assistente nelle Maven o Gradle, Artifact Registry cerca e credenziali dell'account di servizio nell'ambiente.
- Specifica una chiave dell'account di servizio come credenziale
- Usa questa opzione quando un'applicazione non supporta il valore predefinito dell'applicazione Credenziali, ma supporta l'autenticazione con nome utente e password.
Le chiavi dell'account di servizio sono credenziali di lunga durata. Utilizza le seguenti linee guida per limitare l'accesso ai tuoi repository:
- Valuta la possibilità di utilizzare un account di servizio dedicato per interagire con i repository.
- Concedi il ruolo Artifact Registry minimo richiesto dall'account di servizio. Ad esempio, assegna Artifact Registry Lettore a un account di servizio che scarica solo gli artefatti.
- Se i gruppi della tua organizzazione richiedono livelli di accesso diversi a repository specifici, concedi l'accesso a livello di repository anziché a livello di progetto.
- Segui le best practice per la gestione delle credenziali.
Autenticazione con un assistente per le credenziali
Artifact Registry fornisce un carro Maven e un plug-in Gradle come assistente per le credenziali. Quando utilizzi l'helper per le credenziali, le credenziali non vengono memorizzate nel progetto Java. Artifact Registry cerca invece le credenziali nel seguente ordine:
Credenziali predefinite dell'applicazione (ADC), una strategia che cerca le credenziali nel seguente ordine:
Credenziali definite nella variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALS
.Le credenziali dell'account di servizio predefinito per Compute Engine, Funzioni di Google Kubernetes Engine, Cloud Run, App Engine o Cloud Run fornisce.
Le credenziali fornite da Google Cloud CLI, incluse le credenziali utente del comando
gcloud auth application-default login
.
La variabile GOOGLE_APPLICATION_CREDENTIALS
rende esplicito l'account per l'autenticazione, semplificando la risoluzione dei problemi. Se
non utilizzi la variabile, verifica che gli account che potrebbero essere utilizzati da ADC dispongano delle
autorizzazioni necessarie. Ad esempio,
account di servizio predefinito per VM di Compute Engine, nodi Google Kubernetes Engine
e le revisioni di Cloud Run hanno accesso di sola lettura ai repository. Se
vuoi caricare contenuti da questi ambienti usando l'account di servizio predefinito,
devi modificare le autorizzazioni.
Configura un account di servizio per un assistente per le credenziali
Creare un account di servizio e configurare l'autenticazione mediante l'ambiente variabile:
Creare un servizio di agire per conto della tua applicazione o di scegliere un servizio esistente l'account di servizio che usi per l'automazione.
Devi specificare la posizione del file della chiave dell'account di servizio da configurare l'autenticazione con Artifact Registry. Nel caso di account esistenti, puoi visualizzare le chiavi e crearne di nuove nella pagina Account di servizio.
Concedi il ruolo Artifact Registry specifico all'account di servizio per fornire l'accesso al repository.
Assegna alla variabile la posizione del file della chiave dell'account di servizio
GOOGLE_APPLICATION_CREDENTIALS
in modo che Artifact Registry l'assistente per le credenziali può ottenere la tua chiave quando ti connetti ai repository.export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
Dove KEY-FILE è il percorso dell'account di servizio file della chiave.
Configura Maven
Configura Maven per il tipo di repository che utilizzi.
Standard
Esegui questo comando per stampare la configurazione del repository al tuo progetto Java.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Dove
- PROJECT è l'ID progetto. Se questo flag viene omesso, viene utilizzato il progetto corrente o predefinito.
- REPOSITORY è l'ID del repository. Se hai configurato un Artifact Registry predefinito repository, viene utilizzato quando questo flag viene omesso dal comando.
- LOCATION è la posizione regionale o multiregionale del repository.
Aggiungi le impostazioni restituite alle sezioni appropriate in
pom.xml
per il tuo progetto Maven. Per maggiori dettagli sulla struttura del file, consulta la documentazione di riferimento di Maven.L'esempio seguente mostra le impostazioni per un repository che archivia sia le versioni di snapshot sia quelle di release.
<distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.3</version> </extension> </extensions> </build>
Gli elementi
<release>
e<snapshot>
indicano se gli elementi Nel repository sono archiviati pacchetti di release, pacchetti di snapshot o entrambi. Queste impostazioni devono corrispondere al repository criteri relativi alla versione.L'elemento
<build>
definisce il carrello Artifact Registry come un'estensione. Per informazioni sul wagon, consulta la documentazione relativa agli strumenti Maven di Artifact Registry.
Remoto o virtuale
Modifica il file
pom.xml
nel progetto. Consulta Maven Riferimento POM per informazioni dettagliate sulla struttura del file.L'esempio seguente mostra le impostazioni per un repository remoto che archivia sia le versioni di snapshot sia quelle di release. In questo esempio, il progetto ha una dipendenza da una versione del pacchetto Guava.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.google.hello</groupId> <artifactId>repo-config</artifactId> <version>4.1-SNAPSHOT</version> <description>version 1 release</description> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.0-jre</version> </dependency> </dependencies> <repositories> <repository> <id>central</id> <name>Maven Central remote repository</name> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT_ID/REMOTE-REPOSITORY-NAME</url> <layout>default</layout> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <build> <extensions> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.3</version> </extension> </extensions> </build> </project>
La sezione
<repositories>
definisce il repository Artifact Registry. Per un repository remoto, l'elemento<id>
deve essere impostato sucentral
. Questa impostazione sostituisce il valore predefinito per l'central
ID repository ereditato dal Super POM.La sezione
<build>
imposta il wagon Artifact Registry come un'estensione. Per informazioni sul wagon, consulta la documentazione degli strumenti Maven di Artifact Registry.In questo esempio, la sezione
<dependencies>
imposta una dipendenza Pacchetto Guava versione28.0-jre
.
Maven risolve alcune dipendenze prima di applicare un wagon definito in
pom.xml
, tra cui:- Riferimenti in un progetto Maven secondario a un progetto padre utilizzando
Elemento
<parent>
. - Dipendenze dei plug-in archiviate in Artifact Registry.
Se il tuo progetto deve risolvere queste dipendenze, devi utilizzare il meccanismo delle estensioni di base per assicurarti che Maven possa individuare i file POM e i plug-in principali.
Nel progetto, crea il file
${maven.projectBasedir}/.mvn/extensions.xml
con i seguenti contenuti. L'elemento<extension>
definisce il vagone.<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd"> <extension> <groupId>com.google.cloud.artifactregistry</groupId> <artifactId>artifactregistry-maven-wagon</artifactId> <version>2.2.3</version> </extension> </extensions>
Maven ora può risolvere le dipendenze dei plug-in o dei pacchetti principali da Artifact Registry.
- Riferimenti in un progetto Maven secondario a un progetto padre utilizzando
Elemento
La configurazione dell'autenticazione è stata completata.
Configura Gradle
Configura Gradle per il tipo di repository che utilizzi.
Standard
Esegui questo comando per stampare la configurazione del repository al tuo progetto Java.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Dove
- PROJECT è l'ID progetto. Se questo flag viene omesso, viene utilizzato il progetto corrente o predefinito.
- REPOSITORY è l'ID del repository. Se hai configurato un repository Artifact Registry predefinito, viene utilizzato quando questo flag viene omesso dal comando.
- LOCATION è la posizione regionale o multiregionale del repository.
Aggiungi le impostazioni del repository al file
build.gradle
. Le seguenti mostra la posizione relativa delle sezioni stampate.plugins { id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.3" } publishing { publications { mavenJava(MavenPublication) { groupId 'maven.example.id' from components.java } } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" } } } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" } }
La sezione
plugins
dichiara il plug-in Artifact Registry. Per informazioni sul plug-in, consulta la documentazione del Strumenti Maven di Artifact Registry.La sezione
publishing
definisce i file da caricare e la destinazione repository Artifact Registry. Quando è tutto pronto per il caricamento, puoi aggiornare l'elenco dei file nella sezionepublications
. Per informazioni sulle impostazioni di pubblicazione, consulta la documentazione del plug-in Maven Publish.
A distanza o virtuale
Aggiungi le impostazioni del repository al tuo file
build.gradle
.L'esempio seguente mostra le impostazioni per un repository remoto. In questo esempio, il progetto ha una dipendenza da una versione del pacchetto Guava.
plugins { id 'java' id "maven-publish" id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.3" id 'maven' } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev /PROJECT_ID/REMOTE-REPOSITORY-NAME" } } dependencies { compile "com.google.guava:guava:31.1-jre" }
La sezione
plugins
dichiara il plug-in Artifact Registry. Per informazioni sul plug-in, consulta la documentazione del Strumenti Maven di Artifact Registry.La sezione
repositories
definisce il ruolo di Artifact Registry repository Git.In questo esempio, la sezione
dependencies
imposta una dipendenza sulla versione31.1-jre
del pacchetto Guava.
Definisci le dipendenze per il pacchetto nella sezione
dependencies
.Se devi utilizzare i repository nel file
init.gradle
osettings.gradle
, puoi aggiungere la configurazione del plug-in a questi file.Per
init.gradle
, aggiungi la seguente configurazione:initscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.3" } } apply plugin: com.google.cloud.artifactregistry.gradle.plugin.ArtifactRegistryGradlePlugin
Per settings.gradle, aggiungi la seguente configurazione:
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.2.3" } } apply plugin: "com.google.cloud.artifactregistry.gradle-plugin"
La configurazione dell'autenticazione è stata completata.
Configurare l'autenticazione tramite password
Utilizza questo approccio quando la tua applicazione Java richiede l'autenticazione con un nome utente e una password specificati.
Configurare un account di servizio per l'autenticazione tramite password
Per creare un account di servizio:
Creare un servizio di agire per conto della tua applicazione o di scegliere un servizio esistente l'account di servizio che usi per l'automazione.
Devi specificare la posizione del file della chiave dell'account di servizio da configurare l'autenticazione con Artifact Registry. Per gli account esistenti, puoi visualizzare le chiavi e crearne di nuove nella pagina Account di servizio.
Se vuoi attivare l'account di servizio nell'attuale gcloud CLI sessione, esegui questo comando:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
Dove
- ACCOUNT è l'account utente o di servizio.
- KEY-FILE è il percorso del file JSON dell'account di servizio file della chiave.
Configura Maven
Configura Maven per il tipo di repository che utilizzi.
Standard
Esegui questo comando per stampare la configurazione del repository al tuo progetto Java.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
Dove
- PROJECT è l'ID progetto. Se questo flag viene omesso, attuale o progetto predefinito.
- REPOSITORY è l'ID del repository. Se hai configurato Artifact Registry predefinito repository, viene utilizzato quando questo flag viene omesso dal comando.
- LOCATION è la posizione regionale o multiregionale del repository.
- KEY-FILE è il percorso del file della chiave JSON dell'account di servizio.
Il comando restituisce le impostazioni da includere nel progetto Java, inclusa una versione con codifica Base64 della chiave privata.
- Aggiungi le impostazioni del repository restituite nell'elemento
<project>
alle sezioni appropriate del filepom.xml
per il tuo progetto Maven. Per maggiori dettagli sulla struttura del file, consulta il riferimento POM di Maven.
<project> <distributionManagement> <snapshotRepository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </snapshotRepository> <repository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> </repository> </distributionManagement> <repositories> <repository> <id>artifact-registry</id> <url>https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </project>
Gli elementi
<release>
e<snapshot>
indicano se il repository memorizza pacchetti di release, pacchetti di snapshot o entrambi. Queste impostazioni devono corrispondere alle norme relative alle versioni del repository.- Aggiungi le impostazioni di autenticazione restituite nell'elemento
<settings>
alla sezione<servers>
del file~/.m2/settings.xml
. Nella nell'esempio seguente:KEY
è la chiave con codifica Base64 dal file della chiave.
Per ulteriori informazioni, consulta la guida di riferimento alle impostazioni di Maven.
<settings> <servers> <server> <id>artifact-registry</id> <configuration> <httpConfiguration> <get> <usePreemptive>true</usePreemptive> </get> <head> <usePreemptive>true</usePreemptive> </head> <put> <params> <property> <name>http.protocol.expect-continue</name> <value>false</value> </property> </params> </put> </httpConfiguration> </configuration> <username>_json_key_base64</username> <password>KEY</password> </server> </servers> </settings>
Remoto o virtuale
Aggiungi le impostazioni del repository alle sezioni appropriate del
pom.xml
file per il tuo progetto Maven. Per maggiori dettagli sulla struttura del file, consulta la documentazione di riferimento di Maven.<repositories> <repository> <id>central</id> <name>Maven Central remote repository</name> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT_ID/REMOTE-REPOSITORY-NAME</url> <layout>default</layout> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
La sezione
<repositories>
definisce il repository Artifact Registry. Per un repository remoto, l'elemento<id>
deve essere impostato sucentral
. Questa impostazione sostituisce il valore predefinito percentral
l'ID repository ereditato Super POM.Base64 codifica il file della chiave con il seguente comando. Sostituisci KEY-FILE con il nome del file della chiave.
base64 -w 0 KEY-FILE
Aggiungi le impostazioni di autenticazione nell'elemento
<settings>
alla sezione<servers>
del file~/.m2/settings.xml
.
Per ulteriori informazioni, consulta la guida di riferimento alle impostazioni di Maven.
<settings> <servers> <server> <id>artifact-registry</id> <configuration> <httpConfiguration> <get> <usePreemptive>true</usePreemptive> </get> <head> <usePreemptive>true</usePreemptive> </head> <put> <params> <property> <name>http.protocol.expect-continue</name> <value>false</value> </property> </params> </put> </httpConfiguration> </configuration> <username>_json_key_base64</username> <password>KEY</password> </server> </servers> </settings>
La configurazione dell'autenticazione è stata completata.
Configura Gradle
Configura Gradle per il tipo di repository che utilizzi.
Standard
Esegui questo comando per stampare la configurazione del repository al tuo progetto Java.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
Dove
- PROJECT è l'ID progetto.
- REPOSITORY è l'ID o l'identificatore completo per il repository Git. Se hai configurato un repository Artifact Registry predefinito, viene utilizzato quando questo flag viene omesso dal comando.
- KEY-FILE è il percorso del file JSON dell'account di servizio file della chiave. Se comando per attivare l'account di servizio, puoi ometterlo flag.
Il comando restituisce le impostazioni da includere nel progetto Java, una versione con codifica Base64 della tua chiave privata.
La riga seguente della configurazione restituita definisce una variabile denominata
artifactRegistryMavenSecret
per la chiave dell'account di servizio. Aggiungi questa riga al file~/.gradle/gradle.properties
in modo che La chiave non è visibile nelle build o nel controllo del codice sorgente repository Git.artifactRegistryMavenSecret = KEY
In questa riga, KEY è la chiave privata del tuo servizio e il file delle chiavi dell'account di servizio. Per
_json_key_base64
, il criterioartifactRegistryMavenSecret
è impostato sul con codifica base64 come password.Nel tuo
build.gradle
specifica le impostazioni del repository:plugins { id "maven-publish" } publishing { publications { mavenJava(MavenPublication) { groupId 'maven.example.id' from components.java } } repositories { maven { url "https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } } } } repositories { maven { url "https://LOCATION-maven.pkg.dev/PROJECT/REPOSITORY" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } } }
- La sezione
repositories
imposta l'URL del repository e le credenziali per l'autenticazione. - La sezione
publishing
definisce i file da caricare e il repository Artifact Registry di destinazione. Quando è tutto pronto per il caricamento, puoi aggiornare l'elenco dei file nella sezionepublications
. Per informazioni sulle impostazioni di pubblicazione, consulta documentazione del plug-in Maven per la pubblicazione.
- La sezione
Remoto o virtuale
Base64 codifica il file della chiave con il seguente comando. Sostituisci KEY-FILE con il nome del file della chiave.
base64 -w 0 KEY-FILE
Nel file
~/.gradle/gradle.properties
, aggiungi la seguente riga in modo che la chiave non sia visibile nelle build o nel controllo del codice sorgente repository Git.artifactRegistryMavenSecret = KEY
In questa riga, KEY è il contenuto della tua app con codifica Base64 chiave.
Aggiungi le impostazioni del repository al file
build.gradle
.
L'esempio seguente mostra la configurazione di un repository remoto.
plugins { id 'java' id "maven-publish" id 'maven' } repositories { maven { url "artifactregistry://LOCATION-maven.pkg.dev /PROJECT_ID/REMOTE-REPOSITORY-NAME" credentials { username = "_json_key_base64" password = "$artifactRegistryMavenSecret" } authentication { basic(BasicAuthentication) } dependencies { compile "com.google.guava:guava:31.1-jre" }
La sezione
repositories
definisce il ruolo di Artifact Registry repository Git.In questo esempio, la sezione
dependencies
imposta una dipendenza sulla versione31.1-jre
del pacchetto Guava.
Definisci le dipendenze per il pacchetto in sezione
dependencies
.
La configurazione dell'autenticazione è stata completata.