GitLab CI/CD 잡
GitLab CI/CD 잡 (Jobs)
잡은 GitLab CI/CD 파이프라인의 가장 기본이 되는 요소예요. 빌드, 테스트, 배포 같은 일을 수행하는 명령의 목록으로, .gitlab-ci.yml 파일에 정의합니다. 잡은 러너에서 실행되고, 다른 잡과 독립적으로 돌며, 실행 전체 로그를 담은 잡 로그를 남겨요.
파이프라인에 잡 추가하기
파이프라인에 잡을 넣으려면 .gitlab-ci.yml 파일에 정의하면 되는데, 세 가지 조건을 지켜야 해요.
- YAML 설정의 최상위에 정의할 것
- 잡 이름이 고유할 것
- 실행할 명령을 담은
script섹션, 또는 하위 파이프라인을 트리거하는trigger섹션이 있을 것
잡 이름 규칙
다음 키워드는 잡 이름으로 쓸 수 없어요.
imageservicesstagesbefore_scriptafter_scriptvariablescacheincludedeploy스테이지로 설정된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가 끝나기를 기다리지 않고 잡을 중단해요.