Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.
Introdução
Este guia mostra como criar um fluxo de trabalho que publica pacotes Java no GitHub Package Registry e no Maven Central Repository. Com um único fluxo de trabalho, você pode publicar pacotes em um único repositório ou em vários repositórios.
Pré-requisitos
Recomendamos que você tenha um entendimento básico dos arquivos de fluxo de trabalho e das opções de configuração. Para obter mais informações, consulte "Aprenda GitHub Actions".
Para obter mais informações sobre a criação de um fluxo de trabalho de CI para seu projeto Java com Gradle, consulte "Criando e testando o Java com Gradle"
Você também pode achar útil ter um entendimento básico do seguinte:
- "Trabalhando com o registro npm"
- "Variáveis de ambiente"
- "Segredos criptografados"
- "Autenticação em um fluxo de trabalho"
Sobre a configuração do pacote
Os campos groupId
e artefactId
na seção MavenPublication
do arquivo build.gradle criam um identificador exclusivo para o seu pacote que os registros usam para vinculá-lo a um registro. Isto é semelhante aos campos groupId
e artifactId
do arquivo Maven pom.xml. Para obter mais informações, consulte o "Plugin de publicação do Maven" na documentação do Gradle.
O arquivo build.gradle também contém a configuração para os repositórios de gerenciamento de distribuição nos quais o Gradle publicará pacotes. Cada repositório deve ter um nome, uma URL de implementação e e credenciais para autenticação.
Publicar pacotes no Repositório Central do Maven
Cada vez que você criar uma nova versão, você poderá acionar um fluxo de trabalho para publicar o seu pacote. O fluxo de trabalho no exemplo abaixo é executado quando o evento versão
é acionado com o tipo criado
. O fluxo de trabalho publica o pacote no Repositório Central Maven se o teste de CI for aprovado. Para obter mais informações sobre o evento da versão
, consulte "Eventos que acionam fluxos de trabalho".
É possível definir um novo repositório do Maven no bloco de publicação do seu arquivo build.gradle que aponta para o repositório de pacotes. Por exemplo, se você estava fazendo uma implementaão no Central Repositório do Maven por meio do projeto de hospedagem OSSRH, seu build.gradle poderá especificar um repositório com o nome "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")
}
}
}
}
Com essa configuração, é possível criar um fluxo de trabalho que publica seu pacote no Repositório Central do Maven ao executar o comando publicação do gradle
. Na etapa de implementação, você deverá definir variáveis de ambiente para o nome de usuário e senha ou token usado para fazer a autenticação no repositório do Maven. Para obter mais informações, consulte "Criando e usando segredos encriptados".
# This workflow uses actions that are not certified by GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# documentação.
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Java
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Publish package
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
Este fluxo de trabalho executa os seguintes passos:
-
Verifica uma cópia do repositório do projeto.
-
Define o Java JDK.
-
Valida as somas de verificação de qualquer arquivo JAR do Gradle Wrapper presentes no repositório.
-
Executa a ação
gradle/gradle-build-action
com o argumentopublicar
para fazer uma publicação no repositório do MavenOSSRH
. A variável de ambienteMAVEN_USERNAME
será definida com o conteúdo do seu segredoOSSRH_USERNAME
, e a variável de ambienteMAVEN_PASSWORD
será definida com o conteúdo do seu segredoOSSRH_TOKEN
.Para obter mais informações sobre o uso de segredos no seu fluxo de trabalho, consulte "Criando e usando segredos encriptados".
Publicar pacotes em GitHub Package Registry
Cada vez que você criar uma nova versão, você poderá acionar um fluxo de trabalho para publicar o seu pacote. O fluxo de trabalho no exemplo abaixo é executado quando o evento versão
é acionado com o tipo criado
. O fluxo de trabalho publica o pacote em GitHub Package Registry se o teste de CI for aprovado. Para obter mais informações sobre o evento da versão
, consulte "Eventos que acionam fluxos de trabalho".
Você pode definir um novo repositório do Maven no bloco de publicação do build.gradle que aponta para GitHub Package Registry. Nessa configuração do repositório, também é possível aproveitar as variáveis de ambiente definidas na execução do fluxo de trabalho de CI. Você pode usar a variável de ambiente GITHUB_ACTOR
como um nome de usuário e você pode definir a variável de ambiente GITHUB_TOKEN
com seu segredo GITHUB_TOKEN
.
O segredo GITHUB_TOKEN
é definido como um token de acesso para o repositório toda vez que um trabalho de um fluxo de trabalho for iniciado. tem permissões de leitura e gravação para pacotes no repositório em que o fluxo de trabalho é executado. Para obter mais informações, consulteEfetuar a autenticação com o GITHUB_TOKEN".
Por exemplo, se sua organização é denominado "octocat" e seu repositório é denominado de "hello-world", a configuração do GitHub Package Registry no build.gradle será parecida ao exemplo abaixo.
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")
}
}
}
}
Com esta configuração, você pode criar um fluxo de trabalho que publica seu pacote em GitHub Package Registry, executando o comando gradle publish
.
# This workflow uses actions that are not certified by GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# documentação.
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Publish package
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Este fluxo de trabalho executa os seguintes passos:
-
Verifica uma cópia do repositório do projeto.
-
Define o Java JDK.
-
Valida as somas de verificação de qualquer arquivo JAR do Gradle Wrapper presentes no repositório.
-
Executa a ação
grades/gradle-build-action
com o argumentopublicar
para publicar em GitHub Package Registry. A variável de ambienteGITHUB_TOKEN
será definida com o conteúdo do segredoGITHUB_TOKEN
.Para obter mais informações sobre o uso de segredos no seu fluxo de trabalho, consulte "Criando e usando segredos encriptados".
Publicar imagens no Repositório Central do Maven e em GitHub Package Registry
Você pode publicar seus pacotes no Repositório Central Maven e em GitHub Package Registry, configurando cada um no seu arquivo build.gradle.
Certifique-se de que seu arquivo build.gradle inclua um repositório para seu repositório GitHub e seu provedor do Repositório Central do Maven.
Por exemplo, se fizer a implementação no Repositório Central por meio do projecto de hospedagem OSSRH, é possível que você deseje especificá-lo em um repositório de gerenciamento de distribuição com o nome
definido como OSSRH
. Se você fizer a implementação em GitHub Package Registry, é possível que você deseje especificá-lo em um repositório de gerenciamento de distribuição com o nome `definido como
GitHubPackages`.
Se sua organização for denominada "octocat" e seu repositório for denominado "hello-world", a configuração em build.gradle será parecida ao exemplo abaixo.
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")
}
}
}
}
Com esta configuração, você pode criar um fluxo de trabalho que publica seu pacote no Repositório Central do Maven e em GitHub Package Registry, executando o comando publicação do gradle
.
# This workflow uses actions that are not certified by GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# documentação.
name: Publish package to the Maven Central Repository and GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Java
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Publish package
uses: gradle/gradle-build-action@937999e9cc2425eddc7fd62d1053baf041147db7
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Este fluxo de trabalho executa os seguintes passos:
-
Verifica uma cópia do repositório do projeto.
-
Define o Java JDK.
-
Valida as somas de verificação de qualquer arquivo JAR do Gradle Wrapper presentes no repositório.
-
Executa a ação
grades/gradle-build
com o argumentopublicar
para publicar no repositório do MavenOSSRH
e em GitHub Package Registry. A variável de ambienteMAVEN_USERNAME
será definida com o conteúdo do seu segredoOSSRH_USERNAME
, e a variável de ambienteMAVEN_PASSWORD
será definida com o conteúdo do seu segredoOSSRH_TOKEN
. A variável de ambienteGITHUB_TOKEN
será definida com o conteúdo do segredoGITHUB_TOKEN
.Para obter mais informações sobre o uso de segredos no seu fluxo de trabalho, consulte "Criando e usando segredos encriptados".