Exercício - Adicione fiapos e valide trabalhos ao seu fluxo de trabalho
Você falou com sua equipe e decidiu automatizar ainda mais suas implantações usando um fluxo de trabalho. Você quer construir mais confiança no que implanta.
Neste exercício, você adicionará trabalhos de validação ao seu fluxo de trabalho. Em seguida, você executará a validação de linter e comprovação antes de cada implantação.
Durante o processo, você executa as seguintes tarefas:
- Atualize seu fluxo de trabalho existente para adicionar dois novos trabalhos ao lint e validar seu código Bicep.
- Execute seu fluxo de trabalho.
- Corrija quaisquer problemas que o seu fluxo de trabalho detete.
Adicione fiapos e trabalhos de validação ao seu fluxo de trabalho
No Visual Studio Code, abra o arquivo workflow.yml na pasta .github/workflows .
env:
Na seção , altere oAZURE_RESOURCEGROUP_NAME
valor da variável paraToyWebsiteTest
:env: AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest ENVIRONMENT_TYPE: Test
Abaixo da
jobs:
linha, acima dodeploy
trabalho, adicione um novo trabalho de fiapos:jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file deploy/main.bicep
Este trabalho define uma etapa para verificar o código e uma etapa que executa o
az bicep build
comando para lint o arquivo Bicep.Gorjeta
Os arquivos YAML são sensíveis ao recuo. Quer escreva ou cole este código, certifique-se de que o recuo está correto. Mais adiante neste exercício, você verá a definição completa do fluxo de trabalho do YAML para que possa verificar se o arquivo corresponde.
Abaixo das linhas que você acabou de adicionar e acima do trabalho de implantação, adicione um trabalho de validação:
validate: 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/arm-deploy@v1 name: Run preflight validation with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }} deploymentMode: Validate
Este trabalho define etapas para fazer check-out do código, entrar em seu ambiente do Azure e usar a
azure/arm-deploy
ação com oValidate
modo de implantação.Sua definição de fluxo de trabalho agora tem três trabalhos. O primeiro lints seu arquivo Bicep, o segundo executa uma validação de comprovação e o terceiro executa a implantação no Azure.
Abaixo da
runs-on
linha nodeploy
trabalho, adicione umaneeds
instrução:deploy: runs-on: ubuntu-latest needs: [lint, validate] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure
A
needs
instrução indica que o trabalho de implantação depende do lint e valida os trabalhos concluídos com êxito antes que ele possa ser executado.Observe também que os trabalhos de validação e implantação entram no Azure, e todos os trabalhos fazem check-out do código do repositório. Essas etapas são necessárias porque cada trabalho usa um novo corredor do GitHub.
Guarde o ficheiro.
Configurar o linter
Por padrão, o linter do Bíceps fornece um aviso quando deteta um problema com seu arquivo. O GitHub Actions não trata os avisos linter como problemas que devem parar seu fluxo de trabalho. Para personalizar esse comportamento, crie um arquivo de bicepconfig.json que reconfigura o linter.
Adicione um novo arquivo na pasta deploy e nomeie-o bicepconfig.json.
Copie e cole o seguinte código no arquivo:
{ "analyzers": { "core": { "enabled": true, "verbose": true, "rules": { "adminusername-should-not-be-literal": { "level": "error" }, "max-outputs": { "level": "error" }, "max-params": { "level": "error" }, "max-resources": { "level": "error" }, "max-variables": { "level": "error" }, "no-hardcoded-env-urls": { "level": "error" }, "no-unnecessary-dependson": { "level": "error" }, "no-unused-params": { "level": "error" }, "no-unused-vars": { "level": "error" }, "outputs-should-not-contain-secrets": { "level": "error" }, "prefer-interpolation": { "level": "error" }, "secure-parameter-default": { "level": "error" }, "simplify-interpolation": { "level": "error" }, "protect-commandtoexecute-secrets": { "level": "error" }, "use-stable-vm-image": { "level": "error" } } } } }
Guarde o ficheiro.
Configurar o trabalho de implantação para trabalhar com o linter
Quando você usa uma configuração linter personalizada, o Bicep grava dados de log que o GitHub Actions interpreta como um erro. Para desativar esse comportamento, configure a arm-deploy
tarefa para ignorar o fluxo de log de erro padrão (stderr).
Abra o arquivo workflow.yml .
deploy
Na etapa de teste Implantar site do trabalho, defina afailOnStdErr
propriedade comofalse
:deploy: runs-on: ubuntu-latest needs: [lint, validate] 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/arm-deploy@v1 name: Deploy website with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
Guarde o ficheiro.
Verificar e confirmar sua definição de fluxo de trabalho
Verifique se o arquivo workflow.yml se parece com o seguinte código:
name: deploy-toy-website-test concurrency: toy-company on: push: branches: - main permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest ENVIRONMENT_TYPE: Test jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file deploy/main.bicep validate: 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/arm-deploy@v1 name: Run preflight validation with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }} deploymentMode: Validate deploy: runs-on: ubuntu-latest needs: [lint, validate] 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/arm-deploy@v1 name: Deploy website with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
Se o ficheiro tiver um aspeto diferente, atualize-o para corresponder a este exemplo e, em seguida, guarde-o.
Confirme e envie suas alterações para o repositório Git executando os seguintes comandos no terminal do Visual Studio Code:
git add . git commit -m "Add lint and validation jobs" git push
Essa confirmação é a primeira vez que você envia por push para esse repositório, portanto, você pode ser solicitado a entrar.
No Windows, digite 1 para autenticar usando um navegador da Web e selecione Enter.
No macOS, selecione Autorizar.
É apresentada uma janela do browser. Talvez seja necessário fazer login no GitHub novamente. Selecionar Autorizar.
Imediatamente após o envio, o GitHub Actions inicia uma nova execução de fluxo de trabalho.
Exibir a execução do fluxo de trabalho
No navegador, vá para Ações.
A primeira execução do fluxo de trabalho, rotulada como Confirmação inicial, é mostrada como uma falha. O GitHub executou automaticamente o fluxo de trabalho quando você criou o repositório. Falhou porque os segredos não estavam prontos naquele momento. Você pode ignorar essa falha.
Selecione a execução mais recente do seu fluxo de trabalho.
Observe que a execução do fluxo de trabalho agora mostra os três trabalhos que você definiu no arquivo YAML. Os trabalhos lint e validate são executados em paralelo antes do início do trabalho de implantação .
Se o fluxo de trabalho ainda estiver em execução, aguarde até que seja concluído. Embora os fluxos de trabalho atualizem automaticamente a página com o status mais recente, é uma boa ideia atualizá-la ocasionalmente.
Observe que os trabalhos de fiapos e validação falharam.
Selecione o trabalho de fiapos para ver seus detalhes.
Selecione a etapa Executar linter do Bicep para exibir o log do fluxo de trabalho.
O erro no log do fluxo de trabalho inclui uma mensagem de erro linter:
Error no-unused-params: Parameter "storageAccountNameParam" is declared but never used.
Essa mensagem de erro indica que o linter encontrou uma violação de regra em seu arquivo Bicep.
Corrigir o erro linter
Agora que você identificou o problema, você pode corrigi-lo em seu arquivo Bicep.
No Visual Studio Code, abra o arquivo main.bicep na pasta deploy .
Observe que o linter do Bíceps também detetou que o
storageAccountNameParam
parâmetro não é usado. No Visual Studio Code, uma linha ondulada é exibida sob o parâmetro. Normalmente, a linha seria amarela para indicar um aviso. Mas como você personalizou o arquivo bicepconfig.json , o linter trata o código como um erro e exibe a linha em vermelho.param storageAccountNameParam string = uniqueString(resourceGroup().id)
Exclua o
storageAccountNameParam
parâmetro.Guarde o ficheiro.
Confirme e envie suas alterações para o repositório Git executando os seguintes comandos no terminal do Visual Studio Code:
git add . git commit -m "Remove unused parameter" git push
Mais uma vez, o GitHub Actions aciona automaticamente uma nova execução do seu fluxo de trabalho.
Exibir o fluxo de trabalho executado novamente
No navegador, acesse o fluxo de trabalho.
Selecione a execução mais recente.
Aguarde até que a execução do fluxo de trabalho seja concluída. Embora o GitHub Actions atualize automaticamente a página com o status mais recente, é uma boa ideia atualizá-la ocasionalmente.
Observe que o trabalho lint foi concluído com êxito, mas o trabalho de validação ainda está falhando.
Selecione o trabalho de validação para ver seus detalhes.
Selecione a etapa Executar validação de comprovação para exibir o log do fluxo de trabalho.
O erro exibido no log do fluxo de trabalho inclui a seguinte mensagem:
mystorageresourceNameSuffix is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only.
Este erro indica que o nome da conta de armazenamento não é válido.
Corrigir o erro de validação
Você encontrou outro problema no arquivo Bicep. Aqui, você corrige o problema.
No Visual Studio Code, abra o arquivo main.bicep na pasta deploy .
Veja a definição da
storageAccountName
variável:var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website' var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}' var applicationInsightsName = 'toywebsite' var storageAccountName = 'mystorageresourceNameSuffix'
Parece haver um erro de digitação e a interpolação de cadeia de caracteres não está configurada corretamente.
Atualize a variável para usar a
storageAccountName
interpolação de cadeia de caracteres corretamente:var storageAccountName = 'mystorage${resourceNameSuffix}'
Guarde o ficheiro.
Confirme e envie suas alterações para o repositório Git executando os seguintes comandos no terminal do Visual Studio Code:
git add . git commit -m "Fix string interpolation" git push
Exibir a execução bem-sucedida do fluxo de trabalho
No navegador, acesse o fluxo de trabalho.
Selecione a execução mais recente.
Aguarde até que a execução do fluxo de trabalho seja concluída. Embora o GitHub Actions atualize automaticamente a página com o status mais recente, é uma boa ideia atualizá-la ocasionalmente.
Observe que todos os três trabalhos no fluxo de trabalho foram concluídos com êxito:
Alguns avisos estão listados no painel Anotações . Esses avisos aparecem devido à maneira como o Bicep grava mensagens informativas no log do fluxo de trabalho. Você pode ignorar esses avisos.
Agora você tem um fluxo de trabalho que deteta erros com êxito no código do Bicep no início do processo de implantação e, em seguida, implanta no Azure se não houver erros.