Dentro das etapas, há vários recursos disponíveis para controlar o fluxo de execução de um projeto:
- Sequencial: Utilize a propriedade Sequencial de uma etapa para especificar um projeto ou biblioteca. As etapas do projeto ou biblioteca são executadas em sequência, imediatamente após o comando dessa etapa. As etapas para o projeto ou a biblioteca embutido são indentadas no log de etapas.
- Cadeias de aprovação e de falha: uma etapa pode ter sua própria Cadeia de Aprovação e Cadeia de Falha distinta das cadeias especificadas para o projeto.
- Encadeamento: É possível executar as etapas marcadas para encadeamento em paralelo.
Utilize a propriedade Encadeamento de uma etapa para marcá-la para encadeamento.
- Transmissão: É possível executar as etapas marcadas para transmissão
em diversos servidores. Utilize a propriedade Transmissão de uma etapa.
- Condicional: Você pode definir uma etapa para ser executada apenas se uma condição for verdadeira. Também é possível definir um conjunto alternativo de comandos e um projeto ou biblioteca sequencial para ser executado se a condição for falsa. Defina a propriedade Tipo de Etapa como condicional e utilize as propriedades Condição e Outro para utilizar esse recurso.
- Durante o loop: Você pode executar uma etapa em um loop sempre que uma condição for
avaliada como verdadeira. Defina a propriedade Tipo de Etapa como Durante o Loop e utilize as propriedades relacionadas para utilizar esse recurso.
- Comandos com pontos: Os comandos .run e .runwait ativam uma biblioteca ou um projeto a partir
do comando de uma etapa.
Um uso comum de fluxo de execução complexo é a otimização de tarefas,
ou seja, a execução de etapas apenas quando forem necessárias.
Em um ambiente de engenharia do build do software, a otimização de tarefas pode
significar a construção apenas de partes de um aplicativo, conforme for necessário,
em vez do aplicativo inteiro. Uma tarefa pode verificar o status de origem em relação
aos binários recém-compilados e executar uma compilação apenas se houver alterações na origem. Para aplicativos complexos, o fluxo de execução pode responder às dependências
do módulo, bem como ao status de origem.