[Gitlab] .gitlab-ci.yml 스크립트 작성 기초 (feat. Runner 사용하기)

2024. 10. 16. 16:00IT/Git

반응형

GitLab CI(Continuous Integration)는 소프트웨어 개발에서 코드 품질을 유지하고, 빌드, 테스트, 배포 등의 작업을 자동화하는 도구다. GitLab CI 스크립트는 .gitlab-ci.yml 파일에 정의되며, 코드 변경 시 자동으로 실행되게 된다. 여기서는 GitLab CI의 주요 개념들과 함께 러너(Runner) 태그 개념까지 설명해보겠다.

 

이제는 Git 보다도 Gitlab이 대세가 되어가는 느낌이다.

1. Job (작업)

Job은 파이프라인의 가장 작은 단위로, 하나의 작업을 정의한다. 빌드, 테스트, 배포 등 각 작업이 job으로 표현된다. job은 독립적으로 실행되며, 여러 job을 순차적으로 또는 병렬로 실행할 수 있다.

2. Stage (단계)

Stage는 여러 job을 묶는 단위이다. 파이프라인은 순차적으로 단계별로 진행되며, 한 단계가 완료된 후에 다음 단계로 넘어간다. 예를 들어, build, test, deploy 단계가 있을 수 있다.

3. Script (스크립트)

Script는 각 job에서 실행할 명령어를 정의합니다. 이는 셸 명령어를 기반으로 하며, 각 작업의 구체적인 실행 내용을 담고 있다.

4. Artifacts (산출물)

Artifacts는 특정 작업의 결과물(예: 컴파일된 파일이나 로그 등)을 다른 작업이나 단계에서 사용할 수 있도록 저장하는 기능이다.

5. Cache (캐시)

Cache는 빌드 간에 공유할 수 있는 파일을 저장하여, 불필요한 다운로드나 작업을 줄여 빌드 시간을 단축하는데 도움을 준다.

6. Variables (변수)

Variables는 환경에 맞춘 설정값이나 민감한 데이터를 관리할 수 있게 하는 기능이다. 환경 변수로 설정되며, 파이프라인 전반에 걸쳐 사용할 수 있다.

7. Runner (러너)와 태그(Tag) 개념

Runner는 GitLab CI 파이프라인에서 정의된 job을 실제로 실행하는 역할을 한다. Runner는 특정한 서버에 설치되어 있으며, 여러 파이프라인에서 공유될 수 있다. 러너는 각 job을 받아들이고, 스크립트에 정의된 작업을 수행한다.

Gitlab CI 스크립트 예시

stages:          # 파이프라인의 단계 정의
  - build
  - test
  - deploy

build_job:       # 'build' 단계의 작업 정의
  stage: build   # 해당 작업이 속한 단계
  tags:
    - linux      # 'linux' 태그를 가진 러너에서 실행
  script:
    - echo "Building the project"
    - make build

test_job:        # 'test' 단계의 작업 정의
  stage: test
  tags:
    - windows    # 'windows' 태그를 가진 러너에서 실행
  script:
    - echo "Running tests"
    - make test

deploy_job:      # 'deploy' 단계의 작업 정의
  stage: deploy
  script:
    - echo "Deploying the project"
    - make deploy

 

이 스크립트는 build, test, deploy 세 단계로 구성되어 있으며, 각 단계에서 작업이 정의되어 있다. 태그를 활용하여 build_job은 리눅스 환경에서, test_job은 윈도우 환경에서 실행되도록 설정되어 있다. 이처럼 러너 태그를 사용하면 특정 환경에 맞는 작업을 선택적으로 실행할 수 있다. script 부분을 커스텀 하면 다양한 명령어를 실행하 수 있도록 만들수도 있다.

GitLab CI의 러너 태그는 다양한 환경에서 작업을 분배하고 관리하는 데 매우 유용한 기능으로, 프로젝트의 요구 사항에 따라 유연하게 활용할 수 있다.

 

나올 수 있는 질문

Q. job에 특정 runner를 실행하기 위한 tag 를 작성해두었는데, runner 가 없으면 어떻게 될까?

A. 해당 job 은 계속 pending 상태로 남아있게 되어 그 파이프라인이 무한히 안끝날 수 있다. 따라서 ci스크립트에 job이 있다면 해당 job을 실행시킬 수 있는 runner는 반드시 명시해두어야 한다.

Q. runner 에 그냥 아무 공용 runner를 등록해놨는데, job을 실행하면 얘가 돌아갈까?

A. job과 runner 에 tag 가 설정되어 있지 않다면 등록해둔 공용(tag 없음) runner가 실행될 수 있다. 오동작이 될 수도 있고.. 웬만하면, 위에서 말한것 처럼 job과 runner는 맵핑되도록 스크립트 작성하도록 하자. But, runner에 tag가 명시되어 있다면, job에서 해당 tag를 호출하지 않는 이상 runner가 실행될 경우는 없기 때문에 문제는 없겠다.

반응형