Exercício – criar ambientes efêmeros para solicitações de pull

Concluído

Alguns membros da equipe disseram que gostam de receber os comentários automatizados do linter do Bicep sobre as alterações de código antes de enviá-las a outros membros da equipe para revisão. Agora, você decidiu dar aos colaboradores e revisores a capacidade de implantar e revisar o código em um ambiente efêmero.

Neste exercício, você atualizará seu fluxo de trabalho de solicitação de pull para implantar um ambiente efêmero sempre que uma solicitação de pull for aberta e reimplantá-lo quando o código for enviado para o branch de solicitação de pull. Você também criará outro fluxo de trabalho para excluir automaticamente o ambiente quando a solicitação de pull for fechada. Você testará as alterações criando uma solicitação de pull para que seu site use uma imagem de contêiner do Docker.

Durante o processo, você vai:

  • Atualizar o fluxo de trabalho de solicitação de pull para implantar um ambiente efêmero.
  • Criar um fluxo de trabalho de exclusão da solicitação de pull para excluir o ambiente efêmero.
  • Criar uma solicitação de pull e observar o ambiente efêmero ser criado.
  • Aprovar a solicitação de pull e observar o ambiente efêmero ser excluído.

Atualizar o fluxo de trabalho de solicitação de pull para implantar um ambiente efêmero

Para começar, você precisa atualizar seu fluxo de trabalho pr-validation para criar um ambiente efêmero.

  1. No terminal do Visual Studio Code, faça check-out da ramificação principal do repositório.

    git checkout main
    
  2. Efetue pull da versão mais recente do código do GitHub, que inclui as alterações mescladas em um exercício anterior.

    git pull
    
  3. Abra o arquivo .github/workflows/pr-validation.yml no Visual Studio Code.

  4. Próximo à parte superior do arquivo, abaixo da configuração name, adicione uma configuração concurrency:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    

    Essa configuração impede que vários fluxos de trabalho para a mesma solicitação de pull sejam executados ao mesmo tempo, o que poderia causar resultados imprevisíveis quando você implantasse recursos no Azure.

  5. Próximo à parte superior do arquivo, na seção on que define o gatilho, defina a seção permissions:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
  6. Abaixo da seção permissions, adicione duas novas variáveis de ambiente:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
      resourceGroupLocation: westus3
    

    A variável de ambiente resourceGroupName especifica o nome do grupo de recursos que deve ser usado para cada ambiente efêmero. Cada grupo de recursos será nomeado como pr_123, em que 123 é o número exclusivo da solicitação de pull.

    A variável de ambiente resourceGroupLocation especifica que os ambientes efêmeros devem ser implantados na região Oeste dos EUA 3 do Azure.

  7. Defina um novo trabalho chamado deploy, abaixo do trabalho lint:

    jobs:
      lint:
        uses: ./.github/workflows/lint.yml
    
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - uses: azure/login@v1
            name: Sign in to Azure
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    

    Em primeiro lugar, o trabalho faz check-out de todo o código no GitHub e, em seguida, entra em seu ambiente do Azure.

    Dica

    Os arquivos YAML são sensíveis ao recuo. Independentemente de você digitar ou colar esse código, verifique se o recuo está correto. Posteriormente neste exercício, você verá a definição completa do fluxo de trabalho YAML para verificar se o arquivo é correspondente.

  8. Adicione uma etapa para criar o grupo de recursos com o nome definido na variável de ambiente:

    - uses: Azure/cli@v1
      name: Create resource group
      with:
        inlineScript: |
          az group create \
            --name ${{ env.resourceGroupName }} \
            --location ${{ env.resourceGroupLocation }}
    
  9. Após a etapa de criação do grupo de recursos, adicione uma etapa para implantar o arquivo do Bicep no grupo de recursos:

    - uses: azure/arm-deploy@v1
      id: deploy
      name: Deploy Bicep file
      with:
        failOnStdErr: false
        deploymentName: ${{ github.run_number }}
        resourceGroupName: ${{ env.resourceGroupName }}
        template: ./deploy/main.bicep
        parameters: >
          environmentType=Test
    
  10. Após a etapa de implantação, adicione uma etapa para exibir o endereço do site do ambiente efêmero no log do fluxo de trabalho:

    - name: Show website hostname
      run: |
        echo "Access the website at this address: https://${{ steps.deploy.outputs.appServiceAppHostName }}"
    
  11. Salve suas alterações.

  12. Verifique se o arquivo pr-validation.yml se parece com o seguinte:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
      resourceGroupLocation: westus3
    
    jobs:
      lint:
        uses: ./.github/workflows/lint.yml
    
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - uses: azure/login@v1
            name: Sign in to Azure
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          - uses: Azure/cli@v1
            name: Create resource group
            with:
              inlineScript: |
                az group create \
                  --name ${{ env.resourceGroupName }} \
                  --location ${{ env.resourceGroupLocation }}
          - uses: azure/arm-deploy@v1
            id: deploy
            name: Deploy Bicep file
            with:
              failOnStdErr: false
              deploymentName: ${{ github.run_number }}
              resourceGroupName: ${{ env.resourceGroupName }}
              template: ./deploy/main.bicep
              parameters: >
                environmentType=Test
          - name: Show website hostname
            run: |
              echo "Access the website at this address: https://${{ steps.deploy.outputs.appServiceAppHostName }}"
    

    Caso contrário, atualize-o para corresponder a este exemplo e salve-o.

  13. No terminal do Visual Studio Code, faça commit das alterações. Você ainda não efetuará push das alterações para o repositório remoto.

    git add .
    git commit -m "Update pull request validation workflow to deploy an ephemeral environment"
    

Adicionar um fluxo de trabalho de exclusão de solicitação de pull

Você criou um fluxo de trabalho que implanta automaticamente as alterações em cada solicitação de pull em um grupo de recursos efêmero. Agora, você configurará o segundo fluxo de trabalho para excluir os ambientes efêmeros quando eles não forem mais necessários.

  1. Crie um arquivo chamado pr-closed.yml na pasta .github/workflows.

    Captura de tela do Visual Studio Code que mostra o arquivo .YML de PR fechado na pasta de fluxos de trabalho.

  2. Na parte superior do arquivo, nomeie o fluxo de trabalho, configure a mesma chave de simultaneidade que você usou no fluxo de trabalho de validação da solicitação de pull e configure o fluxo de trabalho para ser executado sempre que uma solicitação de pull for fechada e permita que o fluxo de trabalho tenha uma token de acesso:

    name: pr-closed
    concurrency: ${{ github.event.number }}
    
    on:
      pull_request:
        types: [closed]
    
    permissions:
      id-token: write
      contents: read
    
  3. Abaixo do código que você acabou de inserir, defina uma variável de ambiente para o nome do grupo de recursos associado ao ambiente efêmero da solicitação de pull:

    env:
      resourceGroupName: pr_${{ github.event.number }}
    

    O nome do grupo de recursos é o mesmo que você usou para o fluxo de trabalho de validação da solicitação de pull.

  4. Abaixo do código que você adicionou, defina um novo trabalho chamado remove e configure-o para entrar no Azure:

    jobs:
      remove:
        runs-on: ubuntu-latest
        steps:
          - uses: azure/login@v1
            name: Sign in to Azure
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  5. No trabalho remove, defina uma etapa para excluir o grupo de recursos usando a CLI do Azure e confirme a exclusão usando o argumento --yes:

    - uses: Azure/cli@v1
      name: Delete resource group
      with:
        inlineScript: |
          az group delete \
            --name ${{ env.resourceGroupName }} \
            --yes
    
  6. Salve suas alterações.

  7. Verifique se o arquivo pr-closed.yml ficou conforme o seguinte:

    name: pr-closed
    concurrency: ${{ github.event.number }}
    
    on:
      pull_request:
        types: [closed]
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
    
    jobs:
      remove:
        runs-on: ubuntu-latest
        steps:
          - uses: azure/login@v1
            name: Sign in to Azure
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          - uses: Azure/cli@v1
            name: Delete resource group
            with:
              inlineScript: |
                az group delete \
                  --name ${{ env.resourceGroupName }} \
                  --yes
    

    Caso contrário, atualize-o para corresponder a este exemplo e salve-o.

  8. No terminal do Visual Studio Code, faça commit das alterações e efetue push para o repositório remoto:

    git add .
    git commit -m 'Add pull request closed workflow'
    git push
    

Atualizar o arquivo Bicep

Em seguida, você atualiza o arquivo do Bicep para usar uma imagem de contêiner do Docker para o aplicativo do site.

  1. No terminal do Visual Studio Code, crie um branch para suas alterações executando o seguinte comando:

    git checkout -b feature/container-app
    
  2. Abra o arquivo main.bicep na pasta deploy.

  3. Atualize o valor da variável appServiceAppLinuxFrameworkVersion:

    var appServiceAppLinuxFrameworkVersion = 'DOCKER|dockersamples/static-site:latest'
    
  4. Salve suas alterações.

  5. Faça commit e efetue push das alterações no repositório Git executando os seguintes comandos no terminal do Visual Studio Code:

    git add .
    git commit -m "Use container image for website"
    git push origin feature/container-app
    

Criar uma solicitação de pull

Você definiu fluxos de trabalho para criar e gerenciar ambientes efêmeros automaticamente em solicitações de pull. Agora, você criará outra solicitação de pull para as alterações do Bicep.

  1. No navegador, selecione Código e 3 branches.

    Captura de tela do GitHub que mostra a lista de branchs do repositório.

  2. Em Seus branches, ao lado de feature/container-app, selecione Nova solicitação de pull.

    Captura de tela do GitHub que mostra o link para criar uma solicitação de pull para o branch de aplicativo de contêiner de barra de recursos.

  3. Selecione Criar solicitação de pull.

Observe o ambiente efêmero ser criado

  1. Na página de detalhes da solicitação de pull, aguarde até que os itens de verificação de status sejam exibidos.

  2. Na lista, ao lado do trabalho de implantação, selecione Detalhes.

    Captura de tela da solicitação de pull do GitHub que mostra os itens de verificação de status. O link

    Aguarde até que a implantação seja concluída.

  3. Selecione Mostrar nome do host do site.

  4. Selecione a URL no log.

    Captura de tela do log de implantação do GitHub Actions. A URL do site na etapa Mostrar nome de host do site está realçada.

    O site carrega e exibe a mensagem, Olá, Docker!, que indica que o site está em execução na imagem de contêiner que foi definida na alteração da solicitação de pull.

    Captura de tela da home page do site após a conclusão da implantação.

  5. Opcionalmente, abra o portal do Azure e acesse o grupo de recursos do ambiente efêmero.

    Examine os recursos que foram implantados: a conta de armazenamento, o Serviço de aplicativo e o Plano do serviço de aplicativo.

Mesclar a solicitação de pull

Agora que testou a solicitação de pull, você pode mesclá-la na ramificação principal.

  1. Selecione Solicitações de pull e escolha a solicitação de pull Usar imagem de contêiner para o site.

    Captura de tela do GitHub mostrando a lista de solicitações de pull abertas no repositório.

    As verificações de status foram aprovadas.

    Captura de tela da solicitação de pull do GitHub mostrando que as duas verificações de status foram aprovadas.

  2. Selecione Mesclar solicitação de pull.

  3. Selecione Confirmar mesclagem.

Revisar a exclusão do grupo de recursos

  1. No navegador, selecione Ações e, em seguida, no painel esquerdo, selecione o fluxo de trabalho pr-closed.

    Você pode ver que o fluxo de trabalho foi invocado automaticamente porque uma solicitação de pull foi fechada.

    Captura de tela do painel Ações do GitHub mostrando que o fluxo de trabalho fechado do PR está em execução.

  2. Selecione o fluxo de trabalho para revisar o log.

    Pode levar alguns minutos para que o fluxo de trabalho termine de excluir o grupo de recursos no Azure.

    Importante

    Você não precisa aguardar a conclusão da execução do fluxo de trabalho. No entanto, lembre-se de abrir o portal do Azure posteriormente para verificar se o grupo de recursos do ambiente efêmero foi excluído com êxito e evitar que cobranças dos recursos do Azure.

Limpar os recursos

Após terminar o módulo, você poderá excluir os recursos que criou:

  • Segredos do GitHub

    1. No repositório GitHub, acesse Configurações>Segredos e variáveis>Ações.
    2. Selecione o botão Excluir para cada segredo do repositório e siga os prompts.
  • Repositório GitHub

    1. Acesse Configurações>Geral
    2. Role até a parte inferior da tela, selecione Excluir este repositórioe siga os prompts.
  • As credenciais federadas e a entidade de serviço do registro do Azure App.

    1. Na página inicial do portal, pesquise Microsoft Entra ID e selecione-o na lista de Serviços.
    2. Acesse Gerenciar>Registros de aplicativo.
    3. Em Aplicativos próprios, selecione toy-website-auto-review.
    4. Selecione Excluir e siga as solicitações.
    5. Selecione Aplicativos excluídos para excluir permanentemente o registro do aplicativo.

    Importante

    É possível ter nomes duplicados da entidade de serviço e de registro de aplicativo. É recomendável verificar a ID do aplicativo para garantir que você está excluindo o recurso correto.