Note
Actualmente los ejecutores hospedados por GitHub no se admiten en GitHub Enterprise Server. Puede ver más información sobre la compatibilidad futura planeada en GitHub public roadmap.
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 más información, consulta 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.
Warning
El paquete de Apache Maven debe seguir la convención de nomenclatura y, por tanto, el campo artifactId solo debe contener letras minúsculas, dígitos o guiones. Para obtener más información, consulta Convención de nomenclatura de coordenadas de Maven en la documentación de maven.apache.org. Si usas letras en mayúsculas en el nombre del artefacto, obtendrás una respuesta 422 Unprocessable Entity.
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 más información, consulta 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
ossrhmediante las variables de entornoMAVEN_USERNAMEyMAVEN_PASSWORD. -
Ejecuta el comando
mvn --batch-mode deploypara publicar en el repositorioossrh. La variable de entornoMAVEN_USERNAMEse establecerá con el contenido del secretoOSSRH_USERNAMEy la variable de entornoMAVEN_PASSWORDse 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 más información, consulta 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
githubde Maven mediante para que use la variable de entornoGITHUB_TOKEN. -
Ejecuta el comando
mvn --batch-mode deploypara publicar en GitHub Packages. La variable de entornoGITHUB_TOKENse establecerá con el contenido del secretoGITHUB_TOKEN. La clavepermissionsespecifica 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-javapor primera vez. Esto configura el archivo settings.xml de Maven para el repositorioossrhy establece las opciones de autenticación en variables de entorno definidas en el paso siguiente. -
Ejecuta el comando
mvn --batch-mode deploypara publicar en el repositorioossrh. La variable de entornoMAVEN_USERNAMEse establecerá con el contenido del secretoOSSRH_USERNAMEy la variable de entornoMAVEN_PASSWORDse establecerá con el contenido del secretoOSSRH_TOKEN. -
Llama a
setup-javapor segunda vez. Esto configura automáticamente el archivo settings.xml de Maven para el GitHub Packages. -
Ejecuta el comando
mvn --batch-mode deploypara publicar en GitHub Packages. La variable de entornoGITHUB_TOKENse establecerá con el contenido del secretoGITHUB_TOKEN. La clavepermissionsespecifica 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.