방향성이 있는 비순환 그래프

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

방향성이 있는 비순환 그래프(Directed Acyclic Graph)는 CI/CD 파이프라인의 맥락에서 작업 간의 관계를 구축하여 단계가 설정되었는지와는 상관없이 실행이 가능한 최대한 빠른 방식으로 수행될 수 있도록 합니다.

예를 들어, 주 프로젝트의 일부로 구축된 특정 도구나 별도의 웹사이트가 있을 수 있습니다. DAG를 사용하여 이러한 작업 간의 관계를 지정할 수 있으며 GitLab은 각 단계가 완료될 때까지 기다리는 대신 가능한 한 빨리 작업을 실행합니다.

다른 CI/CD용 DAG 솔루션과는 달리, GitLab은 선택을 강요하지 않습니다. 단일 파이프라인 내에서 DAG 및 전통적인 단계 기반 운영의 혼합을 구현할 수 있습니다. 구성은 매우 간단하며, 어떤 작업에서도 해당 기능을 활성화하는 데 필요한 키워드가 하나뿐입니다.

다음과 같은 monorepo를 고려해 보십시오:

./service_a
./service_b
./service_c
./service_d

다음과 같이 보이는 파이프라인이 있습니다.

build test deploy
build_a test_a deploy_a
build_b test_b deploy_b
build_c test_c deploy_c
build_d test_d deploy_d

DAG를 사용하면 _a 작업끼리, _b 작업끼리 별도로 관련시킬 수 있으며, 서비스 a가 매우 오래 걸리더라도 서비스 b는 기다리지 않고 가능한 빨리 완료됩니다. 이 같은 파이프라인에서 _c_d는 표준 GitLab 파이프라인과 마찬가지로 단계별 시퀀스로 함께 실행될 수 있습니다.

사용 사례

DAG는 CI/CD 파이프라인 내에서 작업 간의 여러 가지 관계를 해결하는 데 도움이 될 수 있습니다. 가장 일반적으로는 작업이 팬인 또는 팬아웃하거나(다이아몬드 의존성) Merge하는 경우에 해당됩니다. 이는 멀티 플랫폼 빌드를 처리하거나 운영 체제 빌드 또는 독립적으로 배포 가능하지만 관련된 마이크로서비스의 복잡한 배포 그래프와 같이 의존성의 복잡한 웹을 다룰 때 발생할 수 있습니다.

또한 DAG는 파이프라인의 일반적인 빠른 실행 및 빠른 피드백 제공에 도움이 될 수 있습니다. 서로 불필요하게 차단하지 않는 의존성 관계를 생성함으로써 파이프라인은 단계에 관계없이 가능한 한 빨리 실행되어 개발자에게 출력물(포함하여 오류)을 가능한 빨리 제공합니다.

사용법

작업 간의 관계는 needs 키워드를 사용하여 정의됩니다.

needs 키워드는 또한 parallel 키워드와 함께 작동하여 파이프라인 내에서 강력한 병렬화 옵션을 제공합니다.

제한 사항

방향성이 있는 비순환 그래프는 복잡한 기능이며, 초기 MVC를 기준으로 해결해야 할 특정 사용 사례가 있습니다. 자세한 정보는 다음을 참조하십시오:

  • needs 추가 세부 정보.
  • 계획된 개선 사항을 추적하는 관련 에픽(https://gitlab.com/groups/gitlab-org/-/epics/1716).

Needs 시각화

Needs 시각화를 통해 DAG에서 의존하는 작업 간의 관계를 시각화하는 것이 더 쉬워집니다. 이 그래프는 파이프라인에 있는 모든 의존하는 작업을 표시합니다. 관계가 없는 작업은 이 보기에 표시되지 않습니다.

needs 키워드를 사용하는 파이프라인을 볼 때 Needs를 선택하여 needs 시각화를 볼 수 있습니다.

Needs 시각화 예시

노드를 선택하면 해당 노드에 의존하는 모든 작업 경로가 강조 표시됩니다.

작업 경로가 강조된 Needs 시각화

또한 전체 파이프라인 그래프에서 needs 관계를 볼 수도 있습니다.