GitLab CI/CD 잡

GitLab CI/CD 잡 (Jobs)

잡은 GitLab CI/CD 파이프라인의 가장 기본이 되는 요소예요. 빌드, 테스트, 배포 같은 일을 수행하는 명령의 목록으로, .gitlab-ci.yml 파일에 정의합니다. 잡은 러너에서 실행되고, 다른 잡과 독립적으로 돌며, 실행 전체 로그를 담은 잡 로그를 남겨요.

출처: GitLab Docs — CI/CD Jobs

파이프라인에 잡 추가하기

파이프라인에 잡을 넣으려면 .gitlab-ci.yml 파일에 정의하면 되는데, 세 가지 조건을 지켜야 해요.

  • YAML 설정의 최상위에 정의할 것
  • 잡 이름이 고유할 것
  • 실행할 명령을 담은 script 섹션, 또는 하위 파이프라인을 트리거하는 trigger 섹션이 있을 것

잡 이름 규칙

다음 키워드는 잡 이름으로 쓸 수 없어요.

  • image
  • services
  • stages
  • before_script
  • after_script
  • variables
  • cache
  • include
  • deploy 스테이지로 설정된 pages:deploy

따옴표로 감싸면 이름으로는 쓸 수 있지만 파이프라인 구성을 헷갈리게 만들 수 있어서 권장하지 않아요.

잡 키워드 기본값 설정하기

모든 잡에 공통으로 적용할 기본값은 default 키워드로 지정해요. 예를 들어 기본 이미지와 공통 스크립트를 정해두면, 각 잡은 그 값을 상속받아 사용합니다.

default:
  image: 'ruby:2.4'
  before_script:
    - echo Hello World

rspec-job:
  script:
    - bundle exec rspec

이렇게 하면 rspec-job에는 script만 적어도 ruby:2.4 이미지와 echo Hello World가 기본 적용돼요. 잡마다 값을 반복해서 적지 않아도 되는 거죠.

파이프라인에서 잡 보기

잡 상태

잡이 지나가는 상태는 여러 가지가 있어요.

  • canceled: 수동으로 취소되거나 자동으로 중단됨
  • canceling: 취소가 진행 중이고 after_script가 아직 실행 중
  • created: 생성됐지만 아직 처리되지 않음
  • failed: 실행 실패
  • manual: 시작하려면 수동 조작이 필요
  • pending: 러너를 기다리는 대기열 상태
  • preparing: 러너가 실행 환경을 준비 중
  • running: 러너에서 실행 중
  • scheduled: 예약됐지만 아직 시작 전
  • skipped: 조건이나 의존성 때문에 건너뜀
  • success: 성공적으로 완료
  • waiting_for_callback: 외부 서비스의 콜백을 기다리는 중
  • waiting_for_resource: 리소스를 사용할 수 있을 때까지 대기 중

잡의 소스

잡이 어떤 경로로 시작됐는지도 볼 수 있어요. 대표적으로 코드 푸시(push), 사용자가 파이프라인을 직접 실행(pipeline), 예약된 파이프라인(schedule), 다른 잡·파이프라인에 의한 트리거(trigger), GitLab UI에서 직접 실행(web) 등이 있죠.

잡 재시도와 취소

잡을 재시도하면 새 잡 인스턴스가 새 잡 ID로 만들어져요. 재시도한 잡은 원래 잡과 같은 매개변수와 변수를 쓰고, 아티팩트를 만들면 새 아티팩트가 저장됩니다. 다만 재시도를 시작한 사용자와 연결된다는 차이가 있어요.

잡을 강제로 취소하면 잡 토큰이 즉시 무효화됩니다. 러너가 아직 잡을 실행 중이라면 GitLab에 접근할 수 없게 되고, after_script가 끝나기를 기다리지 않고 잡을 중단해요.

더 알아보기