Compreender as implantações de ponta a ponta

Concluído

Os pipelines são ferramentas flexíveis que você pode configurar de muitas maneiras diferentes para atender às suas necessidades. Nesta unidade, você aprenderá como 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 gasodutos?

Em algumas organizações, a equipe que gerencia o ambiente do Azure é diferente da equipe que desenvolve o código executado no ambiente. Nessas situações, muitas vezes é tentador criar vários pipelines, cada um de propriedade da equipe responsável por sua á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 em como você gerencia os pipelines, pode ser um desafio manter tudo em sincronia. Por exemplo, suponha que sua equipe de site precise de uma nova configuração em seu aplicativo do Serviço de Aplicativo do Azure para habilitar um recurso que está criando. O pipeline de implantação de aplicativos não pode ser executado até que o pipeline de implantação de infraestrutura seja concluído com êxito. Além disso, pode tornar-se complicado enviar dados, como os nomes dos recursos do Azure criados pelo seu pipeline de infraestrutura, entre os pipelines.

Em vez disso, geralmente é melhor criar um único pipeline que implante 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 novo recurso é adicionado, você pode usar uma ramificação para fazer as alterações necessárias no arquivo Bicep. E quando a alteração está pronta para ser integrada e lançada, um único pipeline executa todas as etapas necessárias para criar e implantar a solução. Um único pipeline reduz a chance de as coisas ficarem fora de sincronia.

Gorjeta

Quando você está criando código para sua solução, provavelmente precisa implantá-lo com frequência para que possa testar como ele funciona. Você pode achar 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 nessa posição, considere 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, você deve deixar a sequência de implantação completa intacta para seus outros ambientes.

O plano de controlo e o plano de dados

Muitos recursos do Azure fornecem dois planos diferentes para 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 Gerenciador de Recursos do Azure. Você usa o Gerenciador de Recursos para definir a configuração de cada um dos seus recursos.

Mas seu pipeline muitas vezes precisa fazer mais do que apenas interagir com o plano de controle. Por exemplo, talvez seja necessário realizar outras tarefas:

  • Carregue um blob para uma conta de armazenamento.
  • Modifique um esquema de banco de dados.
  • Faça uma chamada de API para um serviço de terceiros.
  • Acione a atualização de um modelo de aprendizado de máquina.
  • Implante um site em um aplicativo do Serviço de Aplicativo do Azure.
  • Implante software em uma máquina virtual.
  • Registe uma entrada de Servidor de Nomes de Domínio (DNS) junto de um fornecedor terceiro.

Quando você considera um pipeline de ponta a ponta, normalmente precisa implantar seus recursos do Azure e, em seguida, executar uma série de operações nos planos de dados desses recursos. Às vezes, essas operações são chamadas de última milha 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.

Nota

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

Como realizar operações de plano de dados

Ao criar um pipeline de implantação que interage 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.

Os scripts de implantação do Resource Manager são definidos no arquivo Bicep. Eles executam scripts Bash ou PowerShell e podem interagir com cmdlets da CLI do Azure ou do Azure PowerShell. Você cria uma identidade gerenciada para que o script de implantação possa se autenticar 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 em seu processo de implantação. No entanto, eles não fornecem facilmente acesso a outros elementos do seu pipeline.

Você também pode executar sua própria lógica de dentro de um pipeline de implantação. O Azure Pipelines fornece um ecossistema rico de tarefas para coisas comuns que você precisa fazer. Se não conseguir encontrar uma tarefa que atenda às suas necessidades, você pode usar um script para executar seu próprio código Bash ou PowerShell. Tarefas e scripts de pipeline são executados a partir do agente do pipeline. Muitas vezes, 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.

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

Saídas

Normalmente, um pipeline cria e configura seus recursos do Azure implantando um arquivo Bicep. As partes subsequentes do pipeline interagem com o plano de dados desses recursos. Para poder interagir com os recursos, as tarefas e etapas de 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ê deseja que seu pipeline implante a conta de armazenamento e, em seguida, carregue alguns blobs para um contêiner de blob 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 os nomes dos seus recursos do Azure. Ele pode usar parâmetros, variáveis ou expressões para criar os nomes da conta de armazenamento e do contêiner de blob. O arquivo Bicep pode então expor uma saída que fornece o nome de cada recurso. 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 no arquivo Bicep.

Com o Azure Pipelines, você pode propagar os valores de saídas usando variáveis de pipeline. Você pode definir o valor de uma variável de pipeline dentro de 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 entre estágios de pipeline, você também precisa mapear a variável, mas usa 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 saídas Bicep e variáveis de pipeline, você pode criar um pipeline de vários estágios que implanta seu código Bicep e, em seguida, executa várias ações nos recursos como parte de sua implantação.