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 realiza uma criação do Docker e, em seguida, publica imagens do Docker no Docker Hub ou no GitHub Package Registry. Com um único fluxo de trabalho, você pode publicar imagens em um único registro ou em vários registros.
Observação: Se você desejar fazer push para outro registro do Docker de terceiros, o exemplo na seção "Publicar imagens em GitHub Package Registry" poderá servir como um bom modelo.
Pré-requisitos
Recomendamos que você tenha um entendimento básico das opções de configuração do fluxo de trabalho e de como criar um arquivo do fluxo de trabalho. Para obter mais informações, consulte "Aprenda GitHub Actions".
Você também pode achar útil ter um entendimento básico do seguinte:
- "Segredos criptografados"
- "Autenticação em um fluxo de trabalho"
- "Trabalhando com o registro Docker"
Sobre a configuração da imagem
Este guia pressupõe que você tem uma definição completa para uma imagem Docker armazenada em um repositório GitHub. Por exemplo, seu repositório deve conter um arquivo Docker e quaisquer outros arquivos necessários para executar uma criação do Docker para criar uma imagem.
Neste guia, usaremos a ação build-push-action
do Docker para criar a imagem do Docker e enviá-la para um ou mais registros do Docker. Para obter mais informações, consulte build-push-action
.
Note: GitHub Actions on your GitHub Enterprise Server instance may have limited access to actions on GitHub.com or GitHub Marketplace. For more information, see "Managing access to actions from GitHub.com" and contact your GitHub Enterprise site administrator.
Publicar imagens no Docker Hub
Cada vez que criar uma nova versão no GitHub Enterprise Server, você poderá acionar um fluxo de trabalho para publicar a sua imagem. O fluxo de trabalho no exemplo abaixo é executado quando o evento release
aciona com o tipo de atividade created
. Para obter mais informações sobre o evento da versão
, consulte "Eventos que acionam fluxos de trabalho".
No exemplo de fluxo de trabalho, nós usamos as ações de login do Docker login-action
e build-push-action
para construir a imagem do Docker e, se a construção for bem-sucedida, faça push da imagem construída para o Docker Hub.
Para fazer push para o Docker Hub, você deverá ter uma conta Docker Hub e ter criado um repositório Docker Hub. Para obter mais informações, consulte "Fazer push de uma imagem de contêiner do Docker para o Docker Hub" na documentação do Docker.
As opçõeslogin-action` obrigatórias para o Docker Hub são:
nome de usuário` e `senha`: Este é o seu nome de usuário e senha do Docker Hub. Recomendamos armazenar seu nome de usuário e senha do Docker Hub como segredos para que não estejam expostos no seu arquivo de fluxo de trabalho. Para obter mais informações, consulte "[Criando e usando segredos encriptados](/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)".
A opção de metadata-action
necessária para o Docker Hub é:
imagens
: O namespace e o nome da imagem Docker que você está construindo/fazendo push do Docker Hub.
As opções build-push-action
necessárias para o Docker Hub são:
tags
: A tag de sua nova imagem no formato DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION
. Você pode definir uma única tag, conforme mostrado abaixo, ou especificar várias tags em uma lista.
push
: Se definido como verdadeiro
, a imagem será enviada por push para o registro, se este for construído com sucesso.
YAML # 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 Docker image
on:
release:
types: [published]
jobs:
push_to_registry:
name: Push Docker image to Docker Hub
runs-on: [self-hosted]
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: my-docker-hub-namespace/my-docker-hub-repository
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
O fluxo de trabalho acima verifica o repositório GitHub, usa login-action
para efetuar login no registro e, em seguida, usa a ação build-push-action
para: criar uma imagem Docker com base no arquivo Docker do seu repositório
; faça push da imagem do Docker Hub e aplique uma tag à imagem.
Publicar imagens em GitHub Package Registry
Observação: Container registry está atualmente em beta para GitHub Enterprise Server e sujeito a alterações.
Both GitHub Package Registry and subdomain isolation must be enabled to use Container registry. Para obter mais informações, consulte "Trabalhando com o registro do contêiner."
Cada vez que criar uma nova versão no GitHub Enterprise Server, você poderá acionar um fluxo de trabalho para publicar a sua imagem. O fluxo de trabalho no exemplo abaixo é executado quando o evento release
aciona com o tipo de atividade created
. Para obter mais informações sobre o evento da versão
, consulte "Eventos que acionam fluxos de trabalho".
No exemplo abaixo, usamos a login-action do Docker
e ações de build-push-action
para construir a imagem Docker e, se a criação for bem-sucedida, faça push da imagem criada para GitHub Package Registry.
As opções de login-action
de login necessárias para GitHub Package Registry são:
registro
: Deve ser definido como containers.HOSTNAME
.
nome de usuário
: Você pode usar o contexto ${{ github.actor }}
para usar automaticamente o nome de usuário que acionou a execução do fluxo de trabalho. Para obter mais informações, consulte "Contextos".
senha
: Você pode usar o segredo GITHUB_TOKEN
gerado automaticamente para a senha. Para obter mais informações, consulte "Permissões para o GITHUB_TOKEN".
As opções de build-push-action
necessárias para GitHub Package Registry são:
-
push
: Se definido como verdadeiro
, a imagem será enviada por push para o registo se for criada com êxito.
-
tags
: Deve ser definido no formato containers.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION
.
Por exemplo, para uma imagem chamada octo-image
armazenada em GitHub Enterprise Server em https://HOSTNAME/octo-org/octo-repo
, a opção de tags
deve ser definida como containers.HOSTNAME/octo-org/octo-repo/octo-image:latest
. Você pode definir uma única tag, conforme mostrado abaixo, ou especificar várias tags em uma lista.
YAML # 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: Create and publish a Docker image
on:
push:
branches: ['release']
env:
REGISTRY: containers.HOSTNAME
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: [self-hosted]
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Log in to the Container registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
O fluxo de trabalho acima é acionado por um push para o branch da "versão". Ele verifica o repositório GitHub e usa login-action
para fazer login no Container registry. Em seguida, extrai etiquetas e tags para a imagem do Docker. Finalmente, ele usa a ação de build-push-action
para criar a imagem e publicá-la no Container registry.
Publicar imagens no Docker Hub e GitHub Package Registry
Observação: Container registry está atualmente em beta para GitHub Enterprise Server e sujeito a alterações.
Both GitHub Package Registry and subdomain isolation must be enabled to use Container registry. Para obter mais informações, consulte "Trabalhando com o registro do contêiner."
Em um único fluxo de trabalho, você pode publicar sua imagem Docker em vários registros usando as ações de login-action
e build-push-action
para cada registro.
O fluxo de trabalho a seguir usa os passos das seções anteriores ("Publicar imagens no Docker Hube "Publicar imagens para GitHub Package Registry") para criar um único fluxo de trabalho que faz push em ambos os registros.
YAML # 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 Docker image
on:
release:
types: [published]
jobs:
push_to_registries:
name: Push Docker image to multiple registries
runs-on: [self-hosted]
permissions:
packages: write
contents: read
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Log in to the Container registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: containers.HOSTNAME
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: |
my-docker-hub-namespace/my-docker-hub-repository
containers.HOSTNAME/${{ github.repository }}
- name: Build and push Docker images
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
O fluxo de trabalho acima faz checkout do repositório GitHub Enterprise Server usa o login-action
duas vezes para fazer login em ambos os registros e gerar etiquetas com a ação metadata-action
. Em seguida, a ação build-push-action
cria e faz push da imagem do Docker para o Docker Hub e, posteriormente, o Container registry.