Compartilhar via


Configurar uma ação do GitHub para criar uma instância de contêiner

O GitHub Actions é um pacote de recursos do GitHub usado para automatizar seus fluxos de trabalho de desenvolvimento de software no mesmo local em que você armazena o código e colabora com outras pessoas em solicitações de pull e problemas.

Use a ação do GitHub Implantar nas Instâncias de Contêiner do Azure para automatizar a implantação de um só contêiner nas Instâncias de Contêiner do Azure. A ação permite definir propriedades para uma instância de contêiner semelhante àquelas no comando az container create.

Este artigo mostra como configurar um fluxo de trabalho em um repositório GitHub que executa as seguintes ações:

  • Criar uma imagem com base em um Dockerfile
  • Efetuar push da imagem para um registro de contêiner do Azure
  • Implantar a imagem de contêiner em uma instância de contêiner do Azure

Este artigo mostra duas maneiras de configurar o fluxo de trabalho:

Importante

Atualmente, o GitHub Actions para Instâncias de Contêiner do Azure está em versão prévia. As versões prévias são disponibilizadas com a condição de que você concorde com os termos de uso complementares. Alguns aspectos desse recurso podem alterar antes da GA (disponibilidade geral).

Pré-requisitos

  • Conta do GitHub: crie uma conta no https://github.com caso ainda não tenha uma.
  • CLI do Azure: use o Azure Cloud Shell ou uma instalação local da CLI do Azure para concluir as etapas da CLI do Azure. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.
  • Registro de contêiner do Azure: caso não tenha um, crie um registro de contêiner do Azure na camada Básica usando a CLI do Azure, o portal do Azure ou outros métodos. Anote o grupo de recursos usado para a implantação, que é usado para o fluxo de trabalho do GitHub.

Configurar o repositório

  • Para os exemplos deste artigo, use o GitHub para criar um fork do seguinte repositório: https://github.com/Azure-Samples/acr-build-helloworld-node

    Esse repositório contém um Dockerfile e arquivos de origem para criar uma imagem de contêiner de um aplicativo Web pequeno.

    Captura de tela do botão Fork (realçado) no GitHub

  • Verifique se as Ações estão habilitadas para o repositório. Procure o repositório com fork e selecione Configurações>Ações. Em Permissões de ações, verifique se Permitir todas as ações está selecionado.

Configurar o fluxo de trabalho do GitHub

Criar credenciais para autenticação do Azure

No fluxo de trabalho do GitHub, você precisará fornecer as credenciais do Azure para se autenticar na CLI do Azure. O exemplo a seguir cria uma entidade de serviço com a função Colaborador com o escopo definido para o grupo de recursos do registro de contêiner.

Primeiro, obtenha a ID do recurso do grupo de recursos. Substitua o nome do grupo no seguinte comando az group show:

groupId=$(az group show \
  --name <resource-group-name> \
  --query id --output tsv)

Use az ad sp create-for-rbac para criar a entidade de serviço:

az ad sp create-for-rbac \
  --scope $groupId \
  --role Contributor \
  --sdk-auth

A saída é semelhante a:

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Salve a saída JSON porque ela é usada em uma etapa posterior. Além disso, anote a clientId, que você precisará atualizar a entidade de serviço na próxima seção.

Atualização da autenticação do registro

Atualize as credenciais da entidade de serviço do Azure para permitir o acesso de push e pull ao registro de contêiner. Essa etapa permite que o fluxo de trabalho do GitHub use a entidade de serviço para se autenticar no registro de contêiner e enviar por push e efetuar pull de uma imagem do Docker.

Obtenha a ID do recurso do registro de contêiner. Substitua o nome do registro pelo seguinte comando az acr show:

registryId=$(az acr show \
  --name <registry-name> \
  --resource-group <resource-group-name> \
  --query id --output tsv)

Use az role assignment create para atribuir a função AcrPush, que fornece acesso de push e pull ao registro. Substitua a ID do cliente da entidade de serviço:

az role assignment create \
  --assignee <ClientId> \
  --scope $registryId \
  --role AcrPush

Salvar as credenciais no repositório GitHub

  1. Na interface do usuário do GitHub, navegue até o repositório bifurcado e selecione Segurança > Segredos e variáveis > Ações.

  2. Selecione Novo segredo de repositório para adicionar os seguintes segredos:

Segredo Valor
AZURE_CREDENTIALS A saída JSON inteira da etapa de criação da entidade de serviço
REGISTRY_LOGIN_SERVER O nome do servidor de logon do registro (em letras minúsculas). Exemplo: myregistry.azurecr.io
REGISTRY_USERNAME A clientId da saída JSON da criação da entidade de serviço
REGISTRY_PASSWORD O clientSecret da saída JSON da criação da entidade de serviço
RESOURCE_GROUP O nome do grupo de recursos usado para o escopo da entidade de serviço

Criar arquivo de fluxo de trabalho

  1. Na interface do usuário do GitHub, selecione Ações.
  2. Selecione Configurar fluxo de trabalho por conta própria.
  3. Em Editar novo arquivo, cole o conteúdo do YAML a seguir para substituir o código de exemplo. Aceite o nome de arquivo padrão main.yml ou forneça um nome de arquivo escolhido.
  4. Selecione Iniciar commit, opcionalmente, forneça descrições curtas e estendidas do commit e selecione Fazer commit do novo arquivo.
on: [push]
name: Linux_Container_Workflow

jobs:
    build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout GitHub Action'
          uses: actions/checkout@main
          
        - name: 'Login via Azure CLI'
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
        
        - name: 'Build and push image'
          uses: azure/docker-login@v1
          with:
            login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            username: ${{ secrets.REGISTRY_USERNAME }}
            password: ${{ secrets.REGISTRY_PASSWORD }}
        - run: |
            docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}

        - name: 'Deploy to Azure Container Instances'
          uses: 'azure/aci-deploy@v1'
          with:
            resource-group: ${{ secrets.RESOURCE_GROUP }}
            dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
            image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            registry-username: ${{ secrets.REGISTRY_USERNAME }}
            registry-password: ${{ secrets.REGISTRY_PASSWORD }}
            name: aci-sampleapp
            location: 'west us'

Validar o fluxo de trabalho

Depois que você fizer commit do arquivo de fluxo de trabalho, o fluxo de trabalho será disparado. Para examinar o progresso do fluxo de trabalho, procure Ações>Fluxos de trabalho.

Exibir o progresso do fluxo de trabalho

Confira Como exibir o histórico de execuções do fluxo de trabalho para obter informações sobre como ver o status e os resultados de cada etapa do fluxo de trabalho. Se o fluxo de trabalho não for concluído, confira Como exibir logs para diagnosticar falhas.

Quando o fluxo de trabalho for concluído com êxito, obtenha informações sobre a instância de contêiner chamada aci-sampleapp executando o comando az container show. Substitua o nome do seu grupo de recursos:

az container show \
  --resource-group <resource-group-name> \
  --name aci-sampleapp \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

A saída é semelhante a:

FQDN                                   ProvisioningState
---------------------------------      -------------------
aci-action01.westus.azurecontainer.io  Succeeded

Depois que a instância for provisionada, procure o FQDN do contêiner no navegador para ver o aplicativo Web em execução.

Como executar o aplicativo Web no navegador

Usar a extensão Implantar do Azure

Como alternativa, use a extensão Implantar no Azure da CLI do Azure para configurar o fluxo de trabalho. O comando az container app up na extensão usa parâmetros de entrada para configurar um fluxo de trabalho para implantação nas Instâncias de Contêiner do Azure.

O fluxo de trabalho criado pela CLI do Azure é semelhante ao fluxo de trabalho que você pode criar manualmente usando o GitHub.

Pré-requisitos adicionais

Além dos pré-requisitos e da configuração do repositório para esse cenário, você precisará instalar a extensão Implantar no Azure para a CLI do Azure.

Execute o comando az extension add para instalar a extensão:

az extension add \
  --name deploy-to-azure

Para obter informações sobre como encontrar, instalar e gerenciar extensões, confira Usar extensões com a CLI do Azure.

Execute az container app up

Para executar o comando az container app up, forneça, no mínimo:

  • O nome do registro de contêiner do Azure, por exemplo, myregistry
  • A URL do repositório GitHub, por exemplo, https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

Comando de exemplo:

az container app up \
  --acr myregistry \
  --repository https://github.com/myID/acr-build-helloworld-node

Progresso do comando

  • Quando solicitado, forneça suas credenciais do GitHub ou forneça um PAT (token de acesso pessoal) do GitHub que tenha os escopos de usuário e repositório para se autenticar com a sua conta do GitHub. Se você fornecer credenciais do GitHub, o comando criará um PAT para você. Siga os avisos adicionais para configurar o fluxo de trabalho.

  • O comando cria segredos do repositório para o fluxo de trabalho:

    • Credenciais da entidade de serviço para a CLI do Azure
    • Credenciais para acessar o registro de contêiner do Azure
  • Depois que o comando fizer commit do arquivo de fluxo de trabalho no repositório, o fluxo de trabalho será disparado.

A saída é semelhante a:

[...]
Checking in file github/workflows/main.yml in the GitHub repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at:  http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/

Para ver o status do fluxo de trabalho e os resultados de cada etapa na interface do usuário do GitHub, confira Como exibir o histórico de execuções do fluxo de trabalho.

Validar o fluxo de trabalho

O fluxo de trabalho implanta uma instância de contêiner do Azure com o nome base do repositório GitHub, neste caso, acr-build-helloworld-node. Quando o fluxo de trabalho for concluído com êxito, obtenha informações sobre a instância de contêiner chamada acr-build-helloworld-node executando o comando az container show. Substitua o nome do seu grupo de recursos:

az container show \
  --resource-group <resource-group-name> \
  --name acr-build-helloworld-node \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

A saída é semelhante a:

FQDN                                                   ProvisioningState
---------------------------------                      -------------------
acr-build-helloworld-node.westus.azurecontainer.io     Succeeded

Depois que a instância for provisionada, procure o FQDN do contêiner no navegador para ver o aplicativo Web em execução.

Limpar os recursos

Pare a instância de contêiner com o comando az container delete:

az container delete \
  --name <instance-name>
  --resource-group <resource-group-name>

Para excluir o grupo de recursos e todos os recursos dele, execute o comando az group delete:

az group delete \
  --name <resource-group-name>

Próximas etapas

Navegue no GitHub Marketplace para obter mais ações para automatizar seu fluxo de trabalho de desenvolvimento