머지 리퀘스트 파이프라인 문제 해결
머지 리퀘스트 파이프라인 문제 해결
머지 리퀘스트(merge request) 파이프라인을 사용하다 보면 예상치 못한 파이프라인이 두 개 생기거나, 파이프라인이 실패로 표시되는 등 다양한 문제를 만나게 돼요. 이 문서는 GitLab에서 머지 리퀘스트 파이프라인을 다룰 때 흔히 부딪히는 문제들을 하나씩 짚어보고, 왜 이런 일이 생기는지와 어떻게 해결하는지를 옆에서 설명해 주는 방식으로 정리했어요.
이 글은 원문을 충실히 번역한 자료이며, 특히 해당 파이프라인이 언제 실행되는지(브랜치 파이프라인인지 머지 리퀘스트 파이프라인인지)를 먼저 파악하는 게 문제 해결의 핵심이라는 점을 유심히 보시면 좋아요.
출처: 문서
본문
머지 리퀘스트 파이프라인과 관련된 다음 문제들을 만날 수 있어요.
브랜치에 푸시했을 때 파이프라인이 두 개 생기는 경우
머지 리퀘스트에서 파이프라인이 중복으로 생긴다면, 파이프라인이 브랜치와 머지 리퀘스트 두 곳에서 동시에 실행되도록 설정되어 있을 가능성이 높아요. 이런 중복을 피하려면 파이프라인 설정을 중복 파이프라인 피하기 문서를 참고해 조정하세요.
workflow:rules를 추가하면 브랜치 파이프라인에서 머지 리퀘스트 파이프라인으로 전환할 수도 있어요. 브랜치에 머지 리퀘스트가 열리게 되면 그때부터 파이프라인이 머지 리퀘스트 파이프라인으로 전환됩니다.
잘못된 CI/CD 설정 파일을 푸시했을 때 파이프라인이 두 개 생기는 경우
머지 리퀘스트의 브랜치에 잘못된 CI/CD 설정을 푸시하면, 파이프라인 탭에 실패한 파이프라인이 두 개 나타나요. 하나는 실패한 브랜치 파이프라인이고, 다른 하나는 실패한 머지 리퀘스트 파이프라인이에요.
설정 문법이 고쳐지면 더 이상 실패한 파이프라인이 생기지 않아야 해요. 설정 문제를 찾아 고치려면 다음 도구를 활용할 수 있어요.
머지 리퀘스트 파이프라인이 실패로 표시되는데 최신 파이프라인은 성공한 경우
단일 머지 리퀘스트의 Pipelines 탭에는 브랜치 파이프라인과 머지 리퀘스트 파이프라인이 동시에 존재할 수 있어요. 이는 설정 때문일 수도 있고, 실수로 인해 발생했을 수도 있어요.
프로젝트에 Pipelines must succeed(파이프라인 성공 필수)가 활성화되어 있고 두 유형의 파이프라인이 모두 존재한다면, 검사 대상은 브랜치 파이프라인이 아니라 머지 리퀘스트 파이프라인이에요.
따라서 머지 리퀘스트 파이프라인이 실패하면, 브랜치 파이프라인의 결과와는 관계없이 MR 파이프라인 결과가 실패로 표시돼요. 하지만 다음과 같은 점을 주의하세요.
- 이러한 조건은 강제되지 않아요.
- 머지 리퀘스트를 막거나 통과시키는 데 어떤 파이프라인의 결과가 사용될지는 **경쟁 조건(race condition)**에 의해 결정돼요.
- 이 버그는 이슈 384927에서 추적되고 있어요.
An error occurred while trying to run a new pipeline for this merge request. 오류
이 오류는 머지 리퀘스트에서 Run pipeline을 선택했는데, 더 이상 그 프로젝트에 머지 리퀘스트 파이프라인이 활성화되어 있지 않을 때 발생할 수 있어요.
이 오류 메시지가 나타나는 몇 가지 가능한 이유는 다음과 같아요.
- 프로젝트에 머지 리퀘스트 파이프라인이 활성화되어 있지 않고, Pipelines 탭에 나열된 파이프라인도 없으며, Run pipeline을 선택한 경우.
- 프로젝트에 머지 리퀘스트 파이프라인이 있었지만 설정이 제거된 경우. 예를 들어 다음과 같아요.
- 머지 리퀘스트가 생성될 당시
.gitlab-ci.yml설정 파일에 머지 리퀘스트 파이프라인이 활성화되어 있었어요. - 머지 리퀘스트의 Pipelines 탭에서 Run pipeline 옵션을 사용할 수 있고, 이 시점에 Run pipeline을 선택해도 오류가 발생하지 않을 가능성이 높아요.
- 프로젝트의
.gitlab-ci.yml파일이 머지 리퀘스트 파이프라인 설정을 제거하도록 변경되었어요. - 브랜치가 리베이스되어 업데이트된 설정이 머지 리퀘스트에 반영되었어요.
- 이제 파이프라인 설정이 더 이상 머지 리퀘스트 파이프라인을 지원하지 않는데도, 머지 리퀘스트 파이프라인을 실행하기 위해 Run pipeline을 선택했어요.
- 머지 리퀘스트가 생성될 당시
Run pipeline이 사용 가능하지만 프로젝트에 머지 리퀘스트 파이프라인이 활성화되어 있지 않다면, 이 옵션을 사용하지 마세요. 새 브랜치 파이프라인을 트리거하려면 커밋을 푸시하거나 브랜치를 리베이스할 수 있어요.
Merge blocked: pipeline must succeed. Push a new commit that fixes the failure 메시지
이 메시지는 머지 리퀘스트 파이프라인, 병합 결과 파이프라인, 또는 머지 트레인 파이프라인이 실패했거나 취소되었을 때 표시돼요. 브랜치 파이프라인이 실패했을 때는 이 메시지가 나타나지 않아요.
머지 리퀘스트 파이프라인이나 병합 결과 파이프라인이 취소되거나 실패했다면, 다음을 할 수 있어요.
- 머지 리퀘스트의 파이프라인 탭에서 Run pipeline을 선택해 전체 파이프라인을 다시 실행하세요.
- 실패한 작업만 다시 실행하세요. 전체 파이프라인을 다시 실행한다면 이 단계는 필요하지 않아요.
- 실패를 고치는 새 커밋을 푸시하세요.
머지 트레인 파이프라인이 실패했다면, 다음을 할 수 있어요.
- 실패를 확인하고,
/merge퀵 액션을 사용해 머지 리퀘스트를 다시 트레인에 즉시 추가할 수 있는지 판단하세요. - 머지 리퀘스트의 파이프라인 탭에서 Run pipeline을 선택해 전체 파이프라인을 다시 실행한 후, 머지 리퀘스트를 다시 트레인에 추가하세요.
- 실패를 고치는 커밋을 푸시한 뒤, 머지 리퀘스트를 다시 트레인에 추가하세요.
머지 트레인 파이프라인이 머지 리퀘스트가 병합되기 전에, 실패 없이 취소되었다면 다음을 할 수 있어요.
- 다시 트레인에 추가하세요.
더 알아보기
머지 리퀘스트 파이프라인을 처음 구성하는 단계라면 merged results pipeline이나 merge trains 문서를 함께 보면, 어떤 상황에서 어떤 파이프라인 유형을 쓰는 게 좋은지 더 명확해져요. 또한 workflow:rules와 rules 키워드의 조합을 익히면 중복 파이프라인 문제 자체를 예방할 수 있답니다.