Introducción
Esta guía te muestra cómo crear un flujo de trabajo que publique paquetes de Java en GitHub Packages y en el Repositorio Central de Maven. Con un solo flujo de trabajo, puedes publicar los paquetes en un solo repositorio o en varios repositorios.
Prerrequisitos
Te recomendamos que tengas una comprensión básica de los archivos de flujo de trabajo y las opciones de configuración. Para obtener más información, vea «Escritura de flujos de trabajo».
Para obtener más información sobre la creación de un flujo de trabajo CI para tu proyecto de Java con Maven, consulta "Construir y probar Java con Maven".
También puede ser útil tener un entendimiento básico de lo siguiente:
- "Trabajar con el registro de Apache Maven"
- "Almacenamiento de información en variables"
- "Uso de secretos en Acciones de GitHub"
- "Autenticación automática de tokens"
Acerca de la configuración del paquete
Los campos groupId
y artifactId
del archivo pom.xml crean un identificador único para el paquete que los registros usan para vincular el paquete a un registro. Para obtener más información, consulta Guía para cargar artefactos en el repositorio central en la documentación de Apache Maven.
El archivo pom.xml también contiene la configuración de los repositorios de administración de distribución en los que Maven implementará los paquetes. Cada repositorio debe tener un nombre y una URL de implementación. La autenticación para estos repositorios se puede configurar en el archivo .m2/settings.xml del directorio de inicio del usuario que ejecuta Maven.
Puedes usar la acción setup-java
para configurar el repositorio de implementación, así como la autenticación para ese repositorio. Para más información, vea setup-java
.
Publicar paquetes en el repositorio central de Maven
Cada vez que crees un lanzamiento nuevo, puedes desencadenar un flujo de trabajo para publicar tu paquete. El flujo de trabajo del ejemplo siguiente se ejecuta cuando se desencadena el evento release
con el tipo created
. El flujo de trabajo publica el paquete en el repositorio central de Maven si se superan las pruebas de CI. Para obtener más información sobre el evento release
, consulta "Eventos que desencadenan flujos de trabajo".
En este flujo de trabajo, puedes usar la acción setup-java
. Esta acción instala la versión especificada del JDK en PATH
, pero también configura un archivo settings.xml de Maven para publicar los paquetes. Por defecto, el archivo de configuraciones se configurará para GitHub Packages, pero se puede configurar para que se implemente en otro registro de paquetes, como el repositorio central de Maven. Si ya tienes un repositorio de administración de distribución configurado en pom.xml, puedes especificar ese id
durante la invocación de la acción setup-java
.
Por ejemplo, si vas a realizar la implementación en el repositorio central de Maven mediante el proyecto de hospedaje OSSRH, en pom.xml se podría especificar un repositorio de administración de distribución con el id
de ossrh
.
<project ...> ... <distributionManagement> <repository> <id>ossrh</id> <name>Central Repository OSSRH</name> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Central Repository OSSRH</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
Con esta configuración, puedes crear un flujo de trabajo que publique el paquete en el repositorio central de Maven especificando la administración de repositorio id
en la acción setup-java
. También deberás proporcionar variables de entorno que contengan el nombre de usuario y la contraseña para autenticarse en el repositorio.
En el paso de implementación, necesitarás establecer las variables de entorno para el nombre de usuario con el que te autenticaste en el repositorio y para el secreto que hayas configurado con la contraseña o el token con que autenticarse. Para obtener más información, vea «Uso de secretos en Acciones de GitHub».
name: Publish package to the Maven Central Repository on: release: types: [created] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: Publish package run: mvn --batch-mode deploy env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish package
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
Este flujo de trabajo realiza los siguientes pasos:
-
Revisa una copia del repositorio del proyecto.
-
Configura el JDK de Java y también configura el archivo settings.xml de Maven para agregar la autenticación para el repositorio
ossrh
mediante las variables de entornoMAVEN_USERNAME
yMAVEN_PASSWORD
. -
Ejecuta el comando
mvn --batch-mode deploy
para publicar en el repositorioossrh
. La variable de entornoMAVEN_USERNAME
se establecerá con el contenido del secretoOSSRH_USERNAME
y la variable de entornoMAVEN_PASSWORD
se establecerá con el contenido del secretoOSSRH_TOKEN
.Para obtener más información sobre el uso de secretos en el flujo de trabajo, consulta "Uso de secretos en Acciones de GitHub".
Sube paquetes al GitHub Packages
Cada vez que crees un lanzamiento nuevo, puedes desencadenar un flujo de trabajo para publicar tu paquete. El flujo de trabajo del ejemplo siguiente se ejecuta cuando se desencadena el evento release
con el tipo created
. El flujo de trabajo publica el paquete en el GitHub Packages si se superan las pruebas de CI. Para obtener más información sobre el evento release
, consulta "Eventos que desencadenan flujos de trabajo".
En este flujo de trabajo, puedes usar la acción setup-java
. Esta acción instala la versión especificada del JDK en el PATH
y configura un archivo settings.xml de Maven para publicar el paquete en el GitHub Packages. El archivo settings.xml generado define la autenticación de un servidor con un id
de github
, utilizando la variable de entorno GITHUB_ACTOR
como nombre de usuario y la variable de entorno GITHUB_TOKEN
como contraseña. A la variable de entorno GITHUB_TOKEN
se le asigna el valor del secreto GITHUB_TOKEN
especial.
El secreto GITHUB_TOKEN
se establece en un token de acceso para el repositorio cada vez que comienza un trabajo en un flujo de trabajo. Debes establecer los permisos para este token de acceso en el archivo del flujo de trabajo a fin de conceder acceso de lectura al permiso contents
y acceso de escritura al permiso packages
. Para obtener más información, vea «Autenticación automática de tokens».
Para un proyecto basado en Maven, puedes usar esta configuración mediante la creación de un repositorio de distribución en el archivo pom.xml con un id
de github
que apunta al punto de conexión de GitHub Packages.
Por ejemplo, si el nombre de la organización es "octocat" y el del repositorio es "hello-world", la configuración de GitHub Packages en pom.xml tendría un aspecto similar al del ejemplo siguiente.
<project ...> ... <distributionManagement> <repository> <id>github</id> <name>GitHub Packages</name> <url>https://maven.pkg.github.com/octocat/hello-world</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
Con esta configuración, puedes crear un flujo de trabajo que publique tu paquete en GitHub Packages haciendo uso del archivo settings.xml generado automáticamente.
name: Publish package to GitHub Packages on: release: types: [created] jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Publish package run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Publish package
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Este flujo de trabajo realiza los siguientes pasos:
-
Revisa una copia del repositorio del proyecto.
-
Configura el JDK de Java y también configura automáticamente el archivo settings.xml de Maven para agregar la autenticación para el repositorio
github
de Maven mediante para que use la variable de entornoGITHUB_TOKEN
. -
Ejecuta el comando
mvn --batch-mode deploy
para publicar en GitHub Packages. La variable de entornoGITHUB_TOKEN
se establecerá con el contenido del secretoGITHUB_TOKEN
. La clavepermissions
especifica el acceso concedido aGITHUB_TOKEN
.Para obtener más información sobre el uso de secretos en el flujo de trabajo, consulta "Uso de secretos en Acciones de GitHub".
Publicar paquetes en el repositorio central de Maven y GitHub Packages
Puedes publicar tus paquetes en el repositorio central de Maven y en el GitHub Packages usando la acción setup-java
para cada registro.
Asegúrate de que tu archivo pom.xml incluya un repositorio de administración de distribución para tu repositorio de GitHub y para tu proveedor de repositorios centrales de Maven. Por ejemplo, si implementas el repositorio central a través del proyecto de hospedaje de OSSRH, es posible que quieras especificarlo en un repositorio de administración de distribución con id
establecido en ossrh
, y que quieras especificar el GitHub Packages en un repositorio de administración de distribución con id
establecido en github
.
name: Publish package to the Maven Central Repository and GitHub Packages on: release: types: [created] jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - uses: actions/checkout@v4 - name: Set up Java for publishing to Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: Publish to the Maven Central Repository run: mvn --batch-mode deploy env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} - name: Set up Java for publishing to GitHub Packages uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Publish to GitHub Packages run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Publish package to the Maven Central Repository and GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set up Java for publishing to Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish to the Maven Central Repository
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Set up Java for publishing to GitHub Packages
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Publish to GitHub Packages
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Este flujo de trabajo llama a la acción setup-java
dos veces. Cada vez que se ejecuta la acción setup-java
, sobrescribe el archivo settings.xml de Maven para publicar los paquetes. Para la autenticación en el repositorio, el archivo settings.xml hace referencia al repositorio de administración de distribución id
y al nombre de usuario y la contraseña.
Este flujo de trabajo realiza los siguientes pasos:
-
Revisa una copia del repositorio del proyecto.
-
Llama a
setup-java
por primera vez. Esto configura el archivo settings.xml de Maven para el repositorioossrh
y establece las opciones de autenticación en variables de entorno definidas en el paso siguiente. -
Ejecuta el comando
mvn --batch-mode deploy
para publicar en el repositorioossrh
. La variable de entornoMAVEN_USERNAME
se establecerá con el contenido del secretoOSSRH_USERNAME
y la variable de entornoMAVEN_PASSWORD
se establecerá con el contenido del secretoOSSRH_TOKEN
. -
Llama a
setup-java
por segunda vez. Esto configura automáticamente el archivo settings.xml de Maven para el GitHub Packages. -
Ejecuta el comando
mvn --batch-mode deploy
para publicar en GitHub Packages. La variable de entornoGITHUB_TOKEN
se establecerá con el contenido del secretoGITHUB_TOKEN
. La clavepermissions
especifica el acceso concedido aGITHUB_TOKEN
.Para obtener más información sobre el uso de secretos en el flujo de trabajo, consulta "Uso de secretos en Acciones de GitHub".