Entender as implantações de ponta a ponta

Concluído

Pipelines são ferramentas flexíveis que podem ser configuradas de várias maneiras conforme suas necessidades. Nesta unidade, você aprenderá a usar pipelines para implantar uma solução inteira, incluindo a configuração da infraestrutura do Azure e como executar outras operações de implantação.

Quantos pipelines?

Em algumas organizações, a equipe que gerencia o ambiente do Azure é diferente da equipe que desenvolve o código que é executado no ambiente. Nessas situações, muitas vezes é tentador criar vários pipelines, cada um pertencente à equipe responsável pela área específica. Por exemplo, você pode criar um pipeline para implantar o código Bicep que implanta os recursos do Azure do seu site e outro pipeline que implanta o aplicativo do site.

Embora essa abordagem possa lhe dar alguma flexibilidade na forma como você gerencia os pipelines, pode ser desafiador manter tudo em sincronia. Por exemplo, suponha que sua equipe de sites precise de uma nova configuração em seu aplicativo do Serviço de Aplicativo do Azure para habilitar um recurso que ele está criando. O pipeline de implantação de aplicativos não pode ser executado até que o pipeline de implantação de infraestrutura tenha sido concluído com sucesso. Além disso, pode se tornar complicado enviar dados, como os nomes dos recursos do Azure criados por seu pipeline de infraestrutura, entre os pipelines.

Em vez disso, geralmente é melhor criar um único pipeline que implanta tudo o que é necessário para sua solução, mesmo que pessoas diferentes ou equipes diferentes gerenciem os componentes. Você pode usar ferramentas como Git e Azure DevOps para coordenar seu trabalho. Quando um recurso é adicionado, você pode usar uma ramificação para fazer as alterações necessárias ao arquivo Bicep. E quando a alteração estiver pronta para ser integrada e lançada, um único pipeline executará todas as etapas necessárias para criar e implantar a solução. Um pipeline individual reduz a chance de as coisas ficarem fora de sincronia.

Dica

Quando você estiver criando código para sua solução, provavelmente precisará implantá-lo com frequência para que possa testar como ela funciona. Você pode descobrir que implantar sua infraestrutura junto com o código do aplicativo faz com que o pipeline seja executado lentamente e inibe seu progresso.

Se você estiver nesta posição, poderá considerar desabilitar a implantação de infraestrutura para seu ambiente de desenvolvimento. Você pode usar filtros de caminho, modelos de pipeline e condições para conseguir isso. No entanto, deve deixar a sequência de implantação completa intacta para seus outros ambientes.

O plano de controle e o plano de dados

Muitos recursos do Azure fornecem dois planos diferentes para o acesso. O plano de controle implanta e configura o recurso. O plano de dados permite que você acesse a funcionalidade do recurso.

Ao criar e implantar arquivos Bicep, você interage com o plano de controle. No Azure, o plano de controle é o Azure Resource Manager. Você usa o Resource Manager para definir a configuração de cada um dos seus recursos.

Porém, seu pipeline geralmente precisa fazer mais do que apenas interagir com o painel de controle. Por exemplo, talvez seja necessário realizar outras tarefas:

  • Carregar um blob a uma conta de armazenamento.
  • Modificar um esquema de banco de dados.
  • Fazer uma chamada à API para um serviço de terceiros.
  • Disparar a atualização de um modelo de machine learning.
  • Implantar um site em um aplicativo de Serviço de Aplicativo do Azure.
  • Implantar o software em uma máquina virtual.
  • Registre uma entrada DNS (Servidor de Nomes de Domínio) com um provedor de terceiros.

Quando você considera um pipeline de ponta a ponta, normalmente precisa implantar os recursos do Azure e depois realizar uma série de operações nos planos de dados desses recursos. Às vezes, essas operações são chamadas de último quilômetro da implantação, porque você está executando a maior parte da implantação usando o plano de controle e apenas uma pequena quantidade de configuração permanece.

Observação

Alguns recursos não têm uma divisão clara entre o plano de controle e o plano de dados. Isso inclui o Azure Data Factory e o Gerenciamento de API do Azure. Os dois serviços dão suporte a implantações totalmente automatizadas usando Bicep, mas exigem considerações especiais. Você pode encontrar links para obter mais informações na página Resumo no final do módulo.

Como executar operações de plano de dados

Ao criar um pipeline de implantação que interaja com o plano de dados de seus recursos, você pode usar qualquer uma das três abordagens comuns:

  • Scripts de implantação do Resource Manager.
  • Scripts de pipeline.
  • Tarefas de pipeline.

Scripts de implantação do Resource Manager são definidos no arquivo Bicep. Eles executam scripts Bash ou PowerShell e podem interagir com a CLI do Azure ou cmdlets do Azure PowerShell. Você cria uma identidade gerenciada para que o script de implantação possa ser autenticado no Azure e o Azure provisiona e gerencia automaticamente os outros recursos necessários para executar o script de implantação.

Os scripts de implantação são bons quando você precisa executar um script básico no processo de implantação. No entanto, eles não fornecem acesso com facilmente a outros elementos do pipeline.

Você também pode executar uma lógica própria em um pipeline de implantação. O Azure Pipelines fornece um ecossistema avançado de tarefas para coisas comuns que você precisa fazer. Se você não conseguir encontrar uma tarefa que atenda às suas necessidades, poderá usar um script para executar seu próprio código Bash ou PowerShell. As tarefas e os scripts de pipeline são executados no agente do pipeline. Geralmente, você precisa autenticar a tarefa ou o script no plano de dados do serviço que está usando e a maneira como você autentica depende do serviço.

As tarefas e os scripts do pipeline oferecem flexibilidade e controle. Eles também permitem que você acesse artefatos de pipeline, o que você vai aprender em breve. Neste módulo, nos concentramos em scripts e tarefas de pipeline. Há link para mais informações sobre scripts de implantação do Resource Manager na página Resumo no final do módulo.

Saídas

Um pipeline normalmente cria e configura seus recursos do Azure implantando um arquivo Bicep. As partes seguintes do pipeline interagem com o plano de dados desses recursos. Para poder interagir com os recursos, as tarefas e as etapas do pipeline precisam de informações sobre o recurso do Azure que você criou.

Por exemplo, suponha que você tenha um arquivo Bicep que implanta uma conta de armazenamento. Você quer que o seu pipeline implante a conta de armazenamento e depois carregue alguns blobs em um contêiner de blobs na conta de armazenamento. A tarefa de pipeline que carrega os blobs precisa saber o nome da conta de armazenamento à qual se conectar e o nome do contêiner de blob para o qual carregar o arquivo.

É uma boa prática fazer com que o arquivo Bicep decida sobre os nomes dos seus recursos do Azure. Ele pode usar parâmetros, variáveis ou expressões para criar os nomes para a conta de armazenamento e o contêiner de blob. O arquivo Bicep pode expor uma saída que fornece o nome de cada recurso. As etapas posteriores no pipeline podem ler o valor da saída. Dessa forma, sua definição de pipeline não precisa codificar nomes ou outras informações que possam mudar entre ambientes. Além disso, a definição não precisa ser baseada em regras definidas em seu arquivo Bicep.

Com o Azure Pipelines, você pode propagar os valores das saídas usando variáveis de pipeline. Você pode definir o valor de uma variável de pipeline em um script de pipeline. Você usa uma saída de log especialmente formatada que o Azure Pipelines entende como interpretar, conforme mostrado aqui:

stages:
- stage: Stage1
  jobs:
  - job: Job1
    steps:
      # Set the variable's value.
      - script: |
          echo "##vso[task.setvariable variable=myVariableName;isOutput=true]VariableValue"
        name: Step1

      # Read the variable's value.
      - script:
          echo $(myVariableName)

Quando você cria uma variável em um trabalho, mas deseja acessá-la em outro trabalho no mesmo estágio, você precisa mapeá-la .

stages:
- stage: Stage2
  jobs:
  - job: Job2
    steps:
      # Set the variable's value.
      - script: |
          echo "##vso[task.setvariable variable=myVariableName;isOutput=true]VariableValue"
        name: Step1

  - job: Job3
    dependsOn: Job2
    variables: # Map the variable to this job.
      myVariableName: $[ dependencies.Job2.outputs['Step1.myVariableName'] ]
    steps:
      # Read the variable's value.
      - script: |
          echo $(myVariableName)

Para acessar uma variável nos diferentes estágios de um pipeline, você também precisa mapear a variável, mas deve usar uma sintaxe diferente:

stages:
- stage: Stage2
  jobs:
  - job: Job2
    steps:
      # Set the variable's value.
      - script: |
          echo "##vso[task.setvariable variable=myVariableName;isOutput=true]VariableValue"
        name: Step1

  - job: Job3
    dependsOn: Job2
    variables: # Map the variable to this job.
      myVariableName: $[ dependencies.Job2.outputs['Step1.myVariableName'] ]
    steps:
      # Read the variable's value.
      - script: |
          echo $(myVariableName)

- stage: Stage3
  dependsOn: Stage2
  jobs:
  - job: Job4
    variables: # Map the variable to this stage.
      myVariableName: $[ stageDependencies.Stage2.Job2.outputs['Step1.myVariableName'] ]
    steps:
      # Read the variable's value.
    - script: |
        echo $(myVariableName)

Usando as saídas do Bicep e as variáveis de pipeline, você pode criar um pipeline de vários estágios que implanta o código do Bicep e, em seguida, executa várias ações nos recursos como parte da implantação.