Sequência de execução do pipeline

Serviços do Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

As execuções representam uma execução de um pipeline. Durante uma execução, o pipeline é processado e os agentes processam uma ou mais tarefas. Uma execução de pipeline inclui tarefas, passos e tarefas. Executa pipelines de integração contínua (CI) e entrega contínua (CD).

Descrição geral do pipeline

Quando executa um pipeline, muitas coisas acontecem nos limites. Embora muitas vezes não precise de saber deles, ocasionalmente é útil ter o panorama geral. A um nível elevado, os Pipelines do Azure:

Do lado do agente, para cada tarefa, um agente irá:

As tarefas podem ser bem-sucedidas, falhar ou ser canceladas. Existem também situações em que um trabalho pode não ser concluído. Compreender como isto acontece pode ajudá-lo a resolver problemas.

Vamos dividir cada ação uma a uma.

Processar o pipeline

Expandir modelos YAML

Para transformar um pipeline numa execução, o Azure Pipelines segue vários passos pela seguinte ordem:

  1. Primeiro, expanda modelos e avalie expressões de modelo.
  2. Em seguida, avalie as dependências ao nível da fase para escolher a primeira fase a executar.
  3. Para cada fase selecionada para execução, ocorrem duas coisas:
  4. Para cada tarefa selecionada para ser executada, expanda várias configurações (strategy: matrix ou strategy: parallel em YAML) em várias tarefas de runtime.
  5. Para cada tarefa de runtime, avalie as condições para decidir se essa tarefa é elegível para execução.
  6. Peça um agente para cada tarefa de runtime elegível.

À medida que as tarefas de runtime são concluídas, o Azure Pipelines verá se existem novas tarefas elegíveis para execução. Se for o caso, os passos 4 a 6 repetem-se com as novas tarefas. Da mesma forma, à medida que as fases forem concluídas, os passos 2 a 6 serão repetidos para quaisquer novas fases.

Esta ordenação ajuda a responder a uma pergunta comum: por que motivo não posso utilizar determinadas variáveis nos meus parâmetros de modelo? Passo 1, expansão de modelo, funciona apenas no texto do documento YAML. As variáveis de runtime não existem durante esse passo. Após o passo 1, os parâmetros de modelo foram resolvidos e já não existem.

Também responde a outro problema comum: por que motivo não posso utilizar variáveis para resolver nomes de ligação/ambiente de serviço? Os recursos são autorizados antes do início da execução de uma fase, pelo que a variáveis ao nível da fase e do trabalho não estarão disponíveis. Podem ser utilizadas variáveis ao nível do pipeline, mas apenas essas variáveis explicitamente incluídas no pipeline. Os grupos de variáveis são, por si só, um recurso sujeito a autorização, pelo que os dados também não estarão disponíveis aquando da verificação da autorização de recursos.

Pedir um agente

Sempre que o Azure Pipelines precisar de executar uma tarefa, irá pedir um agente ao conjunto. (As tarefas de servidor são uma exceção, uma vez que são executadas no próprio servidor do Azure Pipelines.) Os conjuntos de agentes alojados pela Microsoft e autoalojados funcionam de forma ligeiramente diferente.

Pedidos de conjunto de agentes alojados na Microsoft

Primeiro, o serviço verifica as tarefas paralelas da sua organização. Soma todos os trabalhos em execução em todos os agentes alojados na Microsoft e compara-os com o número de tarefas paralelas compradas. Se não existirem blocos paralelos disponíveis, a tarefa tem de aguardar num bloco para libertar.

Assim que estiver disponível um bloco paralelo, a tarefa é encaminhada para o tipo de agente pedido. Conceptualmente, o conjunto alojado pela Microsoft é um conjunto global gigante de máquinas. (Na realidade, são muitos conjuntos físicos diferentes divididos por geografia e tipo de sistema operativo.) Com base no vmImage (no YAML) ou no nome do conjunto (no editor clássico) pedido, é selecionado um agente.

Seleção do conjunto

Todos os agentes no conjunto da Microsoft são novas e novas máquinas virtuais que ainda não executaram pipelines. Quando a tarefa for concluída, a VM do agente será eliminada.

Pedidos de conjuntos de agentes autoalojados

Semelhante ao conjunto alojado pela Microsoft, o serviço verifica primeiro os trabalhos paralelos da sua organização. Soma todos os trabalhos em execução em todos os agentes autoalojados e compara-os com o número de tarefas paralelas compradas. Se não existirem blocos paralelos disponíveis, a tarefa tem de aguardar num bloco para libertar.

Assim que um bloco paralelo estiver disponível, o conjunto autoalojado é examinado para um agente compatível. Os agentes autoalojados oferecem capacidades, que são cadeias que indicam que um software específico está instalado ou que as definições estão configuradas. O pipeline tem exigências, que são as capacidades necessárias para executar a tarefa. Se não for possível encontrar um agente gratuito cujas capacidades correspondam às exigências do pipeline, a tarefa continuará à espera. Se não existirem agentes no conjunto cujas capacidades correspondam às exigências, a tarefa falhará.

Os agentes autoalojados são normalmente reutilizados da execução para a execução. Para agentes autoalojados, uma tarefa de pipeline pode ter efeitos secundários, como o aquecimento de caches ou a maioria das consolidações já disponíveis no repositório local.

Preparar a execução de uma tarefa

Depois de um agente aceitar um trabalho, tem algum trabalho de preparação para fazer. O agente transfere (e coloca em cache para a próxima vez) todas as tarefas necessárias para executar a tarefa. Cria espaço de trabalho no disco para conter o código fonte, artefactos e saídas utilizados na execução. Em seguida, começa a executar os passos.

Executar cada passo

Os passos são executados sequencialmente, um após o outro. Antes de um passo poder começar, todos os passos anteriores têm de estar concluídos (ou ignorados).

Executar cada tarefa

Os passos são implementados por tarefas. As próprias tarefas são implementadas como scripts Node.js ou do PowerShell. O sistema de tarefas encaminha entradas e saídas para os scripts de cópia de segurança. Também fornece alguns serviços comuns, como alterar o caminho do sistema e criar novas variáveis de pipeline.

Cada passo é executado no seu próprio processo, isolando-o do ambiente deixado pelos passos anteriores. Devido a este modelo de processo por passo, as variáveis de ambiente não são preservadas entre passos. No entanto, as tarefas e os scripts têm um mecanismo para comunicar ao agente: os comandos de registo. Quando uma tarefa ou script escreve um comando de registo para desativar o padrão, o agente executará qualquer ação pedida.

Existe um comando de agente para criar novas variáveis de pipeline. As variáveis de pipeline serão convertidas automaticamente em variáveis de ambiente no próximo passo. Para definir uma nova variável myVar com um valor de myValue, um script pode fazê-lo:

echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"

Reportar e recolher resultados

Cada passo pode comunicar avisos, erros e falhas. Os erros e avisos são comunicados à página de resumo do pipeline, marcando a tarefa como "bem-sucedida com problemas". As falhas também são comunicadas à página de resumo, mas marcam a tarefa como "falhou". Um passo é uma falha se comunica explicitamente uma falha (com um ##vso comando) ou termina o script com um código de saída diferente de zero.

Os registos e os resultados fluem de agente para serviço

À medida que os passos são executados, o agente está constantemente a enviar linhas de saída para o serviço. É por isso que pode ver um feed em direto da consola. No final de cada passo, a saída completa do passo também é carregada como um ficheiro de registo. Os registos podem ser transferidos assim que o pipeline estiver concluído. Outros itens que o agente pode carregar incluem artefactos e resultados de teste. Estes também estão disponíveis após a conclusão do pipeline.

Estado e condições

O agente controla o êxito ou a falha de cada passo. À medida que os passos forem bem-sucedidos com problemas ou falhas, o estado da tarefa será atualizado. A tarefa reflete sempre o resultado "pior" de cada um dos seus passos: se um passo falhar, a tarefa também falha.

Antes de executar um passo, o agente verificará a condição desse passo para determinar se deve ser executado. Por predefinição, um passo só será executado quando o estado da tarefa for bem-sucedido ou tiver êxito com problemas. Muitas tarefas têm passos de limpeza que precisam de ser executados independentemente do que aconteceu, para que possam especificar uma condição de "always()". Os passos de limpeza também podem ser definidos para serem executados apenas no cancelamento. Um passo de limpeza bem-sucedido não pode evitar que a tarefa falhe; os trabalhos nunca podem voltar ao sucesso depois de terem sido introduzidas falhas.

Tempos limite e desligamentos

Cada trabalho tem um tempo limite. Se a tarefa não tiver sido concluída na hora especificada, o servidor cancelará a tarefa. Tentará sinalizar o agente para parar e marcará a tarefa como cancelada. Do lado do agente, isto significa cancelar todos os passos restantes e carregar os restantes resultados.

As tarefas têm um período de tolerância conhecido como o tempo limite de cancelamento para concluir qualquer trabalho de cancelamento. (Lembre-se de que os passos podem ser marcados para serem executados mesmo no cancelamento.) Após o tempo limite e o tempo limite de cancelamento, se o agente não tiver comunicado que o trabalho parou, o servidor marcará a tarefa como uma falha.

Uma vez que os Pipelines do Azure distribuem trabalho para computadores de agente, de vez em quando, os agentes podem deixar de responder ao servidor. Isto pode acontecer se o computador anfitrião do agente desaparecer (perda de energia, VM desativada) ou se existir uma falha de rede. Para ajudar a detetar estas condições, o agente envia uma mensagem de heartbeat uma vez por minuto para informar o servidor de que ainda está a funcionar. Se o servidor não receber um heartbeat durante cinco minutos consecutivos, pressupõe que o agente não voltará. A tarefa está marcada como uma falha, informando o utilizador de que deve repetir o pipeline.

Gerir execuções através da CLI

Com a CLI do Azure DevOps, pode listar as execuções de pipeline no projeto e ver detalhes sobre uma execução específica. Também pode adicionar e eliminar etiquetas na execução do pipeline.

Pré-requisitos

  • Tem de ter instalado a extensão da CLI do Azure DevOps, conforme descrito em Introdução à CLI do Azure DevOps.
  • Inicie sessão no Azure DevOps com az login.
  • Para os exemplos neste artigo, defina a organização predefinida com az devops configure --defaults organization=YourOrganizationURL.

Listar execuções de pipeline

Liste as execuções do pipeline no projeto com o comando az pipelines runs list . Para começar, veja Introdução à CLI do Azure DevOps.

az pipelines runs list [--branch]
                       [--org]
                       [--pipeline-ids]
                       [--project]
                       [--query-order {FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc, StartTimeDesc}]
                       [--reason {all, batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated, validateShelveset}]
                       [--requested-for]
                       [--result {canceled, failed, none, partiallySucceeded, succeeded}]
                       [--status {all, cancelling, completed, inProgress, none, notStarted, postponed}]
                       [--tags]
                       [--top]

Parâmetros opcionais

  • branch: filtre por compilações para este ramo.
  • org: URL da organização do Azure DevOps. Pode configurar a organização predefinida com az devops configure -d organization=ORG_URL. Necessário se não estiver configurado como predefinido ou recolhido com git config. Exemplo: --org https://dev.azure.com/MyOrganizationName/.
  • pipeline-ids: IDs separados pelo espaço de definições para os quais listar compilações.
  • project: Nome ou ID do projeto. Pode configurar o projeto predefinido com az devops configure -d project=NAME_OR_ID. Necessário se não estiver configurado como predefinido ou recolhido com git config.
  • query-order: defina a ordem pela qual as execuções de pipeline estão listadas. Os valores aceites são FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc e StartTimeDesc.
  • motivo: apenas compilações de listas por este motivo especificado. Os valores aceites são batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated e validateShelveset.
  • requested-for: limite para as compilações pedidas para um utilizador ou grupo especificado.
  • resultado: limite para as compilações com um resultado especificado. Os valores aceites são cancelados, falhados, nenhum, parcialmente Succeeded ebem-sucedidos.
  • estado: limite para as compilações com um estado especificado. Os valores aceites são todos, cancelando, concluído, inProgress, nenhum, notStarted e adiado.
  • etiquetas: limite para as compilações com cada uma das etiquetas especificadas. Espaço separado.
  • top: número máximo de compilações a listar.

Exemplo

O comando seguinte lista as três primeiras execuções de pipeline que têm o estado concluído e um resultado de êxito e devolve o resultado no formato de tabela.

az pipelines runs list --status completed --result succeeded --top 3 --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  ------
125       20200124.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 18:56:10.067588  manual
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual
122       20200123.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:48:05.574742  manual

Mostrar detalhes da execução do pipeline

Mostrar os detalhes de uma execução de pipeline no projeto com o comando az pipelines runs show . Para começar, veja Introdução à CLI do Azure DevOps.

az pipelines runs show --id
                       [--open]
                       [--org]
                       [--project]

Parâmetros

  • ID: Obrigatório. ID da execução do pipeline.
  • open: Opcional. Abre a página de resultados da compilação no browser.
  • org: URL da organização do Azure DevOps. Pode configurar a organização predefinida com az devops configure -d organization=ORG_URL. Necessário se não estiver configurado como predefinido ou recolhido com git config. Exemplo: --org https://dev.azure.com/MyOrganizationName/.
  • project: Nome ou ID do projeto. Pode configurar o projeto predefinido com az devops configure -d project=NAME_OR_ID. Necessário se não estiver configurado como predefinido ou recolhido com git config.

Exemplo

O comando seguinte mostra os detalhes da execução do pipeline com o ID 123 e devolve os resultados no formato de tabela. Também abre o browser para a página de resultados da compilação.

az pipelines runs show --id 122 --open --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  --------
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual

Adicionar etiqueta à execução do pipeline

Adicione uma etiqueta a uma execução de pipeline no projeto com o comando az pipelines runs tag add . Para começar, veja Introdução à CLI do Azure DevOps.

az pipelines runs tag add --run-id
                          --tags
                          [--org]
                          [--project]

Parâmetros

  • run-id: Obrigatório. ID da execução do pipeline.
  • tags: Necessário. Etiquetas a adicionar à execução do pipeline (valores separados por vírgulas).
  • org: URL da organização do Azure DevOps. Pode configurar a organização predefinida com az devops configure -d organization=ORG_URL. Necessário se não estiver configurado como predefinido ou recolhido com git config. Exemplo: --org https://dev.azure.com/MyOrganizationName/.
  • project: Nome ou ID do projeto. Pode configurar o projeto predefinido com az devops configure -d project=NAME_OR_ID. Necessário se não estiver configurado como predefinido ou recolhido com git config.

Exemplo

O comando seguinte adiciona a etiqueta YAML à execução do pipeline com o ID 123 e devolve o resultado no formato JSON.

az pipelines runs tag add --run-id 123 --tags YAML --output json

[
  "YAML"
]

Listar etiquetas de execução de pipeline

Liste as etiquetas de uma execução de pipeline no projeto com o comando az pipelines runs tag list . Para começar, veja Introdução à CLI do Azure DevOps.

az pipelines runs tag list --run-id
                           [--org]
                           [--project]

Parâmetros

  • run-id: Obrigatório. ID da execução do pipeline.
  • org: URL da organização do Azure DevOps. Pode configurar a organização predefinida com az devops configure -d organization=ORG_URL. Necessário se não estiver configurado como predefinido ou recolhido com git config. Exemplo: --org https://dev.azure.com/MyOrganizationName/.
  • project: Nome ou ID do projeto. Pode configurar o projeto predefinido com az devops configure -d project=NAME_OR_ID. Necessário se não estiver configurado como predefinido ou recolhido com git config.

Exemplo

O comando seguinte lista as etiquetas para a execução do pipeline com o ID 123 e devolve o resultado no formato de tabela.

az pipelines runs tag list --run-id 123 --output table

Tags
------
YAML

Eliminar etiqueta da execução do pipeline

Elimine uma etiqueta de uma execução de pipeline no seu projeto com o comando az pipelines runs tag delete . Para começar, veja Introdução à CLI do Azure DevOps.

az pipelines runs tag delete --run-id
                             --tag
                             [--org]
                             [--project]

Parâmetros

  • run-id: Obrigatório. ID da execução do pipeline.
  • tag: Necessário. Etiqueta a eliminar da execução do pipeline.
  • org: URL da organização do Azure DevOps. Pode configurar a organização predefinida com az devops configure -d organization=ORG_URL. Necessário se não estiver configurado como predefinido ou recolhido com git config. Exemplo: --org https://dev.azure.com/MyOrganizationName/.
  • project: Nome ou ID do projeto. Pode configurar o projeto predefinido com az devops configure -d project=NAME_OR_ID. Necessário se não estiver configurado como predefinido ou recolhido com git config.

Exemplo

O seguinte comando elimina a etiqueta YAML da execução do pipeline com o ID 123.

az pipelines runs tag delete --run-id 123 --tag YAML