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 de CI para tu proyecto de Java con Gradle, consulta Construir y probar Java con Gradle.
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
de la sección MavenPublication
del archivo build.gradle crean un identificador único para el paquete que los registros usan para vincularlo a un registro. Esto es similar a los campos groupId
y artifactId
del archivo depom.xml de Maven. Para más información, consulta Complemento de publicación de Maven en la documentación de Gradle.
El archivo build.gradle también contiene la configuración de los repositorios de administración de distribución en los que Gradle publicará los paquetes. Cada repositorio debe tener un nombre, una URL de implementación y credenciales para la autenticación.
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.
Puede definir un nuevo repositorio de Maven en el bloque de publicación del archivo build.gradle que apunte al repositorio del paquete. Por ejemplo, si va a realizar la implementación en el repositorio central de Maven mediante el proyecto de alojamiento OSSRH, en build.gradle se podría especificar un repositorio con el nombre "OSSRH"
.
plugins { ... id 'maven-publish' } publishing { ... repositories { maven { name = "OSSRH" url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { username = System.getenv("MAVEN_USERNAME") password = System.getenv("MAVEN_PASSWORD") } } } }
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "OSSRH"
url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
credentials {
username = System.getenv("MAVEN_USERNAME")
password = System.getenv("MAVEN_PASSWORD")
}
}
}
}
Con esta configuración, puede crear un flujo de trabajo que publique el paquete en el repositorio central de Maven mediante la ejecución del comando gradle publish
. En el paso de implementación, necesitarás establecer variables de entorno para el nombre de usuario y la contraseña o token que usas para autenticar en el repositorio de Maven. Para más información, consulta Uso de secretos en Acciones de GitHub.
# Este flujo de trabajo usa acciones que no GitHub no certifica. # Estas las proporcionan entidades terceras y las gobiernan # condiciones de servicio, políticas de privacidad y documentación de soporte # en línea. # GitHub recomienda anclar acciones a un SHA de confirmación. # Para obtener una versión más reciente, debes actualizar el SHA. # También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia. 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 Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
# GitHub recomienda anclar acciones a un SHA de confirmación.
# Para obtener una versión más reciente, debes actualizar el SHA.
# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.
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 Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- name: Publish package
run: ./gradlew publish
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.
-
Configura el entorno de Gradle. La acción
gradle/actions/setup-gradle
se encarga del estado de almacenamiento en caché entre ejecuciones de flujo de trabajo y proporciona un resumen detallado de todas las ejecuciones de Gradle. -
Ejecuta la tarea
publish
de Gradle para publicar en el repositorio de MavenOSSRH
. 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.
Puede definir un nuevo repositorio de Maven en el bloque de publicación de build.gradle que apunte a GitHub Packages. En esa configuración de repositorio, también puedes aprovechar las variables de entorno establecidas en tu ejecución de flujo de trabajo de CI. Puede usar la variable de entorno GITHUB_ACTOR
como nombre de usuario y puede establecer la variable de entorno GITHUB_TOKEN
con el secreto GITHUB_TOKEN
.
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».
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 build.gradle tendría un aspecto similar al del ejemplo siguiente.
plugins { ... id 'maven-publish' } publishing { ... repositories { maven { name = "GitHubPackages" url = "https://maven.pkg.github.com/octocat/hello-world" credentials { username = System.getenv("GITHUB_ACTOR") password = System.getenv("GITHUB_TOKEN") } } } }
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/octocat/hello-world"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
Con esta configuración, puede crear un flujo de trabajo que publique el paquete en GitHub Packages mediante la ejecución del comando gradle publish
.
# Este flujo de trabajo usa acciones que no GitHub no certifica. # Estas las proporcionan entidades terceras y las gobiernan # condiciones de servicio, políticas de privacidad y documentación de soporte # en línea. # GitHub recomienda anclar acciones a un SHA de confirmación. # Para obtener una versión más reciente, debes actualizar el SHA. # También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia. 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: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
# GitHub recomienda anclar acciones a un SHA de confirmación.
# Para obtener una versión más reciente, debes actualizar el SHA.
# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.
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: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- name: Publish package
run: ./gradlew publish
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.
-
Configura el entorno de Gradle. La acción
gradle/actions/setup-gradle
se encarga del estado de almacenamiento en caché entre ejecuciones de flujo de trabajo y proporciona un resumen detallado de todas las ejecuciones de Gradle. -
Ejecuta el comando
publish
de Gradle para publicar en GitHub Packages. La variable de entornoGITHUB_TOKEN
se establecerá con el contenido del secretoGITHUB_TOKEN
. La clavepermissions
especifica el acceso que permitirá el secretoGITHUB_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
Puede publicar los paquetes en el repositorio central de Maven y GitHub Packages si configura cada uno en el archivo build.gradle.
Asegúrese de que en el archivo build.gradle se incluya un repositorio para el repositorio de GitHub y para el proveedor de repositorios centrales de Maven.
Por ejemplo, si realiza la implementación en el repositorio central mediante el proyecto de hospedaje OSSRH, es posible que quiera especificarlo en un repositorio de administración de distribución con name
establecido en OSSRH
. Si realiza la implementación en GitHub Packages, es posible que quiera especificarlo en un repositorio de administración de distribución con name
establecido en GitHubPackages
.
Si el nombre de la organización es "octocat" y el del repositorio es "hello-world", la configuración en build.gradle sería similar a la del siguiente ejemplo.
plugins { ... id 'maven-publish' } publishing { ... repositories { maven { name = "OSSRH" url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" credentials { username = System.getenv("MAVEN_USERNAME") password = System.getenv("MAVEN_PASSWORD") } } maven { name = "GitHubPackages" url = "https://maven.pkg.github.com/octocat/hello-world" credentials { username = System.getenv("GITHUB_ACTOR") password = System.getenv("GITHUB_TOKEN") } } } }
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "OSSRH"
url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
credentials {
username = System.getenv("MAVEN_USERNAME")
password = System.getenv("MAVEN_PASSWORD")
}
}
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/octocat/hello-world"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
Con esta configuración, puede crear un flujo de trabajo que publique el paquete en el repositorio central de Maven y GitHub Packages mediante la ejecución del comando gradle publish
.
# Este flujo de trabajo usa acciones que no GitHub no certifica. # Estas las proporcionan entidades terceras y las gobiernan # condiciones de servicio, políticas de privacidad y documentación de soporte # en línea. # GitHub recomienda anclar acciones a un SHA de confirmación. # Para obtener una versión más reciente, debes actualizar el SHA. # También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia. 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 uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
# GitHub recomienda anclar acciones a un SHA de confirmación.
# Para obtener una versión más reciente, debes actualizar el SHA.
# También puedes hacer referencia a una etiqueta o rama, pero la acción puede cambiar sin ninguna advertencia.
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
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
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.
-
Configura el entorno de Gradle. La acción
gradle/actions/setup-gradle
se encarga del estado de almacenamiento en caché entre ejecuciones de flujo de trabajo y proporciona un resumen detallado de todas las ejecuciones de Gradle. -
Ejecuta la acción
publish
de Gradle para publicar en el repositorioOSSRH
de Maven y en GitHub Packages. 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
. La variable de entornoGITHUB_TOKEN
se establecerá con el contenido del secretoGITHUB_TOKEN
. La clavepermissions
especifica el acceso que permitirá el secretoGITHUB_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.