Debes autenticarte en Artifact Registry cuando usas un servidor de para conectarse a un repositorio de Artifact Registry. Esta documentación se enfoca en la configuración de Maven y Gradle.
No es necesario que configures la autenticación para Cloud Build ni los entornos de ejecución de Google Cloud, como Google Kubernetes Engine y Cloud Run, pero debes verificar que los permisos necesarios estén configurados. Para obtener más información, consulta la información sobre Cloud Build y la implementación en entornos de ejecución de Google Cloud.
Antes de comenzar
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- (Opcional) Configura valores predeterminados para los comandos de gcloud.
Si configuras la autenticación con un repositorio estándar, verifica la política de versiones para que puedas configurar tu proyecto de Maven correctamente para los tipos de paquetes de Java que puedes subir.
Console
Abre la página Repositorios en la consola de Google Cloud.
Haz clic en el repositorio en el que deseas autenticarte.
En la sección Detalles, se muestra la política de la versión. Si el repositorio tiene una política de versión de instantáneas, el campo Permitir que se reemplacen las instantáneas indica si las instantáneas pueden reemplazar las versiones de instantáneas coincidentes en el repositorio.
gcloud
Ejecuta el siguiente comando para ver la descripción de un repositorio.
gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT \ --location=LOCATION
Dónde
- REPOSITORY es el ID del repositorio. Si configuraste un repositorio predeterminado de Artifact Registry, se usa cuando se omite esta marca del comando.
- PROJECT es el ID del proyecto. Si se omite esta marca, se usa el proyecto predeterminado o actual.
- LOCATION es la ubicación regional o multirregional del repositorio.
El resultado del comando incluye información sobre la política de versiones en
mavenConfig
. En este ejemplo, el repositorio tiene una instantánea la política de versiones y las instantáneas no pueden reemplazar versiones idénticas en el en un repositorio de confianza.Encryption: Google-managed key createTime: '2021-10-04T19:39:10.897404Z' format: MAVEN mavenConfig: allowSnapshotOverwrites: false versionPolicy: SNAPSHOT
Si un repositorio no tiene una política de versión, el valor de
mavenConfig
es{}
.
Descripción general
Artifact Registry admite los siguientes métodos de autenticación.
- Usa un asistente de autenticación
- Esta opción proporciona la mayor flexibilidad. Cuando incluyes el asistente en tu configuración de Maven o Gradle, Artifact Registry busca credenciales de la cuenta de servicio en el entorno.
- Especifica una clave de cuenta de servicio como una credencial
- Usa esta opción cuando una aplicación no sea compatible con las credenciales predeterminadas de la aplicación, pero admita la autenticación mediante un nombre de usuario y una contraseña.
Las claves de la cuenta de servicio son credenciales de larga duración. Usa los siguientes lineamientos para limitar el acceso a tus repositorios:
- Considera usar una cuenta de servicio dedicada para interactuar con los repositorios.
- Otorga la función mínima de Artifact Registry que requiera la cuenta de servicio. Por ejemplo, asigna la función de lector de Artifact Registry a una cuenta de servicio que solo descargue artefactos.
- Si los grupos de tu organización requieren diferentes niveles de acceso a repositorios específicos, otorga acceso a nivel de repositorio en lugar de a nivel de proyecto.
- Sigue las prácticas recomendadas para administrar credenciales.
Autentica con un auxiliar de credenciales
Artifact Registry proporciona un vagón de Maven y un Complemento de Gradle como auxiliares de credenciales. Cuando usas el auxiliar de credenciales, las credenciales no se almacenan en tu proyecto de Java. En cambio, Artifact Registry busca las credenciales en el siguiente orden:
Las credenciales predeterminadas de la aplicación (ADC), que es una estrategia que busca credenciales en el siguiente orden:
Credenciales definidas en la variable de entorno
GOOGLE_APPLICATION_CREDENTIALS
Credenciales que la cuenta de servicio predeterminada para Compute Engine, Funciones de Google Kubernetes Engine, Cloud Run, App Engine o Cloud Run proporciona.
Credenciales que proporciona Google Cloud CLI, incluidas las credenciales de usuario del comando
gcloud auth application-default login
La variable GOOGLE_APPLICATION_CREDENTIALS
hace que la cuenta
de autenticación explícita, lo que facilita la solución de problemas. Si no usas la variable, verifica que las cuentas que pueda usar ADC tengan los permisos necesarios. Por ejemplo, el
cuenta de servicio predeterminada para VMs de Compute Engine, nodos de Google Kubernetes Engine,
y las revisiones de Cloud Run
tienen acceso de solo lectura a los repositorios. Si
desde estos entornos con la cuenta de servicio predeterminada
debes modificar los permisos.
Configura una cuenta de servicio para un asistente de credenciales
Para crear una cuenta de servicio y configurar la autenticación mediante la variable de entorno, haz lo siguiente:
Crea una cuenta de servicio que actúe en nombre de tu aplicación o elige una cuenta de servicio existente que uses para la automatización.
Necesitarás la ubicación del archivo de claves de la cuenta de servicio para configurar la autenticación con Artifact Registry. En las cuentas existentes, puedes ver claves y crear claves nuevas en la página Cuentas de servicio.
Otorga el rol específico de Artifact Registry a la cuenta de servicio para proporcionar acceso al repositorio.
Asigna la ubicación del archivo de claves de la cuenta de servicio a la variable
GOOGLE_APPLICATION_CREDENTIALS
para que el auxiliar de credenciales de Artifact Registry pueda obtener tu clave cuando se conecta con repositorios.export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
En el ejemplo anterior, KEY-FILE es la ruta de acceso al archivo de claves de la cuenta de servicio.
Configura Maven
Configura Maven para el tipo de repositorio que usas.
Estándar
Ejecuta el siguiente comando para imprimir la configuración del repositorio que deseas agregar a tu proyecto de Java.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Dónde
- PROJECT es el ID del proyecto. Si se omite esta marca, se usa el proyecto predeterminado o actual.
- REPOSITORY es el ID del repositorio. Si configuraste un repositorio predeterminado de Artifact Registry, se usa cuando se omite esta marca del comando.
- LOCATION es la ubicación regional o multirregional del repositorio.
Agrega la configuración que se muestra a las secciones correspondientes del archivo
pom.xml
en tu proyecto de Maven. Consulta la documentación de Maven Referencia de POM para obtener detalles sobre la estructura del archivo.En el siguiente ejemplo, se muestra la configuración de un repositorio que almacena versiones de instantáneas y de lanzamiento.
<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>
Los elementos
<release>
y<snapshot>
indican si el repositorio almacena paquetes de lanzamiento, paquetes de instantáneas o ambos. Esta configuración debe corresponder al repositorio política de la versión.El elemento
<build>
define el vagón de Artifact Registry de la siguiente manera: una extensión. Para obtener información sobre esta alternativa, consulta la documentación de las herramientas de Maven de Artifact Registry.
Remoto o virtual
Edita el archivo
pom.xml
de tu proyecto. Consulta la documentación de Maven Referencia de POM para obtener detalles sobre la estructura del archivo.En el siguiente ejemplo, se muestra la configuración de un repositorio remoto que almacena versiones de instantáneas y de lanzamiento. En este ejemplo, el proyecto tiene en una versión del paquete de 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>
En la sección
<repositories>
, se define el repositorio de Artifact Registry. Para un repositorio remoto, el elemento<id>
debe establecerse encentral
Esta configuración anula el valor predeterminado decentral
. el ID de repositorio heredado del Super POM:En la sección
<build>
, se configura el vagón de Artifact Registry como una extensión. Para obtener información sobre esta alternativa, consulta la documentación de las herramientas de Maven de Artifact Registry.En este ejemplo, la sección
<dependencies>
establece una dependencia en la versión28.0-jre
del paquete Guava.
Maven resuelve algunas dependencias antes de aplicar un vagón definido en
pom.xml
, incluido lo siguiente:- Referencias en un proyecto secundario de Maven a un proyecto superior a través de
<parent>
. - Dependencias de complementos almacenadas en Artifact Registry.
Si tu proyecto necesita resolver estas dependencias, debes usar el extensiones principales para garantizar que Maven pueda localizar archivos POM y complementos superiores.
En tu proyecto, crea el archivo
${maven.projectBasedir}/.mvn/extensions.xml
con el siguiente contenido. El elemento<extension>
define la alternativa.<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 ahora puede resolver dependencias superiores o de complementos desde Artifact Registry.
- Referencias en un proyecto secundario de Maven a un proyecto superior a través de
Se completó la configuración de autenticación.
Configura Gradle
Configura Gradle para el tipo de repositorio que usas.
Estándar
Ejecuta el siguiente comando para imprimir la configuración del repositorio que deseas agregar a tu proyecto de Java.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION
Dónde
- PROJECT es el ID del proyecto. Si se omite esta marca, se usa el proyecto predeterminado o actual.
- REPOSITORY es el ID del repositorio. Si configuraste un Artifact Registry predeterminado de Cloud, se usa cuando esta marca se omite en el comando.
- LOCATION es la ubicación regional o multirregional del repositorio.
Agrega la configuración del repositorio a tu archivo
build.gradle
. Lo siguiente En este ejemplo, se muestra la ubicación relativa de las secciones impresas.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" } }
En la sección
plugins
, se declara el complemento de Artifact Registry. Para obtener información sobre el complemento, consulta la documentación de las herramientas de Maven de Artifact Registry.En la sección
publishing
, se definen los archivos que se subirán y el repositorio de destino de Artifact Registry. Puedes actualizar la lista de archivos en la secciónpublications
cuando estés listo para realizar cargas. Para obtener información sobre la configuración de publicación, consulta la documentación del complemento de publicación de Maven.
Remoto o virtual
Agrega la configuración del repositorio a tu archivo
build.gradle
.En el siguiente ejemplo, se muestra la configuración de un repositorio remoto. En este ejemplo, el proyecto tiene una dependencia en una versión del paquete de 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" }
En la sección
plugins
, se declara el complemento de Artifact Registry. Para obtener información sobre el complemento, consulta la documentación del Herramientas de Maven de Artifact Registry.En la sección
repositories
, se define el repositorio de Artifact Registry.En este ejemplo, la sección
dependencies
establece una dependencia en el Versión31.1-jre
del paquete Guava.
Define tus dependencias para tu paquete en la sección
dependencies
.Si necesitas usar repositorios en tu archivo
init.gradle
osettings.gradle
, puedes agregar la configuración del complemento a esos archivos.Para
init.gradle
, agrega la siguiente configuración: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
Para settings.gradle, agrega la siguiente configuración:
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"
Se completó la configuración de autenticación.
Configura la autenticación con contraseña
Usa este enfoque cuando la aplicación de Java requiera la autenticación con un nombre de usuario y una contraseña especificados.
Configura una cuenta de servicio para la autenticación con contraseña
Para crear una cuenta de servicio:
Crea una cuenta de servicio que actúe en nombre de tu aplicación o elige una cuenta de servicio existente que uses para la automatización.
Necesitarás la ubicación del archivo de claves de la cuenta de servicio para configurar la autenticación con Artifact Registry. En las cuentas existentes, puedes ver claves y crear claves nuevas en la página Cuentas de servicio.
Si deseas activar la cuenta de servicio en la sesión actual de la CLI de gcloud, ejecuta el siguiente comando:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
Dónde
- ACCOUNT es la cuenta de usuario o servicio.
- KEY-FILE es la ruta al archivo de claves JSON de la cuenta de servicio.
Configura Maven
Configura Maven para el tipo de repositorio que usas.
Estándar
Ejecuta el siguiente comando para imprimir la configuración del repositorio que deseas agregar a tu proyecto de Java.
gcloud artifacts print-settings mvn \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
Dónde
- PROJECT es el ID del proyecto. Si se omite esta marca, se usa el proyecto predeterminado o actual.
- REPOSITORY es el ID del repositorio. Si configuraste un repositorio predeterminado de Artifact Registry, se usa cuando se omite esta marca del comando.
- LOCATION es la ubicación regional o multirregional del repositorio.
- KEY-FILE es la ruta al archivo de claves JSON de la cuenta de servicio.
El comando devuelve la configuración que se incluirá en tu proyecto de Java, incluida una versión codificada en base64 de tu clave privada.
- Agrega la configuración del repositorio que se muestra en el elemento
<project>
a las secciones correspondientes del archivopom.xml
en tu proyecto de Maven. Consulta la referencia del gerente de Operaciones con Socios de Maven para obtener detalles sobre la estructura del archivo.
<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>
Los elementos
<release>
y<snapshot>
indican si el repositorio almacena paquetes de lanzamiento, paquetes de instantáneas o ambos. Esta configuración debe corresponder con la política de versiones del repositorio.- Agrega la configuración de autenticación que se muestra en el elemento
<settings>
a la sección<servers>
del archivo~/.m2/settings.xml
. En la siguiente ejemplo,KEY
es la clave codificada en base64 de tu archivo de claves.
Consulta la referencia de configuración de Maven para obtener más información.
<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 virtual
Agrega la configuración del repositorio a las secciones correspondientes del archivo
pom.xml
en tu proyecto de Maven. Consulta la referencia del gerente de Operaciones con Socios de Maven para obtener detalles sobre la estructura del archivo.<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>
En la sección
<repositories>
, se define el repositorio de Artifact Registry. Para un repositorio remoto, el elemento<id>
debe establecerse comocentral
. Este parámetro de configuración anula el valor predeterminado del ID del repositoriocentral
que se hereda del Super POM.Codifica en Base64 tu archivo de claves con el siguiente comando. Reemplaza KEY-FILE por el nombre de tu archivo de claves.
base64 -w 0 KEY-FILE
Agrega la configuración de autenticación del elemento
<settings>
al la sección<servers>
del archivo~/.m2/settings.xml
.
Consulta la referencia de configuración de Maven para obtener más información.
<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>
Se completó la configuración de autenticación.
Configura Gradle
Configura Gradle para el tipo de repositorio que usas.
Estándar
Ejecuta el siguiente comando para imprimir la configuración del repositorio que deseas agregar a tu proyecto de Java.
gcloud artifacts print-settings gradle \ --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --json-key=KEY-FILE
Dónde
- PROJECT es el ID del proyecto.
- REPOSITORY es el ID o el identificador completamente calificado del repositorio. Si configuraste un repositorio predeterminado de Artifact Registry, se usa cuando se omite esta marca del comando.
- KEY-FILE es la ruta al archivo de claves JSON de la cuenta de servicio. Si ejecutaste el comando para activar tu cuenta de servicio, puedes omitir esta marca.
El comando muestra la configuración que se debe incluir en tu proyecto de Java, incluida una versión codificada en base64 de tu clave privada.
En la siguiente línea de configuración que se muestra, se define una variable llamada
artifactRegistryMavenSecret
para la clave de tu cuenta de servicio. Agrega esta línea a tu archivo~/.gradle/gradle.properties
para que la clave no sea visible en tus compilaciones ni en tu repositorio de control de origen.artifactRegistryMavenSecret = KEY
En esta línea, KEY es la clave privada de tu servicio archivo de claves de la cuenta de servicio. Para
_json_key_base64
,artifactRegistryMavenSecret
se establece en la clave codificada en base64 como tu contraseña.En tu
build.gradle
, especifica la configuración del repositorio: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) } } }
- En la sección
repositories
, se establece la URL del repositorio y las credenciales para la autenticación. - En la sección
publishing
, se definen los archivos que se subirán y el repositorio de destino de Artifact Registry. Puedes actualizar la lista de archivos en la secciónpublications
cuando estés listo para realizar cargas. Para obtener información sobre la configuración de publicación, consulta la documentación del complemento de publicación de Maven.
- En la sección
Remoto o virtual
Usa el siguiente comando para codificar tu archivo de claves en Base64. Reemplaza KEY-FILE por el nombre de tu archivo de claves.
base64 -w 0 KEY-FILE
En el archivo
~/.gradle/gradle.properties
, agrega la siguiente línea para que la clave no sea visible en tus compilaciones ni en tu repositorio de control de código fuente.artifactRegistryMavenSecret = KEY
En esta línea, KEY es el contenido de tu archivo de claves codificado en Base64.
Agrega la configuración del repositorio a tu archivo
build.gradle
.
En el siguiente ejemplo, se muestra la configuración de un repositorio 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" }
En la sección
repositories
, se define Artifact Registry en un repositorio de confianza.En este ejemplo, la sección
dependencies
establece una dependencia en la versión31.1-jre
del paquete Guava.
Define tus dependencias para tu paquete en la sección
dependencies
.
Se completó la configuración de autenticación.