O Que É um Grafo Acíclico Direcionado em CI? Modelando a Ordem dos Jobs
Um grafo acíclico direcionado (DAG) modela um pipeline como jobs (nós) conectados por dependências (arestas direcionadas) que nunca formam um ciclo.
Por baixo dos panos, um scheduler de CI não vê uma lista de jobs; ele vê um grafo. Cada job é um nó, cada dependência é uma aresta direcionada apontando de um pré-requisito para um dependente, e o grafo não tem ciclos (nada pode depender de si mesmo, direta ou indiretamente). Esse DAG é o que permite ao pipeline descobrir o que pode executar agora e o que deve esperar.
Por que "direcionado" e "acíclico"
- Direcionado: as arestas têm direção (A deve terminar antes de B).
- Acíclico: sem ciclos, então dependências não podem entrar em loop para sempre.
- Grafo: jobs e suas arestas de dependência juntos.
Como o scheduler o usa
O scheduler executa qualquer job cujos pré-requisitos estão todos concluídos. À medida que os jobs terminam, mais se tornam elegíveis. Isso naturalmente paraleliza ramos independentes do grafo enquanto respeita cada dependência.
Um exemplo rápido
O build alimenta tanto lint quanto test; test alimenta deploy. O DAG executa build primeiro, depois lint e test em paralelo, depois deploy assim que test estiver pronto. Lint e deploy nunca precisam esperar um pelo outro.
Por que ciclos são proibidos
Se o job A dependesse de B e B dependesse de A, nenhum jamais poderia começar. Ferramentas de CI rejeitam tais ciclos em tempo de validação, porque um grafo acíclico é o único tipo que pode de fato ser agendado até a conclusão.
Forma do DAG e tempo do pipeline
Um DAG largo e raso executa rápido porque muitos jobs vão em paralelo. Um DAG profundo e estreito executa devagar porque cada step espera pelo anterior. O caminho mais longo através do DAG é o critical path que limita o tempo total.
Principais conclusões
- Um DAG de CI modela jobs como nós e dependências como arestas direcionadas e acíclicas.
- O scheduler executa cada job assim que todos os seus pré-requisitos concluem.
- Um grafo mais largo paraleliza mais; o caminho mais longo limita o tempo total.