Entender Azure Pipelines
Você pode automatizar as etapas em seu processo de implantação usando um pipeline. Sempre que você fizer uma alteração no código e confirmá-la no repositório Git, o pipeline executará seu processo predefinido. Um pipeline pode verificar se o seu código Bicep atende aos padrões de qualidade e automatizar as etapas para implantar seus recursos no Azure. O processo é definido em uma definição de pipeline que você cria.
O Azure Pipelines é um recurso do serviço Azure DevOps. O Azure DevOps também inclui o Azure Repos, que hospeda os repositórios Git usados para armazenar e compartilhar seu código com seus colaboradores. Quando você armazena o código Bicep no Git, o Azure Pipelines pode acessar seu código para automatizar seus processos de implantação. Nesta unidade, você aprenderá sobre Azure Pipelines.
O que é um pipeline?
Um pipeline é o processo replicável usado para testar e implantar o seu código definido em um arquivo de configuração. Um pipeline inclui todas as etapas que você deseja executar e a ordem de execução.
Ao trabalhar com o Azure Pipelines, você define o pipeline em um arquivo YAML. Um arquivo YAML é um arquivo de texto estruturado, semelhante a como o Bicep é um arquivo de texto estruturado. Você pode criar e editar arquivos YAML usando qualquer editor de texto. Neste módulo, você usará Visual Studio Code. O Visual Studio Code oferece uma extensão que pode facilitar a edição de arquivos de pipeline YAML no Azure DevOps. A interface Web do Azure DevOps também fornece algumas ferramentas que podem ser utilizadas para exibir e editar seus arquivos de pipeline YAML.
Observação
O Azure Pipelines inclui pipelines clássicos, uma versão mais antiga do recurso de pipelines. Os pipelines baseados em YAML substituíram os pipelines clássicos. Neste módulo, discutiremos apenas pipelines YAML. Recomendamos que você use pipelines YAML.
Como um arquivo YAML de pipeline é um arquivo de código, ele é armazenado com o código Bicep no seu repositório Git. Use os recursos Git para colaborar na sua definição do pipeline. Você pode gerenciar diferentes versões do seu pipeline usando confirmações e ramificações. Em um módulo posterior, você também aprenderá sobre outros recursos avançados de pipelines, como modelos. Os modelos facilitam a reutilização de definições de pipeline.
Agentes e pools
Até agora, você implantou os arquivos Bicep do computador local. Depois de escrever um modelo Bicep, implante-o no Azure usando a CLI do Azure ou o Azure PowerShell. Essas ferramentas usam os recursos do computador para enviar o modelo para o Azure. Elas usam sua identidade pessoal para autenticar você no Azure e verificar se você tem as permissões para implantar os recursos.
Um pipeline também precisa de acesso a um computador para poder executar as etapas de implantação. O Azure Pipelines usa um computador chamado agente. Um agente é um computador configurado para executar etapas de implantação para um pipeline. Cada agente já possui as ferramentas de Bicep e Azure que você usou nos módulos anteriores, ou seja, é capaz de fazer as mesmas coisas feitas em seu próprio computador. Em vez de um humano executar comandos, o serviço do Azure Pipelines instrui o agente a executar as etapas que você definiu no arquivo YAML.
O Azure Pipelines fornece vários tipos de agentes para sistemas operacionais, como Ubuntu ou Windows, e conjuntos diferentes de ferramentas. A Microsoft executa esses agentes para que você não tenha que manter nenhuma infraestrutura de computação para os agentes. Às vezes os agentes são chamados de agentes hospedados pela Microsoft ou agentes hospedados porque estão hospedados em seu nome. Quando o pipeline é executado, um agente hospedado é criado automaticamente. Quando o pipeline terminar de ser executado, o agente hospedado será excluído automaticamente. Você não pode acessar agentes hospedados diretamente, ou seja, é importante que seu pipeline contenha todas as etapas necessárias para implantar sua solução.
Um pool de agentes contém vários agentes do mesmo tipo. Ao criar o pipeline, você dirá ao Azure Pipelines qual pool de agentes usar para executar cada conjunto de etapas. Quando o pipeline é executado, ele aguarda que um agente do pool se torne disponível e, em seguida, instrui o agente a executar as etapas de implantação. Qualquer agente no pool pode ser atribuído para executar seu pipeline.
Observação
Você tem a opção de criar um agente personalizado chamado de agente auto-hospedado. Você pode criar um agente auto-hospedado caso tenha um software específico que precise ser executado como parte de seu pipeline ou caso seja necessário controlar com precisão como o agente é configurado. Não discutimos agentes auto-hospedados neste módulo, mas fornecemos um link para mais informações no resumo.
Gatilhos
Para instruir o Azure Pipelines quando executar seu pipeline, crie um gatilho. Você pode escolher entre vários tipos de gatilhos. Por enquanto, você usará um gatilho manual. Você indicará manualmente ao Azure Pipelines quando iniciar a execução do pipeline. Mais adiante neste módulo, você saberá mais sobre outros tipos de gatilhos.
Etapas
Uma etapa representa uma única operação que o pipeline executa. Uma etapa é semelhante a um comando individual executado no Bash ou no PowerShell. Na maioria das implantações, você executa várias etapas em uma sequência. Você define a sequência e todos os detalhes de cada etapa no arquivo YAML do pipeline.
O Azure Pipelines oferece dois tipos de etapas:
- Scripts. Use uma etapa de script para executar um único comando ou uma sequência de comandos no Bash, no PowerShell ou no shell de comando do Windows.
- Tarefas. Uma tarefa é uma maneira conveniente de acessar muitos recursos diferentes sem ter que escrever instruções de script. Por exemplo, uma tarefa interna pode executar a CLI do Azure e os cmdlets do Azure PowerShell para testar seu código ou carregar arquivos em um servidor FTP. Qualquer pessoa pode escrever uma tarefa e compartilhá-la com outros usuários ao publicá-la no Visual Studio Marketplace. Um grande conjunto de tarefas comerciais e de código aberto está disponível.
Algumas pessoas preferem usar instruções de script em vez de tarefas integradas porque elas oferecem mais controle sobre o que é executado. Outras pessoas preferem usar tarefas para não precisarem escrever e gerenciar scripts. Neste módulo, usamos uma combinação de ambas as abordagens.
Trabalhos
No Azure Pipelines, um trabalho representa um conjunto ordenado de etapas. Você sempre tem pelo menos um trabalho em um pipeline e, quando cria implantações complexas, é comum ter mais de um trabalho.
Observação
Você pode definir que cada trabalho seja executado em um pool de agentes diferente. Executar trabalhos em pools de agentes diferentes é útil quando você cria e implanta soluções que precisam usar sistemas operacionais diferentes em diferentes partes do pipeline.
Por exemplo, digamos que você esteja criando um aplicativo iOS e o serviço de back-end dele. Você pode ter um trabalho executado em um pool de agentes do macOS para criar o aplicativo iOS e outro executado em um pool de agentes do Ubuntu ou Windows para criar o back-end. Você pode até mesmo dizer ao pipeline para executar os dois trabalhos simultaneamente, o que acelera a execução do pipeline.
Ao longo deste módulo, declaramos o pool de agentes na raiz dos arquivos de definição de pipeline para que todos os trabalhos nos pipelines usem o mesmo pool de agentes.
Observação
Você também pode usar estágios no Azure Pipelines para dividir seu pipeline em fases lógicas e adicionar verificações manuais a vários pontos na execução do pipeline. Você aprenderá mais sobre fases em módulos posteriores.
Exemplo de pipeline básico
Agora que você conhece os conceitos básicos do Azure Pipelines, vamos ver uma definição de pipeline simples no YAML:
trigger: none
pool:
vmImage: ubuntu-latest
jobs:
- job:
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'
- script: |
echo We'll add more steps soon.
echo For example, we'll add our Bicep deployment step.
displayName: 'Run a multi-line script'
Vamos examinar cada parte do arquivo em detalhes:
trigger
informa ao pipeline quando executar. Neste caso,trigger: none
informa ao Azure Pipelines que você deseja disparar manualmente o pipeline.pool
informa ao pipeline qual pool de agentes usar quando ele executa as etapas do pipeline. Neste exemplo, o pipeline é executado em um agente que executa o sistema operacional Ubuntu, que vem do pool de agentes hospedados pela Microsoft.jobs
agrupa todos os trabalhos em seu pipeline.job
informa ao pipeline que você tem um único trabalho.Dica
Quando tiver apenas um trabalho no pipeline, você poderá omitir as palavras-chave
jobs
ejob
. Incluímosjob
aqui para deixar claro como os conceitos funcionam juntos em um pipeline.steps
lista a sequência de ações a serem executadas no trabalho. O YAML de exemplo inclui duas etapas. Ambas as etapas são executadas em um único script para exibir um texto. Cada etapa tem um valordisplayName
, que é um nome legível para a etapa. Você verá o nome de exibição ao ver os logs do pipeline. Para criar uma etapa de script com várias linhas, use o caractere de pipe (|
) conforme mostrado no exemplo. Depois que a etapa é executada, você vê as saídas no log do pipeline.
Importante
Em arquivos YAML, o recuo é importante. Veja o exemplo do YAML. Algumas linhas no YAML têm recuo de dois ou quatro espaços. O número de espaços usados é importante. Se você não adicionar os recuos do arquivo corretamente, o Azure Pipelines não poderá interpretá-lo. O Visual Studio Code ajuda você a encontrar e corrigir erros no recuo do arquivo YAML.