Exercício – criar ambientes efêmeros para solicitações de pull
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.
No terminal do Visual Studio Code, faça check-out da ramificação principal do repositório.
git checkout main
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
Abra o arquivo .github/workflows/pr-validation.yml no Visual Studio Code.
Próximo à parte superior do arquivo, abaixo da configuração
name
, adicione uma configuraçãoconcurrency
: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.
Próximo à parte superior do arquivo, na seção
on
que define o gatilho, defina a seçãopermissions
:name: pr-validation concurrency: ${{ github.event.number }} on: pull_request permissions: id-token: write contents: read
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 comopr_123
, em que123
é 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.Defina um novo trabalho chamado
deploy
, abaixo do trabalholint
: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.
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 }}
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
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 }}"
Salve suas alterações.
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.
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.
Crie um arquivo chamado pr-closed.yml na pasta .github/workflows.
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
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.
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 }}
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
Salve suas alterações.
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.
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.
No terminal do Visual Studio Code, crie um branch para suas alterações executando o seguinte comando:
git checkout -b feature/container-app
Abra o arquivo main.bicep na pasta deploy.
Atualize o valor da variável
appServiceAppLinuxFrameworkVersion
:var appServiceAppLinuxFrameworkVersion = 'DOCKER|dockersamples/static-site:latest'
Salve suas alterações.
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.
No navegador, selecione Código e 3 branches.
Em Seus branches, ao lado de feature/container-app, selecione Nova solicitação de pull.
Selecione Criar solicitação de pull.
Observe o ambiente efêmero ser criado
Na página de detalhes da solicitação de pull, aguarde até que os itens de verificação de status sejam exibidos.
Na lista, ao lado do trabalho de implantação, selecione Detalhes.
Aguarde até que a implantação seja concluída.
Selecione Mostrar nome do host do site.
Selecione a URL no log.
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.
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.
Selecione Solicitações de pull e escolha a solicitação de pull Usar imagem de contêiner para o site.
As verificações de status foram aprovadas.
Selecione Mesclar solicitação de pull.
Selecione Confirmar mesclagem.
Revisar a exclusão do grupo de recursos
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.
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
- No repositório GitHub, acesse Configurações>Segredos e variáveis>Ações.
- Selecione o botão Excluir para cada segredo do repositório e siga os prompts.
Repositório GitHub
- Acesse Configurações>Geral
- 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.
- Na página inicial do portal, pesquise Microsoft Entra ID e selecione-o na lista de Serviços.
- Acesse Gerenciar>Registros de aplicativo.
- Em Aplicativos próprios, selecione toy-website-auto-review.
- Selecione Excluir e siga as solicitações.
- 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.