Implantar nos Aplicativos de Contêiner do Azure com o GitHub Actions

Os Aplicativos de Contêiner do Azure permitem que você use GitHub Actions para publicar revisões em seu aplicativo de contêiner. À medida que as confirmações são enviadas por push a seu repositório do GitHub, um fluxo de trabalho é disparado e atualiza a imagem de contêiner no registro do contêiner. Os Aplicativos de Contêiner do Azure criam uma nova revisão com base na imagem de contêiner atualizada.

As alterações em um repositório de GitHub disparam uma ação para criar uma nova revisão.

O fluxo de trabalho do GitHub Actions é disparado por confirmações de uma ramificação específica de seu repositório. Ao criar o fluxo de trabalho, você decide qual ramificação dispara o fluxo de trabalho.

Este artigo mostra como criar um fluxo de trabalho totalmente personalizável. Para gerar um fluxo de trabalho do GitHub Actions inicial com a CLI do Azure, consulte Gerar fluxo de trabalho do GitHub Actions com a CLI do Azure.

Ação do GitHub dos Aplicativos de Contêiner do Azure

Para criar e implantar seu aplicativo de contêiner, adicione a ação azure/container-apps-deploy-action ao fluxo de trabalho GitHub Actions.

A ação oferece suporte aos seguintes cenários:

  • Compilar a partir de um Dockerfile e implantar em Aplicativos de Contêiner
  • Compilar a partir do código-fonte sem um Dockerfile e implantar nos Aplicativos de Contêiner. Os idiomas com suporte incluem .NET, Java, Node.js, PHP e Python
  • Implantar uma imagem de contêiner existente nos Aplicativos de Contêiner

Exemplos de uso

Veja aqui alguns cenários comuns para usar a ação. Para obter mais informações, consulte a página do Marketplace do GitHub da ação.

Compilar e implantar em Aplicativos de Contêiner

O snippet a seguir mostra como criar uma imagem de contêiner usando o código-fonte e implantá-la nos Aplicativos de Contêiner.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

A ação usa o Dockerfile em appSourcePath para criar a imagem de contêiner. Se nenhum Dockerfile for encontrado, a ação tentará compilar a imagem de contêiner do código-fonte em appSourcePath.

Implantar uma imagem de contêiner existente nos Aplicativos de Contêiner

O snippet a seguir mostra como implantar uma imagem de contêiner existente nos Aplicativos de Contêiner.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Importante

Se você estiver criando uma imagem de contêiner em uma etapa separada, use uma marca exclusiva, como o SHA de confirmação, em vez de uma marca estável como latest. Para obter mais informações, consulte Melhores práticas de marca de imagem.

Autenticar com um Registro de Contêiner do Azure

A ação Aplicativos de Contêiner do Azure precisa ser autenticada com o seu Registro de Contêiner do Azure para enviar por push a imagem do contêiner. O aplicativo de contêiner também precisa ser autenticado com o Registro de Contêiner do Azure para enviar por pull a imagem do contêiner.

Para enviar imagens por push, a ação é autenticada automaticamente com o registro de contêiner especificado em acrName usando das credenciais fornecidas para a ação azure/login.

Para efetuar pull de imagens, os Aplicativos de Contêiner do Azure usam a identidade gerenciada (recomendado) ou as credenciais de administrador para autenticar no Registro de Contêiner do Azure. Para usar a identidade gerenciada, o aplicativo de contêiner que a ação está implantando deve ser configurado para usar a identidade gerenciada. Para autenticar com as credenciais de administrador do registro, defina as entradas acrUsername e acrPassword da ação.

Configuração

Execute as etapas a seguir para configurar um fluxo de trabalho do GitHub Actions para implantar nos Aplicativos de Contêiner do Azure.

  • Criar um repositório do GitHub para o seu aplicativo
  • Criar um aplicativo de contêiner com a identidade gerenciada habilitada
  • Atribuir a função AcrPull do Registro de Contêiner do Azure à identidade gerenciada do aplicativo de contêiner
  • Configurar segredos no repositório do GitHub
  • Criar um fluxo de trabalho do GitHub Actions

Pré-requisitos

Requisito Instruções
Conta do Azure Se você não tiver, crie uma conta gratuita. Você precisa da permissão de Colaborador ou Proprietário na assinatura do Azure para continuar. Consulte Atribuir funções do Azure usando o portal do Azure para obter detalhes.
Conta do GitHub Inscreva-se gratuitamente.
CLI do Azure Instale a CLI do Azure.

Criar um repositório do GitHub e clonar o código-fonte

Antes de criar o fluxo de trabalho, o código-fonte do aplicativo deve estar em um repositório do GitHub.

  1. Entre no Azure com a CLI do Azure.

    az login
    
  2. Em seguida, instale a extensão mais recente dos Aplicativos de Contêiner do Azure para a CLI.

    az extension add --name containerapp --upgrade
    
  3. Se você não tiver seu próprio repositório do GitHub, crie um com base em um exemplo.

    1. Navegue até a seguinte localização para criar um repositório:
    2. Nomeie seu repositório my-container-app.
  4. Clone o repositório em seu computador local.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

Criar um aplicativo de contêiner com a identidade gerenciada habilitada

Crie seu aplicativo de contêiner usando o comando az containerapp up nas etapas a seguir. Esse comando cria recursos do Azure, compila a imagem de contêiner, armazena a imagem em um registro e implanta em um aplicativo de contêiner.

Depois de criar seu aplicativo, você pode adicionar uma identidade gerenciada a ele e atribuir à identidade a função AcrPull para permitir que a identidade extraia imagens do registro.

  1. Altere-o para a pasta src do repositório clonado.

    cd my-container-app
    cd src
    
  2. Crie recursos do Azure e implante um aplicativo de contêiner com o comando az containerapp up.

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. Na saída do comando, observe o nome do Registro de Contêiner do Azure.

  4. Obtenha a ID do recurso completa do registro de contêiner.

    az acr show --name <ACR_NAME> --query id --output tsv
    

    Substitua o <ACR_NAME> pelo nome do seu registro.

  5. Habilite a identidade gerenciada para o aplicativo de contêiner.

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned
    

    Observe a ID da entidade de segurança da identidade gerenciada na saída do comando.

  6. Atribua a função AcrPull para o Registro de Contêiner do Azure à identidade gerenciada do aplicativo de contêiner.

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    Substitua <MANAGED_IDENTITY_PRINCIPAL_ID> pela ID da entidade de segurança da identidade gerenciada e <ACR_RESOURCE_ID> pela ID do recurso do Registro de Contêiner do Azure.

  7. Configure o aplicativo de contêiner para usar a identidade gerenciada para efetuar pull de imagens do Registro de Contêiner do Azure.

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    Substitua <ACR_NAME> pelo nome de seu Registro de Contêiner do Azure.

Configurar segredos no repositório do GitHub

O fluxo de trabalho do GitHub requer um segredo chamado AZURE_CREDENTIALS para autenticar com o Azure. O segredo contém as credenciais de uma entidade de serviço com a função Colaborador no grupo de recursos que contém o aplicativo e o registro de contêiner.

  1. Crie uma entidade de serviço com a função Colaborador no grupo de recursos que contém o aplicativo e o registro de contêiner.

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    Substitua <SUBSCRIPTION_ID> pela ID da sua assinatura do Azure. Se o registro de contêiner estiver em um grupo de recursos diferente, especifique ambos os grupos de recursos no parâmetro --scopes.

  2. Copie a saída JSON do comando.

  3. No repositório do GitHub, navegue até Configurações>Segredos>Ações e selecione Novo segredo do repositório.

  4. Insira AZURE_CREDENTIALS como o nome e cole o conteúdo da saída JSON como o valor.

  5. Selecione Adicionar segredo.

Criar um fluxo de trabalho do GitHub Actions

  1. No repositório do GitHub, navegue até Ações e selecione Novo fluxo de trabalho.

  2. Escolha Configurar um fluxo de trabalho por conta própria.

  3. Cole o YAML a seguir no editor.

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    Substitua <ACR_NAME> pelo nome de seu Registro de Contêiner do Azure. Confirme se o nome da ramificação em branches e os valores de appSourcePath, containerAppName e resourceGroup correspondem aos valores dos seus recursos do repositório e do Azure.

  4. Confirme as alterações na ramificação principal.

Uma execução de fluxo de trabalho do GitHub Actions deve começar a compilar e implantar seu aplicativo de contêiner. Para verificar seu progresso, navegue até Ações.

Para implantar uma nova revisão do aplicativo, envie por push uma nova confirmação para a ramificação principal.