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 Maven, confira "Como criar e testar o Java com o Maven".
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
do arquivo pom.xml criam um identificador exclusivo para o pacote que os registros usam para vincular seu pacote a um registro. Para obter mais informações, confira Guia para upload de artefatos no Central Repository na documentação do Apache Maven.
O arquivo pom.xml também contém a configuração dos repositórios de gerenciamento de distribuição nos quais o Maven implantará os pacotes. Cada repositório deve ter um nome e uma URL de implementação. A autenticação para esses repositórios pode ser configurada no arquivo .m2/settings.xml no diretório inicial do usuário que executa o Maven.
Use a ação setup-java
para configurar o repositório de implantação, bem como a autenticação para esse repositório. Para obter mais informações, confira setup-java
.
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".
Neste fluxo de trabalho, você pode usar a ação setup-java
. Essa ação instala a versão fornecida do JDK no PATH
, mas também configura um settings.xml do Maven para pacotes de publicação. Por padrão, o arquivo de configurações será definido como GitHub Packages. No entanto, ele pode ser configurado para implementar outro registro de pacote, como, por exemplo, o Repositório Central do Maven. Se você já tiver um repositório de gerenciamento de distribuição configurado no pom.xml, especifique essa id
durante a invocação da ação setup-java
.
Por exemplo, se você estiver fazendo a implantação no Maven Central Repository por meio do projeto de hospedagem do OSSRH, o pom.xml poderá especificar um repositório de gerenciamento de distribuição com a id
igual a 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>
Com essa configuração, você pode criar um fluxo de trabalho que publica seu pacote no Maven Central Repository especificando o gerenciamento do repositório id
para a ação setup-java
. Você também deverá fornecer variáveis de ambiente que contenham o nome de usuário e senha para fazer a autenticação no repositório.
Na etapa de implementação, você deverá definir as variáveis de ambiente para o nome de usuário com o qual deseja fazer a autenticação no repositório e para um segredo que você configurou com a senha ou token para autenticação. Para obter mais informações, confira "Como criar e usar segredos criptografados".
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 Maven Central Repository
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
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 fluxo de trabalho realiza as etapas a seguir:
-
Verifica uma cópia do repositório do projeto.
-
Configura o JDK do Java e o arquivo settings.xml do Maven para adicionar a autenticação ao repositório
ossrh
usando as variáveis de ambienteMAVEN_USERNAME
eMAVEN_PASSWORD
. -
Executa o comando
mvn --batch-mode deploy
a ser publicado no repositórioossrh
. 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".
Neste fluxo de trabalho, você pode usar a ação setup-java
. Essa ação instala a versão fornecida do JDK no PATH
e configura um settings.xml do Maven para publicar o pacote no GitHub Packages. O settings.xml gerado define a autenticação de um servidor com a id
github
, usando a variável de ambiente GITHUB_ACTOR
como o nome de usuário e a variável de ambiente GITHUB_TOKEN
como a senha. A variável de ambiente GITHUB_TOKEN
recebe o valor do segredo especial 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".
Para um projeto baseado no Maven, você pode usar essas configurações criando um repositório de distribuição no arquivo pom.xml com uma id
igual a github
que aponta para o ponto de extremidade do GitHub Packages.
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 pom.xml será semelhante ao exemplo abaixo.
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
Com essa configuração, você pode criar um fluxo de trabalho que publica seu pacote no GitHub Packages usando o settings.xml gerado automaticamente.
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: Publish package
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Este fluxo de trabalho realiza as etapas a seguir:
-
Verifica uma cópia do repositório do projeto.
-
Configura o JDK do Java e configura automaticamente o arquivo settings.xml do Maven para adicionar autenticação ao repositório
github
do Maven a fim de usar a variável de ambienteGITHUB_TOKEN
. -
Executa o comando
mvn --batch-mode deploy
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 concedido aoGITHUB_TOKEN
.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 usando a ação setup-java
para cada registro.
Verifique se o arquivo pom.xml inclui um repositório de gerenciamento de distribuição para 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 a id
definida como ossrh
e especificar o GitHub Packages em um repositório de gerenciamento de distribuição com a id
definida com 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@v2
- name: Set up Java for publishing to Maven Central Repository
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
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@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Publish to GitHub Packages
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Esse fluxo de trabalho chama a ação setup-java
duas vezes. Sempre que a ação setup-java
for executada, ela substituirá o arquivo settings.xml do Maven para publicação de pacotes. Para autenticação no repositório, o arquivo settings.xml referencia o repositório de gerenciamento de distribuição id
, bem como o nome de usuário e a senha.
Este fluxo de trabalho realiza as etapas a seguir:
-
Verifica uma cópia do repositório do projeto.
-
Chama
setup-java
pela primeira vez. Isso configura o arquivo settings.xml do Maven para o repositórioossrh
e define as opções de autenticação para variáveis de ambiente definidas na próxima etapa. -
Executa o comando
mvn --batch-mode deploy
a ser publicado no repositórioossrh
. 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
. -
Chama
setup-java
pela segunda vez. Isso configura automaticamente o arquivo settings.xml do Maven para o GitHub Packages. -
Executa o comando
mvn --batch-mode deploy
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 concedido aoGITHUB_TOKEN
.Para obter mais informações sobre como usar segredos no fluxo de trabalho, confira "Como criar e usar segredos criptografados".