Exercício – Publicar uma especificação de modelo

Concluído

Sua equipe criou alguns arquivos Bicep protegidos com segurança que estão em conformidade com o novo modelo de governança da empresa. Um dos arquivos Bicep protegidos implementa um aplicativo do Serviço de Aplicativo do Azure com base em Linux. Neste exercício, você usará um fluxo de trabalho de implantação para publicar o arquivo Bicep como uma especificação de modelo.

Durante o processo, você vai:

  • Adicionar um trabalho de lint ao fluxo de trabalho.
  • Adicionar um trabalho de fluxo de trabalho para publicar a especificação de modelo.
  • Executar manualmente o fluxo de trabalho e verificar se ele foi concluído com êxito.
  • Verificar a especificação de modelo publicada no Azure.

Adicionar um trabalho de lint ao fluxo de trabalho

O repositório contém um rascunho de um fluxo de trabalho que você pode usar como ponto de partida.

  1. No Visual Studio Code, expanda a pasta .github/workflows na raiz do repositório.

  2. Abra o arquivo template-spec-linux-app-service.yml.

    Captura de tela do Visual Studio Code que mostra o local do arquivo de definição do fluxo de trabalho.

    A definição de fluxo de trabalho inclui dois gatilhos. Neste exercício, você não modificará o arquivo Bicep da especificação de modelo, portanto, o gatilho push nunca será disparado. Para experimentar o fluxo de trabalho, invoque-o manualmente usando o gatilho workflow_dispatch.

  3. Na parte inferior do arquivo, onde aparece um comentário que diz # To be added, adicione a seguinte definição de trabalho lint:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    

    O repositório tem um arquivo bicepconfig.json que configura o linter para emitir erros em vez de avisos. Se houver alguma falha durante o trabalho de lint, o fluxo de trabalho falhará.

    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.

Adicionar um trabalho de publicação ao fluxo de trabalho

Agora, você pode adicionar um segundo trabalho para publicar a especificação de modelo no Azure.

  1. Adicione o seguinte código ao final do arquivo template-spec-linux-app-service.yml:

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      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: Publish template spec
        with:
          inlineScript: |
            az ts create \
              --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
              --name ${{ env.TEMPLATE_SPEC_NAME }} \
              --version ${{ github.run_number }} \
              --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
              --location ${{ env.AZURE_REGION }} \
              --yes
    

    Esse trabalho verifica o código do repositório e entra no Azure usando os segredos do GitHub que você criou. Depois, ela executa o comando az ts create para publicar a especificação de modelo no Azure.

    Dica

    Para simplificar as coisas, o fluxo de trabalho usa o número de build do fluxo de trabalho como o número de versão da especificação de modelo. Na próxima unidade, você conhecerá um esquema de controle de versão mais complexo.

  2. Salve as alterações no arquivo.

Verificar e fazer commit a definição do fluxo de trabalho

  1. Verifique se o arquivo template-spec-linux-app-service.yml se parece com o seguinte exemplo:

    name: template-spec-linux-app-service
    concurrency: template-spec-linux-app-service
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'template-specs/linux-app-service/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyReusable
      AZURE_REGION: westus3
      TEMPLATE_SPEC_NAME: linux-app-service
      TEMPLATE_SPEC_FILE_PATH: template-specs/linux-app-service/main.bicep
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        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: Publish template spec
          with:
            inlineScript: |
              az ts create \
                --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
                --name ${{ env.TEMPLATE_SPEC_NAME }} \
                --version ${{ github.run_number }} \
                --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
                --location ${{ env.AZURE_REGION }} \
                --yes
    

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

  2. 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 "Add lint and publish jobs to Linux App Service template spec workflow"
    git push
    
  3. Essa é a primeira vez que você efetuou push desse repositório, então pode aparecer uma solicitação para entrar.

    No Windows, digite 1 para fazer a autenticação usando um navegador da Web e pressione Enter.

    No macOS, selecione Autorizar.

  4. Uma janela do navegador é exibida. Talvez seja necessário entrar no GitHub novamente. Selecione Autorizar.

Disparar um fluxo de trabalho

  1. No navegador, selecione a guia Ações.

    Captura de tela do GitHub mostrando a guia Actions.

    As execuções de fluxo de trabalho com falha já estão listadas, mas você não precisa se preocupar com elas. As execuções falharam porque as definições de fluxo de trabalho ainda não estavam concluídas quando você criou o repositório.

  2. Selecione o fluxo de trabalho template-spec-linux-app-service, clique no botão Executar fluxo de trabalho e selecione Executar fluxo de trabalho.

    Captura de tela do GitHub mostrando as seleções para executar o fluxo de trabalho da especificação do modelo.

    O GitHub inicia uma nova execução de fluxo de trabalho. Talvez seja necessário atualizar a janela do navegador que a execução apareça.

  3. Selecione a execução mais recente na lista.

    Captura de tela do GitHub destacando a execução mais recente do fluxo de trabalho da especificação do modelo.

    Aguarde o fim da execução do fluxo de trabalho. Quando isso acontece, a especificação de modelo é publicada no Azure.

  4. Anote o número da execução do fluxo de trabalho, que provavelmente é 2.

    Captura de tela do GitHub mostrando uma execução de fluxo de trabalho bem-sucedida e destacando o número da execução.

Examinar a especificação de modelo no Azure

Você também pode ver a especificação de modelo publicada no portal do Azure.

  1. No navegador, acesse o portal do Azure.

  2. Acesse o grupo de recursos ToyReusable e selecione a especificação de modelo linux-app-service.

    Captura de tela do portal do Azure mostrando o grupo de recursos, com a especificação do modelo realçada.

  3. Examine os detalhes da especificação de modelo.

    Captura de tela do portal do Azure mostrando os detalhes da especificação do modelo.

    Observe que o número da Última versão e da Versão são iguais ao número da execução de fluxo de trabalho. O fluxo de trabalho usa o número de execução para o número de versão da especificação de modelo.