Observação: no momento, não há suporte para os executores hospedados no GitHub no GitHub Enterprise Server. Você pode ver mais informações sobre o suporte futuro planejado no GitHub public roadmap.
Introdução
Este guia mostra como criar um fluxo de trabalho que publica pacotes Java no GitHub Packages 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, confira "Aprenda a usar o GitHub Actions".
Para obter mais informações sobre como criar um fluxo de trabalho de CI para seu projeto Java com o Gradle, confira "Como criar e testar o Java com o Gradle".
Você também pode achar útil ter um entendimento básico do seguinte:
- "Como trabalhar 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 artifactId
da seção MavenPublication
do arquivo build.gradle criam um identificador exclusivo para o pacote que os registros usam para vincular seu pacote a um registro. Isso é semelhante aos campos groupId
e artifactId
do arquivo pom.xml do Maven. Para obter mais informações, confira o "Plug-in do Maven Publish" 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á os 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 release
é disparado com o tipo created
. 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 release
, confira "Eventos que disparam fluxos de trabalho".
Você pode definir um novo repositório do Maven no bloco de publicação do arquivo build.gradle que aponta para o repositório de pacotes. Por exemplo, se você estiver fazendo a implantação no Maven Central Repository por meio do projeto de hospedagem do OSSRH, o 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, você pode criar um fluxo de trabalho que publica seu pacote no Maven Central Repository executando o comando gradle publish
. 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, confira "Como criar e usar segredos criptografados".
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
# O GitHub recomenda fixar ações em um SHA de commit.
# Para obter uma versão mais recente, você precisará atualizar o SHA.
# Você também pode fazer referência a uma marca ou branch, mas a ação pode ser alterada sem aviso.
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@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
Este fluxo de trabalho realiza as etapas a seguir:
-
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 argumentopublish
para publicação no repositórioOSSRH
do Maven. A variável de ambienteMAVEN_USERNAME
será definida com o conteúdo do segredoOSSRH_USERNAME
, e a variável de ambienteMAVEN_PASSWORD
será definida com o conteúdo do segredoOSSRH_TOKEN
.Para obter mais informações sobre como usar segredos no fluxo de trabalho, confira "Como criar e usar segredos criptografados".
Publicar pacotes em GitHub Packages
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 release
é disparado com o tipo created
. O fluxo de trabalho publica o pacote em GitHub Packages se o teste de CI for aprovado. Para obter mais informações sobre o evento release
, confira "Eventos que disparam fluxos de trabalho".
Você pode definir um novo repositório do Maven no bloco de publicação do build.gradle que aponta para o GitHub Packages. 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. Use a variável de ambiente GITHUB_ACTOR
como um nome de usuário e defina a variável de ambiente GITHUB_TOKEN
com o segredo GITHUB_TOKEN
.
O segredo GITHUB_TOKEN
é definido como um token de acesso para o repositório sempre que um trabalho em um fluxo de trabalho é iniciado. Você deve definir as permissões desse token de acesso no arquivo de fluxo de trabalho para permitir acesso de leitura ao escopo contents
e acesso de gravação ao escopo packages
. Para obter mais informações, confira "Como se autenticar com o GITHUB_TOKEN".
Por exemplo, se o nome da sua organização for "octocat" e o nome do repositório for "hello-world", a configuração do GitHub Packages no build.gradle será semelhante 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 essa configuração, você pode criar um fluxo de trabalho que publica seu pacote no GitHub Packages executando o comando gradle publish
.
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
# O GitHub recomenda fixar ações em um SHA de commit.
# Para obter uma versão mais recente, você precisará atualizar o SHA.
# Você também pode fazer referência a uma marca ou branch, mas a ação pode ser alterada sem aviso.
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@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@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Este fluxo de trabalho realiza as etapas a seguir:
-
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 argumentopublish
para publicação no GitHub Packages. A variável de ambienteGITHUB_TOKEN
será definida com o conteúdo do segredoGITHUB_TOKEN
. A chavepermissions
especifica o acesso que o segredoGITHUB_TOKEN
permitirá.Para obter mais informações sobre como usar segredos no fluxo de trabalho, confira "Como criar e usar segredos criptografados".
Publicar imagens no Repositório Central do Maven e em GitHub Packages
Você pode publicar seus pacotes no Maven Central Repository e no GitHub Packages configurando cada um no arquivo build.gradle.
Verifique se o arquivo build.gradle inclui um repositório para o seu repositório do GitHub e o provedor do Maven Central Repository.
Por exemplo, se você fizer a implantação no Central Repository por meio do projeto de hospedagem do OSSRH, o ideal será especificá-lo em um repositório de gerenciamento de distribuição com o name
definido como OSSRH
. Se você implantá-lo no GitHub Packages, o ideal será especificá-lo em um repositório de gerenciamento de distribuição com o name
definido como GitHubPackages
.
Se o nome da sua organização for "octocat" e o nome do seu repositório for "hello-world", a configuração contida em build.gradle será semelhante 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 essa configuração, você pode criar um fluxo de trabalho que publica seu pacote no Maven Central Repository e no GitHub Packages executando o comando gradle publish
.
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
# O GitHub recomenda fixar ações em um SHA de commit.
# Para obter uma versão mais recente, você precisará atualizar o SHA.
# Você também pode fazer referência a uma marca ou branch, mas a ação pode ser alterada sem aviso.
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@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@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Este fluxo de trabalho realiza as etapas a seguir:
-
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 argumentopublish
para publicação no repositórioOSSRH
do Maven e no GitHub Packages. A variável de ambienteMAVEN_USERNAME
será definida com o conteúdo do segredoOSSRH_USERNAME
, e a variável de ambienteMAVEN_PASSWORD
será definida com o conteúdo do segredoOSSRH_TOKEN
. A variável de ambienteGITHUB_TOKEN
será definida com o conteúdo do segredoGITHUB_TOKEN
. A chavepermissions
especifica o acesso que o segredoGITHUB_TOKEN
permitirá.Para obter mais informações sobre como usar segredos no fluxo de trabalho, confira "Como criar e usar segredos criptografados".