Configurar uma ação do GitHub para criar uma instância de contêiner
O GitHub Actions é um conjunto de recursos no GitHub para automatizar seus fluxos de trabalho de desenvolvimento de software no mesmo lugar em que você armazena código e colabora em solicitações pull e problemas.
Use as Ações do GitHub Implantar em Instâncias de Contêiner do Azure para automatizar a implantação de um único contêiner em Instâncias de Contêiner do Azure. A ação permite definir propriedades para uma instância de contêiner semelhante às do 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 a partir de um Dockerfile
- Enviar a imagem por push 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:
- Configurar fluxo de trabalho do GitHub - Crie um fluxo de trabalho em um repositório do GitHub usando a ação Implantar em Instâncias de Contêiner do Azure e outras ações.
- Usar extensão CLI - Use o
az container app up
comando na extensão Implantar no Azure na CLI do Azure. Este comando simplifica a criação do fluxo de trabalho do GitHub e as etapas de implantação.
Importante
As Ações do GitHub para Instâncias de Contêiner do Azure estão atualmente em visualização. As pré-visualizações são disponibilizadas a si na condição de concordar com os termos suplementares de utilização. Alguns aspetos desta funcionalidade podem alterar-se após a disponibilidade geral (GA).
Pré-requisitos
- Conta do GitHub - Crie uma conta se https://github.com ainda não tiver uma.
- CLI do Azure - Você pode usar o Azure Cloud Shell ou uma instalação local da CLI do Azure para concluir as etapas da CLI do Azure. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
- Registro de contêiner do Azure - Se você não tiver 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 repositório
Para obter os exemplos neste artigo, use o GitHub para bifurcar o seguinte repositório: https://github.com/Azure-Samples/acr-build-helloworld-node
Este repositório contém um Dockerfile e arquivos de origem para criar uma imagem de contêiner de um pequeno aplicativo Web.
Verifique se o recurso Ações está habilitado para seu repositório. Navegue até o repositório bifurcado e selecione Ações de configurações>. Em Permissões de ações, verifique se a opção Permitir todas as ações está selecionada.
Configurar fluxo de trabalho do GitHub
Criar credenciais para autenticação do Azure
No fluxo de trabalho do GitHub, você precisa fornecer credenciais do Azure para autenticar na CLI do Azure. O exemplo a seguir cria uma entidade de serviço com a função de Colaborador com escopo para o grupo de recursos do seu registro de contêiner.
Primeiro, obtenha a ID do recurso do seu grupo de recursos. Substitua o nome do seu 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, tome nota do , que você precisa atualizar a entidade de clientId
serviço na próxima seção.
Atualização para autenticação do Registro
Atualize as credenciais da entidade de serviço do Azure para permitir acesso por push e pull ao seu registro de contêiner. Esta etapa permite que o fluxo de trabalho do GitHub use a entidade de serviço para autenticar com seu registro de contêiner e para enviar e extrair uma imagem do Docker.
Obtenha a ID do recurso do seu registro de contêiner. Substitua o nome do seu registro no 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 dá acesso 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 credenciais no repositório GitHub
Na interface do usuário do GitHub, navegue até o repositório bifurcado e selecione Segredos de segurança > e ações de variáveis>.
Selecione Novo segredo do repositório para adicionar os seguintes segredos:
Segredo | Value |
---|---|
AZURE_CREDENTIALS |
Toda a saída JSON da etapa de criação da entidade de serviço |
REGISTRY_LOGIN_SERVER |
O nome do servidor de login do seu registro (todas minúsculas). Exemplo: myregistry.azurecr.io |
REGISTRY_USERNAME |
A clientId saída JSON da criação da entidade de serviço |
REGISTRY_PASSWORD |
A clientSecret saída JSON da criação da entidade de serviço |
RESOURCE_GROUP |
O nome do grupo de recursos usado para definir o escopo da entidade de serviço |
Criar arquivo de fluxo de trabalho
- Na interface do usuário do GitHub, selecione Ações.
- Selecione configurar um fluxo de trabalho você mesmo.
- Em Editar novo arquivo, cole o seguinte conteúdo YAML para substituir o código de exemplo. Aceite o nome de arquivo
main.yml
padrão ou forneça um nome de arquivo escolhido. - Selecione Iniciar confirmação, opcionalmente forneça descrições curtas e estendidas da confirmação e selecione Confirmar 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 fluxo de trabalho
Depois de confirmar o arquivo de fluxo de trabalho, o fluxo de trabalho é acionado. Para analisar o progresso do fluxo de trabalho, navegue até Fluxos de trabalho de ações>.
Consulte Exibindo o histórico de execução do fluxo de trabalho para obter informações sobre como exibir o status e os resultados de cada etapa do fluxo de trabalho. Se o fluxo de trabalho não for concluído, consulte Exibindo 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, navegue até o FQDN do contêiner em seu navegador para exibir o aplicativo Web em execução.
Usar a extensão Implantar no Azure
Como alternativa, use a extensão Implantar no Azure na CLI do Azure para configurar o fluxo de trabalho. O az container app up
comando na extensão obtém parâmetros de entrada de você para configurar um fluxo de trabalho a ser implantado em 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 de repositório para este cenário, você precisa 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 localizar, instalar e gerenciar extensões, consulte Usar extensões com a CLI do Azure.
Executar az container app up
Para executar o comando az container app up , forneça no mínimo:
- O nome do seu registro de contêiner do Azure, por exemplo, myregistry
- O URL para o seu repositório GitHub, por exemplo,
https://github.com/<your-GitHub-Id>/acr-build-helloworld-node
Exemplo de comando:
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 token de acesso pessoal (PAT) do GitHub que tenha escopos de repositório e usuário para autenticar com sua conta do GitHub. Se você fornecer credenciais do GitHub, o comando criará uma PAT para você. Siga prompts adicionais para configurar o fluxo de trabalho.
O comando cria segredos de 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 confirma o arquivo de fluxo de trabalho no seu repositório, o fluxo de trabalho é acionado.
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 exibir o status do fluxo de trabalho e os resultados de cada etapa na interface do usuário do GitHub, consulte Exibindo o histórico de execução do fluxo de trabalho.
Validar fluxo de trabalho
O fluxo de trabalho implanta uma instância de contêiner do Azure com o nome base do seu 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, navegue até o FQDN do contêiner em seu navegador para exibir o aplicativo Web em execução.
Clean up resources (Limpar recursos)
Pare a instância de contentor 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 nele, execute o comando az group delete :
az group delete \
--name <resource-group-name>
Próximos passos
Navegue no GitHub Marketplace para obter mais ações para automatizar seu fluxo de trabalho de desenvolvimento