Exercício – Implantar um arquivo Bicep por meio de fluxos de trabalho do GitHub

Concluído

GitHub Actions são semelhantes a Azure Pipelines por natureza. Eles fornecem uma forma de automatizar o desenvolvimento e as implantações de software. Neste exercício, você aprenderá a implantar um arquivo Bicep usando um GitHub Action.

Pré-requisitos

  • Você precisará de uma conta do GitHub, que pode ser criada gratuitamente aqui.
  • Um repositório GitHub também é necessário para armazenar seu arquivo Bicep e fluxos de trabalho criados anteriormente no Exercício – Criar modelos Bicep. Depois de criar seu repositório do GitHub, efetue push do arquivo Bicep nesse repositório.
  • Para a implantação no Azure, é necessário o acesso a uma assinatura do Azure, que pode ser criada gratuitamente aqui.

Criar uma entidade de serviço no Azure

Para implantar seus recursos no Azure, você precisará criar uma entidade de serviço que o GitHub possa usar. Portanto, abra um terminal ou use o Cloud Shell no portal do Azure e digite os seguintes comandos:

az login
az ad sp create-for-rbac --name myApp --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/Bicep --sdk-auth

Observação

Não se esqueça de substituir a ID da Assinatura pela sua.

Quando a operação for bem-sucedida, ela deverá gerar um objeto JSON que contenha tenantId, subscriptionId, clientId, clientSecret e mais algumas propriedades, como a seguir.

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
}

Anote esse objeto, pois você precisará adicioná-lo aos segredos do GitHub.

Como criar um segredo do GitHub

No repositório do GitHub, navegue até Configurações>Segredos>Ações. Crie um segredo chamado AZURE_CREDENTIALS e cole todo o objeto JSON que você obteve na etapa anterior.

Crie outro segredo para o nome do grupo de recursos com um nome como AZURE_RG e outro para a assinatura.

Screenshot of GitHub secrets creation and manage page.

Como criar uma ação do GitHub

  1. Primeiro, navegue até o repositório e selecione o menu Ações. Em seguida, configure um fluxo de trabalho para criar um fluxo de trabalho vazio em seu repositório. Você pode renomear o arquivo com um nome diferente, se preferir.

    Screenshot of GitHub new file creation, edit and preview.

  2. Substitua o conteúdo do arquivo client.js pelo seguinte snippet:

    on: [push]
    name: Azure ARM
    jobs:
        build-and-deploy:
            runs-on: ubuntu-latest
            steps:
                # Checkout code
                - uses: actions/checkout@main
    
                  # Log into Azure
                - uses: azure/login@v1
                  with:
                      creds: ${{ secrets.AZURE_CREDENTIALS }}
    
                  # Deploy Bicep file
                - name: deploy
                  uses: azure/arm-deploy@v1
                  with:
                      subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
                      resourceGroupName: ${{ secrets.AZURE_RG }}
                      template: ./main.bicep
                      parameters: storagePrefix=stg
                      failOnStdErr: false
    

    Fique à vontade para substituir o prefixo da conta de armazenamento pelo seu.

    Observação

    A primeira parte do fluxo de trabalho define o gatilho e seu nome. O restante define um trabalho e usa algumas tarefas para fazer check-out do código, entrar no Azure e implantar o arquivo Bicep.

  3. Selecione Iniciar commit e insira um título e uma descrição na caixa de diálogo pop-up. Em seguida, selecione Fazer commit diretamente no branch principal e Fazer commit de um novo arquivo.

    Screenshot of GitHub commits a new file to the main branch.

  4. Navegue até a guia Ações e selecione a ação recém-criada, que deve estar em execução.

    Screenshot of GitHub action running and deploying.

  5. Monitore o status e, quando o trabalho for concluído, verifique o portal do Azure para ver se a conta de armazenamento está sendo criada.

    Screenshot of GitHub action successful executed job.