Partilhar via


Desdobrar para Azure Container Apps com o GitHub Actions

Os Aplicativos de Contêiner do Azure permitem que você use as Ações do GitHub para publicar revisões em seu aplicativo de contêiner. À medida que as confirmações são enviadas por push para o repositório GitHub, um fluxo de trabalho é acionado que atualiza a imagem do 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.

Alterações em um repositório do GitHub acionam uma ação para criar uma nova revisão.

O fluxo de trabalho do GitHub Actions é acionado quando ocorre um commit numa ramificação específica no seu repositório. Ao criar o fluxo de trabalho, você decide qual ramificação aciona o fluxo de trabalho.

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

Ação GitHub das Aplicações de Contentores do Azure

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

A ação suporta os seguintes cenários:

  • Crie a partir de um Dockerfile e implante em aplicativos de contêiner
  • Crie a partir do código-fonte sem um Dockerfile e implante em aplicativos de contêiner. As linguagens suportadas incluem .NET, Java, Node.js, PHP e Python
  • Implantar uma imagem de contêiner existente em Aplicativos de Contêiner

Exemplos de utilização

Aqui estão alguns cenários típicos para utilizar a ação. Para obter mais informações, consulte a página da ação do GitHub Marketplace.

Criar e implantar em Container Apps

O trecho a seguir mostra como criar uma imagem de contêiner a partir do código-fonte e implantá-la em 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 do contentor. Se nenhum Dockerfile for encontrado, a ação tentará criar a imagem do contêiner a partir do código-fonte no appSourcePath.

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

O trecho a seguir mostra como implantar uma imagem de contêiner existente em 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, certifique-se de usar uma tag exclusiva, como a commit SHA, em vez de uma tag estável como latest. Para obter mais informações, consulte Práticas recomendadas de tags de imagem.

Autenticar com o Registro de Contêiner do Azure

A ação Aplicações de Contentores do Azure precisa autenticar-se com o seu Registo de Contentores do Azure para fazer o push da imagem do contentor. O aplicativo de contêiner também precisa se autenticar com seu Registro de Contêiner do Azure para extrair a imagem do contêiner.

Para fazer push de imagens, a ação autentica-se automaticamente com o registo de contêiner especificado em acrName usando as credenciais fornecidas para a ação azure/login.

Para extrair imagens, os Aplicativos de Contêiner do Azure usam identidade gerenciada (recomendada) ou credenciais de administrador para autenticar com o 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 registo, defina os inputs acrUsername e acrPassword das ações.

Implantar imagens de registos não ACR

Além do Azure Container Registry (ACR), o Azure Container Apps dá suporte a imagens de contêiner hospedadas em outros registros, como o GitHub Container Registry (GHCR). Esta seção mostra como implantar imagens de contêiner do GHCR, incluindo imagens públicas e privadas.

Observação

Ao usar um registro não-ACR, como o GHCR, você deve configurar seu aplicativo de contêiner para autenticar com o registro, mesmo que a imagem seja pública.

Implantar uma imagem pública do GHCR

Se a imagem do contêiner for pública, você poderá implantá-la sem especificar as credenciais de autenticação. O exemplo a seguir mostra como implantar uma imagem pública do GHCR usando a ação deploy.

Antes de executar esse comando, substitua <YOUR-GITHUB-USERNAME> pelo seu nome de usuário real do GitHub.

- name: Deploy public GHCR image to Container App
  uses: azure/container-apps-deploy-action@v1
  with:
    containerAppName: my-container-app
    resourceGroup: my-container-app-rg
    imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:latest
    registryServer: ghcr.io

Antes de implantar, configure seu aplicativo de contêiner para extrair do GHCR:

az containerapp registry set \
  --name my-container-app \
  --resource-group my-container-app-rg \
  --server ghcr.io

Implantar uma imagem privada do GHCR

Se a imagem for privada, você deverá fornecer credenciais de autenticação no fluxo de trabalho de Ações do GitHub. Use um token de acesso pessoal (PAT) do GitHub com o escopo read:packages. Armazene o token e o nome de usuário como segredos em seu repositório GitHub.

- name: Deploy private GHCR image to Container App
  uses: azure/container-apps-deploy-action@v1
  with:
    containerAppName: my-container-app
    resourceGroup: my-container-app-rg
    imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:${{ github.sha }}
    registryServer: ghcr.io
    registryUsername: ${{ secrets.GHCR_USERNAME }}
    registryPassword: ${{ secrets.GHCR_TOKEN }}

Configure o aplicativo de contêiner para extrair a imagem usando suas credenciais GHCR:

az containerapp registry set \
  --name my-container-app \
  --resource-group my-container-app-rg \
  --server ghcr.io \
  --username <GHCR_USERNAME> \
  --password <GHCR_TOKEN>

Substitua <GHCR_USERNAME> e <GHCR_TOKEN> por seu nome de usuário e token de acesso pessoal do GitHub, respectivamente.

Observação

Use uma tag exclusiva como o commit SHA do Git (${{ github.sha }}) em vez de uma tag genérica como mais recente. Isso ajuda a evitar problemas de cache e garante que novas revisões sejam criadas de forma confiável.

Configuração

Você executa as etapas a seguir para configurar um fluxo de trabalho de Ações do GitHub para implantar nos Aplicativos de Contêiner do Azure.

  • Criar um repositório GitHub para seu aplicativo
  • Criar um aplicativo de contêiner com identidade gerenciada habilitada
  • Atribuir a AcrPull função do Registo de Contêiner do Azure à identidade gerida da aplicação de contêiner
  • Configurar segredos em seu repositório GitHub
  • Criar um fluxo de trabalho de Ações do GitHub

Pré-requisitos

Requisito Instruções
Conta do Azure Se você não tiver uma, crie uma conta gratuitamente. 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 GitHub Registe-se gratuitamente.
CLI do Azure Instale a CLI do Azure.

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

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

  1. Inicie sessão no Azure com o Azure CLI.

    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 GitHub, crie um a partir de uma amostra.

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

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

Criar um aplicativo de contêiner com identidade gerenciada habilitada

Crie seu aplicativo de contêiner usando o az containerapp up comando nas etapas a seguir. Este comando cria recursos do Azure, cria 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 ao aplicativo e atribuir a identidade à AcrPull função para permitir que a identidade extraia imagens do registro.

  1. Mude para a pasta src do repositório clonado:

    cd my-container-app
    cd src
    
  2. Crie recursos Azure e implemente uma aplicação container usando o az containerapp up comando:

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    

    Sugestão

    Se a compilação falhar devido a um erro no repositório Debian, certifique-se de que está a usar a versão mais recente do Azure CLI e a extensão containerapp ao executar az extension add --name containerapp --upgrade. Em alternativa, adiciona um Dockerfile ao teu projeto para mais controlo sobre a build.

  3. Na saída do comando, note o nome do registo de contentores Azure.

  4. Obtenha o ID completo do recurso do registo de contentores:

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

    Substitua <ACR_NAME> pelo nome do seu registo.

  5. Ativar a identidade gerida para a aplicação contentor:

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

    Observe a ID principal da identidade gerenciada na saída do comando.

  6. Atribuir a AcrPull função do Registo de Contentores à identidade gerida da aplicação de contentores:

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

    Substitua <MANAGED_IDENTITY_PRINCIPAL_ID> pelo ID principal da identidade gerida e <ACR_RESOURCE_ID> pelo ID de recurso do Registo de Contentores.

  7. Configure a aplicação de contentores para usar a identidade gerida e extrair imagens do registo de contentores:

    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 do seu registo de contentores Azure.

Configurar segredos em seu repositório GitHub

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

  1. Crie um principal de serviço com o papel de Colaborador no grupo de recursos que contém o aplicativo de contêiner 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 --scopes grupos de recursos no parâmetro.

  2. Copie a saída JSON do comando.

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

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

  5. Selecione Add secret (Adicionar segredo).

Criar um fluxo de trabalho de Ações do GitHub

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

  2. Selecione Configurar um fluxo de trabalho você mesmo.

  3. Cole o seguinte YAML 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 do seu Registro de Contêiner do Azure. Confirme se o nome da ramificação está abaixo branches e os valores de appSourcePath, containerAppNamee resourceGroup correspondem aos valores do repositório e dos recursos do Azure.

  4. Submeta as alterações para a ramificação principal.

Um fluxo de trabalho de Ações do GitHub deve começar a criar e implantar seu aplicativo de contêiner. Para verificar seu progresso, navegue até Ações.

Para implantar uma nova revisão da sua aplicação, faça push de um novo commit para a ramificação principal.