Exercício - Adicionar uma tarefa de implantação do 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 do seu site no Azure a partir do seu pipeline.

Neste exercício, irá:

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

Adicione 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 diferentes configurações dos recursos do site, dependendo do ambiente e da configuração. Aqui, você adiciona seu arquivo Bicep ao seu repositório.

  1. Abra o Visual Studio Code Explorer.

  2. Na pasta deploy, crie um novo arquivo chamado main.bicep. Certifique-se de criar o arquivo dentro da pasta deploy , e não na raiz do repositório:

    Captura de tela do Visual Studio Code Explorer, com o arquivo bicep ponto principal realçado e localizado na pasta deploy.

  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. Guarde as alterações ao ficheiro.

  5. No terminal do Visual Studio Code, execute este código para preparar as alterações, confirmar as alterações e enviar as alterações por push para o repositório:

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

Substitua as etapas do pipeline

Em seguida, atualize sua definição de pipeline para implantar seu 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 jobs: linha, 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 script etapa da definição de pipeline, exclua as duas linhas inferiores do arquivo.

    Gorjeta

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

  4. Na parte inferior do arquivo, adicione uma tarefa que use a AzureResourceManagerTemplateDeployment tarefa para implantar seu 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)
    

    Nota

    É uma boa ideia digitar esse código você mesmo, em vez de copiá-lo e colá-lo deste 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 a execução de uma implantação corresponde.

    A location propriedade task é exigida AzureResourceManagerTemplateDeployment pela tarefa. Ele 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, você o define como o valor da deploymentDefaultLocation variável definida em uma etapa anterior.

  5. Guarde as alterações ao ficheiro. O ficheiro deverá ter um aspeto semelhante ao seguinte:

    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 envie-as por push 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 ecrã do Azure DevOps que mostra o menu, com Pipelines realçado.

  2. Selecione o pipeline.

    Captura de ecrã do Azure DevOps que mostra a lista de pipelines, com o pipeline de sites de brinquedos realçado.

  3. Selecione Editar.

    Captura de ecrã do Azure DevOps que mostra o pipeline, com Edit 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 Nova variável.

    Captura de ecrã do Azure DevOps que mostra o editor de variáveis de pipeline, com o botão 'Nova variável' realçado.

  6. Em Name, digite ServiceConnectionName. Em Valor, insira ToyWebsite.

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

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

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

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

    Crie as seguintes variáveis da mesma forma que criou a variável ServiceConnectionName :

    Nome da variável Value
    ResourceGroupName BrinquedoWebsite
    Tipo de Ambiente não prod
  8. Conclua 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 esse valor ao executar este pipeline .

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

  9. Quando tiver criado as quatro variáveis, selecione Guardar.

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

Execute seu pipeline

Agora, você está pronto para executar seu pipeline!

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

  1. Selecione Executar.

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

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

  2. Selecione Variáveis.

    Captura de ecrã do Azure DevOps que mostra a página 'Executar pipeline', com o item de menu Variáveis realçado.

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

    Captura de ecrã do Azure DevOps que mostra o editor de variáveis 'Executar pipeline', com o botão Atualizar realçado.

  4. Selecione a seta para trás.

    Captura de ecrã do Azure DevOps que mostra a página 'Executar pipeline', com a seta para trás realçada.

  5. Para iniciar uma nova execução de pipeline, selecione Executar. O pipeline pode levar alguns minutos para começar. Depois que o pipeline é iniciado, a implantação pode levar alguns minutos para ser concluída.

  6. Para abrir o trabalho, na seção Trabalhos , selecione Trabalho. Você pode monitorar o trabalho à medida que ele é executado ou pode esperar até que o trabalho seja concluído para revisar seu histórico.

    Aguarde até que o trabalho termine.

  7. Selecione Trabalho.

    Captura de ecrã 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 de pipeline, com o item '1 variável de tempo de fila usada' realçado.

    O valor substituído para esta execução de pipeline é mostrado. O DeployToyManualsStorageAccount valor da variável é false 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 implementação

  1. Aceda ao portal do Azure.

  2. No menu à esquerda, selecione Grupos de recursos.

  3. Selecione ToyWebsite.

  4. Em Visão geral, exiba o status da implantação. Você pode ver que uma 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 efetuada com êxito para ver os detalhes da implementação.

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

    O nome da implantação é o mesmo que o 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 ecrã do portal do Azure que mostra os detalhes de implementação do grupo de recursos, com os recursos do Serviço de Aplicação realçados.