Exercício – Adicionar uma tarefa de implantação Bicep ao pipeline

Concluído

Você criou um pipeline básico e configurou seus ambientes do Azure e do Azure Pipelines para se conectarem. Agora você está pronto para implantar o arquivo Bicep referente ao seu site no Azure oriundo do seu pipeline.

Neste exercício, você vai:

  • Adicione um arquivo Bicep ao seu repositório.
  • Adicione uma etapa de pipeline para implantar o arquivo Bicep.
  • Execute o pipeline novamente e verifique se ele implantou seu site com êxito.

Adicionar o arquivo Bicep do seu site ao repositório Git

Você já preparou o arquivo Bicep do seu site. Você pode usar o arquivo Bicep para implantar configurações diferentes dos recursos do site, dependendo do ambiente e da configuração. Aqui, você adiciona o arquivo Bicep ao seu repositório.

  1. Abra o Visual Studio Code Explorer.

  2. Na pasta deploy, crie um arquivo chamado main.bicep. Garanta que você criou o arquivo dentro da pasta implantar, não na raiz do repositório:

    Captura de tela do Visual Studio Code Explorer com o arquivo main.bicep realçado e localizado na pasta implantar.

  3. Copie o seguinte código para o arquivo main.bicep:

    @description('The Azure region into which the resources should be deployed.')
    param location string = resourceGroup().location
    
    @description('The type of environment. This must be nonprod or prod.')
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    @description('Indicates whether to deploy the storage account for toy manuals.')
    param deployToyManualsStorageAccount bool
    
    @description('A unique suffix to add to resource names that need to be globally unique.')
    @maxLength(13)
    param resourceNameSuffix string = uniqueString(resourceGroup().id)
    
    var appServiceAppName = 'toy-website-${resourceNameSuffix}'
    var appServicePlanName = 'toy-website-plan'
    var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}'
    
    // Define the SKUs for each component based on the environment type.
    var environmentConfigurationMap = {
      nonprod: {
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
    var toyManualsStorageAccountConnectionString = deployToyManualsStorageAccount ? 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}' : ''
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: environmentConfigurationMap[environmentType].appServicePlan.sku
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
    resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = if (deployToyManualsStorageAccount) {
      name: toyManualsStorageAccountName
      location: location
      kind: 'StorageV2'
      sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku
    }
    
  4. Salve as alterações no arquivo.

  5. No terminal do Visual Studio Code, execute este código para preparar as alterações, confirmá-las e efetuar push delas para o repositório:

    git add deploy/main.bicep
    git commit -m 'Add Bicep file'
    git push
    

Substituir as etapas de pipeline

Em seguida, atualize sua definição de pipeline para implantar o arquivo Bicep no Azure usando a conexão de serviço.

  1. No Visual Studio Code, abra o arquivo deploy/azure-pipelines.yml.

  2. Antes da linha jobs:, adicione variables: para definir uma variável chamada deploymentDefaultLocation:

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    
  3. Para remover a etapa script da definição do pipeline, exclua as duas linhas inferiores do arquivo.

    Dica

    Quando você trabalha no Visual Studio Code e instalou a extensão de Azure Pipelines, tente usar a combinação de teclas Ctrl + Espaço. Ela mostra um menu de contexto com elementos sugeridos para adicionar à posição atual do cursor.

  4. Na parte inferior do arquivo, adicione uma tarefa que usa a tarefa AzureResourceManagerTemplateDeployment para implantar o arquivo Bicep:

    jobs:
    - job:
      steps:
    
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: $(ServiceConnectionName)
          deploymentName: $(Build.BuildNumber)
          location: $(deploymentDefaultLocation)
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep
          overrideParameters: >
            -environmentType $(EnvironmentType)
            -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
    

    Observação

    Uma boa ideia é digitar esse código em vez de copiar e colar do módulo. Preste atenção ao recuo do arquivo. Se o recuo não estiver correto, o arquivo YAML não será válido. O Visual Studio Code indica erros exibindo linhas onduladas.

    Esta etapa usa uma variável de sistema, $(Build.BuildNumber), para nomear a implantação. A variável pode ajudá-lo a ver facilmente a qual pipeline executar uma implantação corresponde.

    A propriedade location da tarefa é exigida pela tarefa AzureResourceManagerTemplateDeployment. Ela especifica a região do Azure na qual um grupo de recursos deve ser criado. Neste exercício, você já criou um grupo de recursos e, portanto, o local especificado aqui não importa. Mas você precisa fornecer o valor de qualquer maneira. Aqui, defina-o como o valor da variável deploymentDefaultLocation que você definiu em uma etapa anterior.

  5. Salve as alterações no arquivo. Seu arquivo deve ser semelhante a este exemplo:

    trigger: none
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
    - name: deploymentDefaultLocation
      value: westus3
    
    jobs:
    - job:
      steps:
    
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: $(ServiceConnectionName)
          deploymentName: $(Build.BuildNumber)
          location: $(deploymentDefaultLocation)
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep
          overrideParameters: >
            -environmentType $(EnvironmentType)
            -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
    
  6. No terminal do Visual Studio Code, prepare suas alterações, confirme-as em seu repositório e efetue push delas para o Azure Repos:

    git add deploy/azure-pipelines.yml
    git commit -m 'Add deployment task to pipeline'
    git push
    

Adicionar variáveis de pipeline

  1. No navegador, selecione Pipelines.

    Captura de tela do Azure DevOps que mostra o menu, com Pipelines realçado.

  2. Selecione seu pipeline.

    Captura de tela do Azure DevOps que mostra a lista de pipelines com o pipeline do site de brinquedos realçado.

  3. Selecione Editar.

    Captura de tela do Azure DevOps que mostra o pipeline, com Editar realçado.

  4. Selecione Variáveis.

    Captura de tela do Azure DevOps que mostra o editor de pipeline com o botão Variáveis realçado.

  5. Selecione New variable.

    Captura de tela do Azure DevOps que mostra o editor de variável do pipeline com o botão

  6. Em Nome, digite ServiceConnectionName. Em Valor, digite ToyWebsite.

    Deixe as caixas de seleção desmarcadas e selecione OK.

    Captura de tela do Azure DevOps que mostra o editor de variável de pipeline com o botão OK realçado.

  7. Para criar mais variáveis, selecione +.

    Captura de tela do Azure DevOps que mostra a lista de variáveis de pipeline com o botão Mais realçado.

    Crie as seguintes variáveis da mesma maneira que você criou a variável ServiceConnectionName:

    Nome da variável Valor
    ResourceGroupName ToyWebsite
    EnvironmentType nonprod
  8. Faça as etapas novamente para criar uma variável chamada DeployToyManualsStorageAccount, com um valor true. Para essa variável, marque a caixa de seleção Permitir que os usuários substituam o valor ao executar esse pipeline.

    Captura de tela do Azure DevOps que mostra o editor de variáveis de pipeline.

  9. Depois de criar todas as quatro variáveis, selecione Salvar.

    Captura de tela do Azure DevOps que mostra o editor de variável de pipeline com o botão Salvar realçado.

Executar seu pipeline

Agora você está pronto para executar seu pipeline!

Seu modelo inclui uma conta de armazenamento, que sua equipe de site usa para armazenar manuais de instrução para os brinquedos. Como você ainda está testando seu ambiente, não precisa implantar a conta de armazenamento toda vez que implantar o site. Portanto, você criou um parâmetro Bicep para controlar se a conta de armazenamento está implantada. Aqui, você executa o pipeline e substitui a implantação para que ela não implante a conta de armazenamento dessa vez.

  1. Selecione Executar.

    Captura de tela do Azure DevOps que mostra o pipeline, com o botão Executar realçado.

    O painel Executar pipeline é exibido. Neste painel você pode definir as configurações para essa execução específica do pipeline.

  2. Selecione Variáveis.

    Captura de tela do Azure DevOps que mostra a página

  3. Selecione a variável DeployToyManualsStorageAccount e altere seu valor para false. Em seguida, selecione Atualizar.

    Captura de tela do Azure DevOps que mostra o editor de variável

  4. Selecione a seta voltar.

    Captura de tela do Azure DevOps que mostra a página

  5. Para iniciar uma nova execução de pipeline, selecione Executar. O pipeline pode levar alguns minutos para iniciar. Depois que o pipeline é iniciado, a implantação pode levar alguns minutos para finalizar.

  6. Para abrir o trabalho, na seção Trabalhos, escolha Trabalho. Você pode monitorar o trabalho conforme ele é executado ou pode aguardar até que o trabalho seja concluído para examinar seu histórico.

    Aguarde a conclusão do trabalho.

  7. Selecione Trabalho.

    Captura de tela do Azure DevOps que mostra a página de trabalho, com o item de menu Trabalho realçado.

  8. Selecione 1 variável de tempo de fila usada.

    Captura de tela do Azure DevOps que mostra o log do pipeline com o item

    O valor substituído para essa execução de pipeline é mostrado. O valor da variável DeployToyManualsStorageAccount é falso porque você substituiu o valor original.

  9. Inspecione o restante da saída do pipeline.

    O pipeline mostra uma implantação bem-sucedida.

Verificar a implantação

  1. Vá para o Portal do Azure.

  2. No menu esquerdo, selecione Grupo de recursos.

  3. Selecione ToyWebsite.

  4. Em Visão geral, veja o status da implantação. Você pode ver que a implantação foi bem-sucedida.

    Captura de tela do portal do Azure que mostra o grupo de recursos com uma implantação bem-sucedida.

  5. Selecione 1 Êxito para ver os detalhes da implantação.

    Captura de tela do portal do Azure que mostra o histórico de implantação do grupo de recursos com a implantação realçada.

    O nome da implantação é o mesmo nome da execução do pipeline.

  6. Para ver quais recursos foram implantados, selecione a implantação. Para expandir a implantação para ver mais detalhes, selecione Detalhes da implantação. Nesse caso, há um plano do Serviço de Aplicativo do Azure e um aplicativo.

    Captura de tela do portal do Azure que mostra os detalhes de implantação do grupo de recursos com os recursos do Serviço de Aplicativo realçados.