고급 구성

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

GitLab Runner 및 개별 등록된 러너의 동작을 변경하려면 config.toml 파일을 수정하십시오.

config.toml 파일은 다음 위치에 있습니다.

  • 루트로 GitLab Runner를 실행할 때 *nix 시스템에서, /etc/gitlab-runner/입니다. 이 디렉터리는 서비스 구성의 경로입니다.
  • 루트로 GitLab Runner를 실행하지 않을 때 *nix 시스템에서, ~/.gitlab-runner/입니다.
  • 다른 시스템에서는 ./입니다.

대부분의 옵션을 변경할 때는 GitLab Runner를 다시 시작할 필요가 없습니다. 이에는 [[runners]] 섹션의 매개변수 및 전역 섹션의 대부분의 매개변수가 포함됩니다. listen_address를 제외한 대부분의 옵션을 변경할 때는 러너를 다시 등록할 필요가 없습니다.

GitLab Runner는 구성 수정을 3초마다 확인하고 필요에 따라 다시로드합니다. 또한 SIGHUP 신호에 응답하여 구성을 다시로드합니다.

구성 유효성 검사

구성 유효성 검사는 config.toml 파일의 구조를 확인하는 프로세스입니다. 구성 유효성 검사기의 출력은 info 수준 메시지만 제공합니다.

구성 유효성 검사 프로세스는 정보 목적으로만 사용됩니다. 출력을 사용하여 러너 구성에 잠재적인 문제를 식별할 수 있습니다. 그러나 구성 유효성 검사는 모든 가능한 문제를 잡아내지 않을 수 있으며 메시지의 부재가 config.toml 파일이 완벽하다는 것을 보장하지 않습니다.

전역 섹션

이러한 설정은 전역적으로 적용됩니다. 모든 러너에 적용됩니다.

설정 설명
concurrent 등록된 모든 러너 전체에서 동시에 실행되는 작업 수를 제한합니다. 각 [[runners]] 섹션은 고유한 제한을 정의할 수 있지만, 이 값은 모든 값을 합친 것의 최대 값을 설정합니다. 예를 들어, 10의 값은 최대 10개의 작업만 동시에 실행될 수 있음을 의미합니다. 0은 금지됩니다. 이 값을 사용하면 러너 프로세스가 중대한 오류로 종료됩니다. Docker Machine 실행기(자동 확장을 위한)와 함께 이 설정이 어떻게 작동하는지 보기.
log_level 로그 수준을 정의합니다. 옵션으로는 debug, info, warn, error, fatal, panic이 있습니다. 이 설정은 명령행인자 --debug, -l, 또는 --log-level로 설정된 수준보다 우선순위가 낮습니다.
log_format 로그 형식을 지정합니다. 옵션으로는 runner, text, json이 있습니다. 이 설정은 명령행 인수 --log-format으로 설정된 형식보다 우선순위가 낮습니다. 기본값은 컬러링을 위한 ANSI 이스케이프 코드를 포함하는 runner입니다.
check_interval 러너가 새 작업을 확인하는 간격 길이를 초단위로 정의합니다. 기본값은 3입니다. 0 또는 더 낮은 값으로 설정하면 기본값이 사용됩니다.
sentry_dsn 시스템 레벨의 모든 오류를 Sentry로 추적하도록 설정합니다.
connection_max_age GitLab 서버에 대한 TLS keepalive 연결이 다시 연결되기 전에 열려 있는 최대 기간을 정의합니다. 기본값은 15분에 해당하는 15m입니다. 0 또는 더 낮은 값으로 설정하면 연결이 일찍이 가능한만큼 유지됩니다.
listen_address Prometheus 메트릭 HTTP 서버가 수신해야 하는 주소(<호스트>:<포트>)를 정의합니다.
shutdown_timeout 강제 종료 작업의 시간 초과 및 프로세스 종료까지의 시간을 초 단위로 정의합니다. 기본값은 30입니다. 0 또는 더 낮은 값으로 설정하면 기본값이 사용됩니다.

구성 예시:

concurrent = 4
log_level = "warning"

log_format 예시 (줄임)

runner

Runtime platform                                    arch=amd64 os=darwin pid=37300 revision=HEAD version=development version
Starting multi-runner from /etc/gitlab-runner/config.toml...  builds=0
WARNING: Running in user-mode.
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...

Configuration loaded                                builds=0
listen_address not defined, metrics & debug endpoints disabled  builds=0
[session_server].listen_address not defined, session endpoints disabled  builds=0

text

INFO[0000] Runtime platform                              arch=amd64 os=darwin pid=37773 revision=HEAD version="development version"
INFO[0000] Starting multi-runner from /etc/gitlab-runner/config.toml...  builds=0
WARN[0000] Running in user-mode.
WARN[0000] Use sudo for system-mode:
WARN[0000] $ sudo gitlab-runner...
INFO[0000]
INFO[0000] Configuration loaded                          builds=0
INFO[0000] listen_address not defined, metrics & debug endpoints disabled  builds=0
INFO[0000] [session_server].listen_address not defined, session endpoints disabled  builds=0

json

{"arch":"amd64","level":"info","msg":"Runtime platform","os":"darwin","pid":38229,"revision":"HEAD","time":"2020-06-05T15:57:35+02:00","version":"development version"}
{"builds":0,"level":"info","msg":"Starting multi-runner from /etc/gitlab-runner/config.toml...","time":"2020-06-05T15:57:35+02:00"}
{"level":"warning","msg":"Running in user-mode.","time":"2020-06-05T15:57:35+02:00"}
{"level":"warning","msg":"Use sudo for system-mode:","time":"2020-06-05T15:57:35+02:00"}
{"level":"warning","msg":"$ sudo gitlab-runner...","time":"2020-06-05T15:57:35+02:00"}
{"level":"info","msg":"","time":"2020-06-05T15:57:35+02:00"}
{"builds":0,"level":"info","msg":"Configuration loaded","time":"2020-06-05T15:57:35+02:00"}
{"builds":0,"level":"info","msg":"listen_address not defined, metrics \u0026 debug endpoints disabled","time":"2020-06-05T15:57:35+02:00"}
{"builds":0,"level":"info","msg":"[session_server].listen_address not defined, session endpoints disabled","time":"2020-06-05T15:57:35+02:00"}

check_interval 작동 방식

만약 config.toml에 두 개 이상의 [[runners]] 섹션이 있다면, GitLab Runner는 GitLab Runner가 구성된 GitLab 인스턴스로 작업 요청을 지속적으로 스케줄하는 루프를 포함합니다.

다음 예시는 check_interval이 10초이고 두 개의 [[runners]] 섹션(runner-1runner-2)을 포함합니다. GitLab Runner는 10초마다 요청을 보내고 5초 동안 대기합니다:

  1. check_interval 값 가져오기 (10s).
  2. 러너 디렉터리 가져오기 (runner-1, runner-2).
  3. 대기 간격 계산하기 (10s / 2 = 5s).
  4. 무한 루프 시작:
    1. runner-1에 대한 작업 요청.
    2. 5초 동안 대기.
    3. runner-2에 대한 작업 요청.
    4. 5초 동안 대기.
    5. 반복.

이 예에서 각 러너의 프로세스는 5초마다 작업 요청을 합니다. 만약 runner-1runner-2가 동일한 GitLab 인스턴스에 연결되어 있다면, 해당 GitLab 인스턴스는 이러한 러너에서 새 요청을 5초마다 받습니다.

runner-1에 대한 첫 번째 및 두 번째 요청 사이에 두 차례의 대기 기간이 있습니다. 각 기간은 5초가 걸리므로 runner-1에 대한 연이은 요청 사이에는 대략 10초가 걸립니다. runner-2에도 동일하게 적용됩니다.

만약 여러 러너를 정의하면, 대기 간격이 줄어듭니다. 그러나 러너에 대한 요청은 다른 모든 러너에 대한 모든 요청 및 대기 기간이 호출된 후에 반복됩니다.

[session_server] 섹션

[session_server] 섹션을 사용하면 대화형 웹 터미널에서 작업을 상호 작용할 수 있습니다.

[session_server] 섹션은 루너마다가 아닌 루트 수준에서 지정되어야 합니다.

[session_server]
  listen_address = "[::]:8093" # 8093 포트에서 모든 사용 가능한 인터페이스에서 대기
  advertise_address = "runner-host-name.tld:8093"
  session_timeout = 1800

[session_server] 섹션을 구성할 때:

  • listen_addressadvertise_address에는 host:port 형식을 사용하며, host는 IP 주소 (127.0.0.1:8093) 또는 도메인 (my-runner.example.com:8093)입니다. 러너는 안전한 연결을 위해 이 정보를 사용합니다.
  • 웹 브라우저가 advertise_address에 연결할 수 있는지 확인합니다. 라이브 세션은 웹 브라우저에서 시작됩니다.
  • advertise_address가 공개 IP 주소인지 확인하세요. allow_local_requests_from_web_hooks_and_services 응용 프로그램 설정을 활성화하지 않은 경우에도 GitLab Runner가 그에 노출됩니다.
설정 설명
listen_address 세션 서버를 위한 내부 URL.
advertise_address 세션 서버에 접근할 URL. GitLab Runner가 GitLab에 노출합니다. 정의되지 않은 경우 listen_address를 사용합니다.
session_timeout 작업 완료 후 세션이 활성 상태로 유지되는 시간(초). Timeout은 작업이 완료되지 않도록 차단합니다. 기본값은 1800 (30분) 입니다.

세션 서버 및 터미널 지원을 비활성화하려면, [session_server] 섹션을 삭제하세요.

note
러너 인스턴스가 이미 실행 중인 경우 [session_server] 섹션의 변경 사항이 적용되려면 gitlab-runner restart를 실행해야할 수 있습니다.

GitLab Runner Docker 이미지를 사용하는 경우, 포트 8093을 노출해야 합니다. 이를 위해 docker run 명령-p 8093:8093를 추가해야 합니다.

[[runners]] 섹션

[[runners]] 섹션은 하나의 러너를 정의합니다.

설정 설명
name 러너의 설명. 정보용.
url GitLab 인스턴스 URL.
token 러너의 인증 토큰. 러너 등록 시 획득. registration token과 다름.
tls-ca-file HTTPS 사용 시 피어를 확인하는 인증서가 들어있는 파일. 자체 서명 인증서 또는 사용자 정의 인증 기관 문서 참조.
tls-cert-file HTTPS 사용 시 피어와의 인증에 사용되는 인증서가 들어있는 파일.
tls-key-file HTTPS 사용 시 피어와의 인증에 사용되는 개인 키가 들어있는 파일.
limit 등록된 러너가 동시에 처리할 수 있는 작업 수를 제한합니다. 0 (기본값)은 제한하지 않음을 의미합니다. 도커 머신 실행기와 함께이 설정이 어떻게 작동하는지 보기
executor 프로젝트를 어떻게 빌드할지 선택합니다.
shell 스크립트를 생성할 쉘의 이름. 기본값은 플랫폼에 따라 다름.
builds_dir 선택한 실행기의 문맥에서 빌드가 저장되는 디렉터리의 절대 경로. 예를 들면 로컬, 도커 또는 SSH입니다.
cache_dir 선택한 실행기의 문맥에서 빌드 캐시가 저장되는 디렉터리의 절대 경로. 예를 들면 로컬, 도커 또는 SSH입니다. docker 실행기를 사용하는 경우 이 디렉터리는 volumes 매개변수에 포함되어야 합니다.
environment 환경 변수를 추가하거나 덮어씁니다.
request_concurrency GitLab에서 새 작업에 대한 동시 요청 수를 제한합니다. 기본값은 1입니다.
output_limit 킬로바이트 단위의 최대 빌드 로그 크기. 기본값은 4096 (4MB)입니다.
pre_clone_script 사용되지 않음 - 대신 pre_get_sources_script 사용해야 함.
pre_get_sources_script Git 리포지터리 및 서브모듈을 업데이트하기 전에 러너에서 실행할 명령어. 먼저 Git 클라이언트 구성을 조정하는 데 사용합니다. 여러 명령어를 삽입하려면 (삼중 인용 부호가 있는) 여러 줄 문자 또는 \n 문자를 사용하세요.
post_clone_script 사용되지 않음 - 대신 post_get_sources_script 사용해야 함.
post_get_sources_script Git 리포지터리 및 서브모듈 업데이트 후 러너에서 실행할 명령어. 여러 명령어를 삽입하려면 (삼중 인용 부호가 있는) 여러 줄 문자 또는 \n 문자를 사용하세요.
pre_build_script 작업 실행 전 러너에서 실행할 명령어. 여러 명령어를 삽입하려면 (삼중 인용 부호가 있는) 여러 줄 문자 또는 \n 문자를 사용하세요.
post_build_script 작업 실행 직후 러너에서 실행할 명령어. 하지만 after_script을 실행하기 전. 여러 명령어를 삽입하려면 (삼중 인용 부호가 있는) 여러 줄 문자 또는 \n 문자를 사용하세요.
clone_url GitLab 인스턴스의 URL 덮어쓰기. 러너가 GitLab URL에 연결하지 못하는 경우에만 사용됩니다.
debug_trace_disabled CI_DEBUG_TRACE 기능을 비활성화합니다. true로 설정하면 사용자가 CI_DEBUG_TRACEtrue로 설정해도 디버그 로그 (추적)가 비활성화된 상태로 유지됩니다.
referees 작업 결과를 GitLab에 작업 아티팩트로 전달하는 추가 작업 모니터링 워커입니다.
unhealthy_requests_limit 러너 워커가 비활성화되기 전에 새 작업 요청에 대해 불건전한 응답을 수신하는 횟수.
unhealthy_interval 러너 워커가 불건전한 요청 제한을 초과한 후 비활성화되는 기간. ‘3600s’, ‘1h30min’ 등과 같은 구문을 지원합니다.

예시:

[[runners]]
  name = "ruby-2.7-docker"
  url = "https://CI/"
  token = "TOKEN"
  limit = 0
  executor = "docker"
  builds_dir = ""
  shell = ""
  environment = ["ENV=value", "LC_ALL=en_US.UTF-8"]
  clone_url = "http://gitlab.example.local"

clone_url 작동 방법

GitLab 인스턴스가 러너가 사용할 수 없는 URL에 있는 경우 clone_url을 구성할 수 있습니다.

예를 들어 방화벽이 러너가 URL에 도달하는 것을 막을 수 있습니다. 러너가 192.168.1.23의 노드에 도달할 수 있다면 clone_urlhttp://192.168.1.23으로 설정하세요.

만약 clone_url이 설정되면, 러너는 http://gitlab-ci-token:s3cr3tt0k3n@192.168.1.23/namespace/project.git 형식의 복제 URL을 생성합니다.

unhealthy_requests_limitunhealthy_interval 작동 방법

GitLab 인스턴스가 (예를 들어 버전 업그레이드 중에) 장기간 사용 불가능한 경우 해당 인스턴스에 구성된 러너는 유휴 상태가 되며 GitLab 인스턴스가 다시 사용 가능한 후 30-60분 동안 작업 처리를 재개하지 않습니다.

러너가 유휴 상태로 남아 있는 시간을 늘리거나 줄이려면 unhealthy_interval 설정을 변경하세요.

러너가 GitLab 서버에 연결을 시도하고 유효하지 않은 대기 시간을 받기 전에 시도할 횟수를 변경하려면 unhealthy_requests_limit 설정을 변경하세요. 더 많은 정보는 How check_interval works를 참조하세요.

실행자

다음 실행자가 사용 가능합니다.

실행자 필수 구성 작업 실행 위치
shell   로컬 셸. 기본 실행자.
docker [runners.docker]Docker Engine Docker 컨테이너 내.
docker-windows [runners.docker]Docker Engine Windows Docker 컨테이너 내.
ssh [runners.ssh] 원격으로 SSH.
parallels [runners.parallels][runners.ssh] Parallels 가상 머신, 하지만 SSH로 연결.
virtualbox [runners.virtualbox][runners.ssh] VirtualBox 가상 머신, 하지만 SSH로 연결.
docker+machine [runners.docker][runners.machine] docker와 유사하나 자동 스케일링 Docker 머신 사용.
kubernetes [runners.kubernetes] Kubernetes pods 내.

사용 가능한 쉘은 다양한 플랫폼에서 실행할 수 있습니다.

설명
bash Bash (Bourne 셸) 스크립트 생성. Bash 환경에서 모든 명령을 실행합니다. Unix 시스템의 기본값.
sh Sh (Bourne 셸) 스크립트 생성. Sh 환경에서 모든 명령을 실행합니다. Unix 시스템의 bash의 대체품입니다.
powershell PowerShell 스크립트 생성. 모든 명령을 PowerShell Desktop 환경에서 실행합니다. GitLab 러너 12.0-13.12에서 Windows의 기본값입니다.
pwsh PowerShell 스크립트 생성. 모든 명령을 PowerShell Core 환경에서 실행합니다. GitLab 러너 14.0 이후에는 Windows의 기본값입니다.

shell 옵션이 bash 또는 sh로 설정된 경우 Bash의 ANSI-C quoting이 셸 이스케이핑에 사용됩니다.

POSIX 호환 쉘 사용

GitLab 러너 14.9 이상에서 특징 플래그FF_POSIXLY_CORRECT_ESCAPES를 활성화하여 POSIX 호환성 쉘(dash와 같은)을 사용하세요. 활성화된 경우, POSIX 호환성 쉘 이스케이핑 메커니즘인 “Double Quotes”가 사용됩니다.

[runners.docker] 섹션

다음 설정은 Docker 컨테이너 매개변수를 정의합니다.

Docker-in-Docker가 서비스로 구성되거나 작업 내부에 구성된 모든 컨테이너 런타임은 이러한 매개변수를 상속하지 않습니다.

매개변수 설명
allowed_images .gitlab-ci.yml 파일에서 지정할 수 있는 이미지의 와일드카드 디렉터리. 없을 경우 모든 이미지가 허용됨 (["*/*:*"]와 동일). Docker 또는 Kubernetes 실행자와 사용.
allowed_privileged_images privileged가 활성화되었을 때 운영 권한 모드로 실행되는 allowed_images의 와일드카드 하위 집합. 없을 경우 모든 이미지가 허용됨 (["*/*:*"]와 동일). Docker 실행자와 사용.
allowed_pull_policies .gitlab-ci.yml 파일 또는 config.toml 파일에서 지정할 수 있는 가져오기 정책 디렉터리. 지정되지 않았을 경우 pull-policy에서 지정된 모든 가져오기 정책이 허용됨. Docker 실행자와 사용.
allowed_services .gitlab-ci.yml 파일에서 지정할 수 있는 서비스의 와일드카드 디렉터리. 없을 경우 모든 이미지가 허용됨 (["*/*:*"]와 동일). Docker 또는 Kubernetes 실행자와 사용.
allowed_privileged_services privileged 또는 services_privileged가 활성화되었을 때 운영 권한 모드로 실행되는 allowed_services의 와일드카드 하위 집합. 없을 경우 모든 이미지가 허용됨 (["*/*:*"]와 동일). Docker 실행자와 사용.
cache_dir Docker 캐시를 저장할 디렉터리. 이 경로는 절대 경로 또는 현재 작업 디렉터리의 상대 경로가 될 수 있습니다. 자세한 내용은 disable_cache를 참조하세요.
cap_add 컨테이너에 추가하는 Linux 기능.
cap_drop 컨테이너에서 제거하는 Linux 기능.
cpuset_cpus 제어 그룹의 CpusetCpus. 문자열입니다.
cpu_shares 상대적 CPU 사용량을 설정하는 데 사용되는 CPU 공유 수. 기본값은 1024입니다.
cpus CPU 수 (Docker 1.13 이상에서 사용 가능). 문자열입니다.
devices 컨테이너와 추가적인 호스트 장치 공유.
device_cgroup_rules 사용자 정의 장치 cgroup 규칙 (Docker 1.28 이상에서 사용 가능).
disable_cache Docker 실행자에는 전역 캐싱(기타 실행자와 같음)과 Docker 볼륨을 기반으로 하는 로컬 캐시 두 가지 수준의 캐싱이 있습니다. 이 구성 플래그는 로컬 캐시에만 영향을 미치며 자동으로 생성된 (호스트 디렉터리에 매핑되지 않은) 캐시 볼륨 사용을 비활성화합니다. 다시 말해, 이 설정은 빌드의 임시 파일을 보관하는 컨테이너를 만드는 것만 막을 뿐이며, 분산 캐시 모드로 구성된 경우 캐시를 비활성화하지 않습니다.
disable_entrypoint_overwrite 이미지의 엔트리포인트 덮어쓰기 비활성화.
dns 컨테이너가 사용하는 DNS 서버 디렉터리.
dns_search DNS 검색 도메인 디렉터리.
extra_hosts 컨테이너 환경에 정의해야 하는 호스트.
gpus Docker 컨테이너의 GPU 장치. docker cli와 동일한 형식을 사용합니다. 자세한 내용은 Docker 문서를 참조하세요.
group_add 컨테이너 프로세스가 실행될 추가 그룹 추가.
helper_image (고급) 리포지터리 복제와 아티팩트 업로드에 사용되는 기본 도우미 이미지.
helper_image_flavor 도우미 이미지 플레이버 설정 (alpine, alpine3.16, alpine3.17, alpine3.18, alpine3.19, alpine-latest, ubi-fips 또는 ubuntu). 기본값은 alpine입니다. alpine 플레이버는 alpine3.18와 같은 버전을 사용합니다.
helper_image_autoset_arch_and_os 기본 OS를 사용하여 도우미 이미지 ARCH 및 OS를 설정합니다.
host 사용자 정의 Docker 엔드포인트. 기본값은 DOCKER_HOST 환경 또는 unix:///var/run/docker.sock입니다.
hostname Docker 컨테이너의 사용자 정의 호스트 이름.
image 작업 실행에 사용되는 이미지.
links 작업을 실행하는 컨테이너에 링크되어야 하는 컨테이너.
memory 메모리 제한. 문자열입니다.
memory_swap 총 메모리 제한. 문자열입니다.
memory_reservation 메모리 소프트 제한. 문자열입니다.
network_mode 사용자 정의 네트워크에 컨테이너 추가.
mac_address 컨테이너 MAC 주소 (예: 92:d0:c6:0a:29:33).
oom_kill_disable 메모리 부족 (OOM) 오류가 발생하는 경우 컨테이너 내 프로세스를 종료하지 않음.
oom_score_adjust OOM 점수 조정. 양수는 더 빨리 종료함을 의미합니다.
privileged 컨테이너를 운영 권한 모드로 실행함. 위험합니다.
services_privileged 서비스를 운영 권한 모드로 실행합니다. 미설정(기본값)인 경우 privileged 값이 대신 사용됩니다. Docker 실행자와 사용합니다. 위험합니다.
pull_policy 이미지 가져오기 정책: never, if-not-present, 또는 always (기본값). 자세한 내용은 pull policies documentation를 참조하세요. 여러 개의 가져오기 정책을, 실패한 가져오기 다시 시도, 또는 가져오기 정책 제한도 추가할 수 있습니다.
runtime Docker 컨테이너의 런타임.
isolation 컨테이너 격리 기술 (default, hyperv, process). Windows 전용.
security_opt 보안 옵션 (docker run에서 --security-opt). :로 구분된 키/값 디렉터리을 사용합니다.
shm_size 이미지의 공유 메모리 크기(바이트).
sysctls sysctl 옵션.
tls_cert_path 안전한 TLS 연결을 만들고 사용하기 위해 저장되는 ca.pem, cert.pem, 또는 key.pem 파일이 있는 디렉터리. boot2docker에서 유용합니다.
tls_verify Docker 데몬에 대한 TLS 연결 확인을 활성화하거나 비활성화합니다. 기본값은 비활성화됩니다.
user 모든 명령을 지정된 사용자로 실행합니다.
userns_mode 사용자 네임스페이스 다시 매핑 옵션이 활성화된 경우 컨테이너 및 Docker 서비스용 사용자 네임스페이스 모드. Docker 1.10 이상에서 사용 가능합니다.
ulimit 컨테이너에 전달되는 유니링크 값. Docker --ulimit 플래그와 동일한 구문을 사용합니다.
volumes 추가로 마운트해야 하는 볼륨. Docker -v 플래그와 동일한 구문을 사용합니다.
volumes_from 다른 컨테이너에서 상속할 볼륨 디렉터리. 형식은 <container name>[:<access_level>]입니다. 접근 수준은 읽기-쓰기로 기본 설정되지만 매뉴얼으로 ro(읽기 전용) 또는 rw(읽기-쓰기)로 설정할 수 있습니다.
volume_driver 컨테이너에 사용할 볼륨 드라이버.
wait_for_services_timeout Docker 서비스를 기다리는 시간. -1로 설정하여 비활성화합니다. 기본값은 30입니다.
container_labels 러너(runner)에 의해 생성된 각 컨테이너에 추가할 일련의 레이블. 레이블 값에는 환경 변수가 포함될 수 있습니다.
services_limit 작업 당 허용되는 최대 서비스를 설정합니다. -1 (기

[[runners.docker.services]] 섹션

작업과 함께 실행할 추가 서비스를 지정합니다. 사용 가능한 이미지 디렉터리은 도커 레지스트리를 참조하십시오. 각 서비스는 별도의 컨테이너에서 실행되며 작업과 연결됩니다.

매개변수 설명
name 서비스로 실행할 이미지의 이름입니다.
alias 서비스에 액세스하는 데 사용할 추가 별칭 이름입니다.
entrypoint 컨테이너의 엔트리포인트로 실행될 명령 또는 스크립트입니다. 구문은 Dockerfile의 ENTRYPOINT 지시문과 유사하며 쉘 토큰이 배열에서 개별 문자열로 구분됩니다. GitLab Runner 13.6에서 도입되었습니다.
command 컨테이너의 명령 또는 스크립트입니다. 구문은 Dockerfile의 CMD 지시문과 유사하며 쉘 토큰이 배열에서 개별 문자열로 구분됩니다. GitLab Runner 13.6에서 도입되었습니다.
environment 서비스 컨테이너의 환경 변수를 추가하거나 덮어쓸 수 있습니다.

예시:

[runners.docker]
  host = ""
  hostname = ""
  tls_cert_path = "/Users/ayufan/.boot2docker/certs"
  image = "ruby:2.7"
  memory = "128m"
  memory_swap = "256m"
  memory_reservation = "64m"
  oom_kill_disable = false
  cpuset_cpus = "0,1"
  cpus = "2"
  dns = ["8.8.8.8"]
  dns_search = [""]
  service_memory = "128m"
  service_memory_swap = "256m"
  service_memory_reservation = "64m"
  service_cpuset_cpus = "0,1"
  service_cpus = "2"
  services_limit = 5
  privileged = false
  group_add = ["docker"]
  userns_mode = "host"
  cap_add = ["NET_ADMIN"]
  cap_drop = ["DAC_OVERRIDE"]
  devices = ["/dev/net/tun"]
  disable_cache = false
  wait_for_services_timeout = 30
  cache_dir = ""
  volumes = ["/data", "/home/project/cache"]
  extra_hosts = ["other-host:127.0.0.1"]
  shm_size = 300000
  volumes_from = ["storage_container:ro"]
  links = ["mysql_container:mysql"]
  allowed_images = ["ruby:*", "python:*", "php:*"]
  allowed_services = ["postgres:9", "redis:*", "mysql:*"]
  [runners.docker.ulimit]
    "rtprio" = "99"
  [[runners.docker.services]]
    name = "registry.example.com/svc1"
    alias = "svc1"
    entrypoint = ["entrypoint.sh"]
    command = ["executable","param1","param2"]
    environment = ["ENV1=value1", "ENV2=value2"]
  [[runners.docker.services]]
    name = "redis:2.8"
    alias = "cache"
  [[runners.docker.services]]
    name = "postgres:9"
    alias = "postgres-db"
  [runners.docker.sysctls]
    "net.ipv4.ip_forward" = "1"

[runners.docker] 섹션 내의 볼륨

볼륨에 대한 자세한 정보는 도커 문서를 참조하십시오.

다음 예제에서는 [runners.docker] 섹션에서 볼륨을 지정하는 방법을 보여줍니다.

예제 1: 데이터 볼륨 추가

데이터 볼륨은 연합 파일 시스템을 우회하는 하나 이상의 컨테이너의 특별히 지정된 디렉터리로, 컨테이너의 수명 주기와 독립적으로 데이터를 유지하는 데 사용됩니다.

[runners.docker]
  host = ""
  hostname = ""
  tls_cert_path = "/Users/ayufan/.boot2docker/certs"
  image = "ruby:2.7"
  privileged = false
  disable_cache = true
  volumes = ["/path/to/volume/in/container"]

이 예제에서는 컨테이너 내의 /path/to/volume/in/container에 새 볼륨을 생성합니다.

예제 2: 호스트 디렉터리를 데이터 볼륨으로 마운트

컨테이너 외부에 디렉터리를 저장하려면 도커 데몬의 호스트에서 디렉터리를 컨테이너에 마운트할 수 있습니다.

[runners.docker]
  host = ""
  hostname = ""
  tls_cert_path = "/Users/ayufan/.boot2docker/certs"
  image = "ruby:2.7"
  privileged = false
  disable_cache = true
  volumes = ["/path/to/bind/from/host:/path/to/bind/in/container:rw"]

이 예제에서는 컨테이너 내의 /path/to/bind/in/container에 호스트의 CI/CD 호스트의 /path/to/bind/from/host를 사용합니다.

GitLab Runner 11.11 및 이후 버전은 정의된 서비스를 위해 호스트 디렉터리를 마운트합니다.

개인 컨테이너 레지스트리 사용

작업을 위한 이미지의 소스로 개인 레지스트리를 사용하려면 CI/CD 변수 DOCKER_AUTH_CONFIG를 사용하여 인증을 구성하세요. 변수를 다음 중 하나에 설정할 수 있습니다:

  • 프로젝트의 CI/CD 설정에서 file 유형
  • config.toml 파일

if-not-present 풀 정책을 사용하여 개인 레지스트리를 사용하면 보안 문제가 발생할 수 있습니다. 풀 정책의 작동 방식에 대한 자세한 내용은 러너(runner)가 이미지를 끌어오는 방법 구성을 참조하십시오.

개인 컨테이너 레지스트리 사용에 대한 자세한 정보는 다음을 참조하십시오:

러너(runner)가 수행하는 단계를 요약하면:

  1. 이미지 이름에서 레지스트리 이름을 찾습니다.
  2. 값이 비어 있지 않으면 실행기는이 레지스트리에 대한 인증 구성을 찾습니다.
  3. 마지막으로 지정된 레지스트리에 해당하는 인증이 있는 경우 후속 풀은 이를 사용합니다.
#### GitLab 통합 레지스트리 지원

GitLab은 작업 데이터와 함께 통합된 레지스트리의 자격 증명을 전송합니다. 이러한 자격 증명은 자동으로 레지스트리의 권한 부여 매개변수 디렉터리에 추가됩니다.

이 단계 이후 레지스트리에 대한 권한이 `DOCKER_AUTH_CONFIG` 변수로 추가된 구성과 유사하게 진행됩니다.

작업에서는 GitLab 통합 레지스트리에서 이미지를 사용할 수 있으며, 해당 이미지가 비공개 또는 보호되었더라도 사용할 수 있습니다. 작업이 액세스할 수 있는 이미지에 대한 정보는 [CI/CD 작업 토큰 문서](https://docs.gitlab.com/ee/ci/jobs/ci_job_token.html)를 참조하세요.

#### Docker 권한 부여 해결 우선 순위

이전에 설명한 대로 GitLab 러너는 여러 방식으로 Docker를 레지스트리에 대해 인가할 수 있습니다. 적절한 레지스트리를 찾기 위해 다음과 같은 우선 순위가 고려됩니다.

1. `DOCKER_AUTH_CONFIG`로 구성된 자격 증명.
1. `~/.docker/config.json` 또는 `~/.dockercfg` 파일(예: 호스트에서 `docker login` 실행)에 로컬로 구성된 자격 증명(호스트에서 `docker login` 실행 등).
1. 작업의 페이로드로 기본적으로 전송된 자격 증명 (예: 이전에 설명한 *통합 레지스트리*의 자격 증명).

레지스트리에 대해 찾은 첫 번째 자격 증명이 사용됩니다. 예를 들어, `DOCKER_AUTH_CONFIG` 변수로 *통합 레지스트리*의 자격 증명을 추가하면 기본 자격 증명이 재정의됩니다.

## `[runners.parallels]` 섹션

다음은 Parallels을 위한 매개변수입니다.

| 매개변수 | 설명 |
| ------- | ---- |
| `base_name`         | 복제된 Parallels VM의 이름. |
| `template_name`     | Parallels VM 링크된 템플릿의 사용자 정의 이름. 선택 사항. |
| `disable_snapshots` | 비활성화되면, 작업이 완료될 때 VM이 파괴됩니다. |
| `allowed_images`    | 정규 표현식으로 표시된 허용된 `image`/`base_name` 값 디렉터리. 자세한 내용은 [기본 VM 이미지 재정의](#overriding-the-base-vm-image) 섹션을 참조하세요. |

예시:

```toml
[runners.parallels]
  base_name = "my-parallels-image"
  template_name = ""
  disable_snapshots = false

[runners.virtualbox] 섹션

다음은 VirtualBox를 위한 매개변수입니다. 이 실행기는 VirtualBox 머신을 제어하기 위해 vboxmanage 실행 파일을 의존하므로 Windows 호스트에서 PATH 환경 변수를 조정해야 합니다: PATH=%PATH%;C:\Program Files\Oracle\VirtualBox.

매개변수 설명
base_name 복제된 VirtualBox VM의 이름.
base_snapshot VM의 특정 스냅샷의 이름 또는 UUID. 이 값이 비어 있거나 생략된 경우 현재 스냅샷이 사용됩니다. 현재 스냅샷이 없는 경우 하나가 생성됩니다. disable_snapshots가 true인 경우, 기본 VM의 완전한 복제가 이루어집니다.
base_folder 새 VM을 저장할 폴더. 이 값이 비어 있거나 생략된 경우 기본 VM 폴더가 사용됩니다.
disable_snapshots 비활성화되면, 작업이 완료될 때 VM이 파괴됩니다.
allowed_images 정규 표현식으로 표시된 허용된 image/base_name 값 디렉터리. 자세한 내용은 기본 VM 이미지 재정의 섹션을 참조하세요.
start_type VM을 시작할 때 사용되는 그래픽 프론트엔드 유형.

예시:

[runners.virtualbox]
  base_name = "my-virtualbox-image"
  base_snapshot = "my-image-snapshot"
  disable_snapshots = false
  start_type = "headless"

start_type 매개변수는 가상 이미지를 시작할 때 사용되는 그래픽 프론트엔드를 결정합니다. 유효한 값은 호스트 및 게스트 조합에서 지원되는 headless (기본값), gui, 또는 separate입니다.

기본 VM 이미지 재정의

  • GitLab Runner 14.2에서 도입됨.

Parallels 및 VirtualBox 실행기 모두 .gitlab-ci.yml 파일의 image 매개변수를 사용하여 base_name으로 지정된 기본 VM 이름을 재정의할 수 있습니다.

역 호환성을 위해 기본적으로 이 값을 재정의할 수 없습니다. base_name로 지정된 이미지만 허용됩니다.

사용자가 .gitlab-ci.ymlimage 매개변수를 사용하여 VM 이미지를 선택할 수 있도록 허용하려면:

[runners.virtualbox]
  ...
  allowed_images = [".*"]

이 예시에서는 기존 VM 이미지를 사용할 수 있습니다.

allowed_images 매개변수는 정규 표현식의 디렉터리입니다. 구성은 필요에 따라 정교해질 수 있습니다. 예를 들어, 특정 VM 이미지만 허용하려면 다음과 같이 regex를 사용할 수 있습니다:

[runners.virtualbox]
  ...
  allowed_images = ["^allowed_vm[1-2]$"]

이 예시에서는 allowed_vm1allowed_vm2만 허용됩니다. 다른 시도는 오류가 발생합니다.

[runners.ssh] 섹션

다음 매개변수는 SSH 연결을 정의합니다.

매개변수 설명
host 연결할 위치.
port 포트. 기본값은 22입니다.
user 사용자 이름.
password 비밀번호.
identity_file SSH 개인 키(id_rsa, id_dsa, 또는 id_edcsa)의 파일 경로. 파일은 암호화되지 않은 채로 저장되어야 합니다.
disable_strict_host_key_checking GitLab 14.3부터, 이 값이 러너가 엄격한 호스트 키 확인을 사용해야 하는지 여부를 결정합니다. 기본값은 true입니다. GitLab 15.0에서는 기본값 또는 지정되지 않은 경우 false로 변경됩니다.

예시:

[runners.ssh]
  host = "내-프로덕션-서버"
  port = "22"
  user = "root"
  password = "프로덕션-서버-비밀번호"
  identity_file = ""

## `[runners.machine]` 섹션

다음 매개변수는 Docker Machine 기반 오토스케일링 기능을 정의합니다. 자세한 정보는 [Docker Machine Executor autoscale configuration](autoscale.md)을 참조하세요.

| 매개변수           | 설명 |
|---------------------|-------------|
| `MaxGrowthRate`     | 한 번에 러너에 추가할 수 있는 최대 머신 수. 기본값은 `0` (제한 없음)입니다. |
| `IdleCount`         | _Idle_ 상태에서 생성되어 대기해야 하는 머신 수입니다. |
| `IdleScaleFactor`   | (실험적) 현재 사용 중인 머신 수의 팩터로 _Idle_ 머신의 수를 나타냅니다. 부동 소수점 숫자 형식이어야 합니다. 자세한 내용은 [오토스케일 문서](autoscale.md#the-idlescalefactor-strategy)를 참조하세요. 기본값은 `0.0`입니다. |
| `IdleCountMin`      | `IdleScaleFactor`를 사용할 때 _Idle_ 상태에서 생성되어 대기해야 하는 최소 머신 수입니다. 기본값은 1입니다. |
| `IdleTime`          | 머신이 제거되기 전에 _Idle_ 상태에 있어야 하는 시간(초)입니다. |
| `[[runners.machine.autoscaling]]` | 현재 시간과 일치하는 표현식이 있는 마지막 섹션을 선택하는 여러 섹션을 포함합니다. |
| `OffPeakPeriods`    | (폐기 예정됨) 스케줄러가 OffPeak 모드인 시간대입니다. 크론 스타일 패턴(아래 참조)의 배열입니다. |
| `OffPeakTimezone`   | (폐기 예정됨) OffPeakPeriods에서 주어진 시간대입니다. `Europe/Berlin`과 같은 시간대 문자열입니다. 지정되지 않았거나 비어 있으면 호스트의 로캘 시스템 설정을 기본값으로 합니다. GitLab Runner는 `ZONEINFO` 환경 변수로 지정된 디렉터리나 압축 푼 zip 파일의 시간대 데이터베이스를 찾은 후, Unix 시스템의 알려진 설치 위치에서 찾은 후, 마지막으로 `$GOROOT/lib/time/zoneinfo.zip`에서 찾습니다. |
| `OffPeakIdleCount`  | _Off Peak_ 시간대에 대기해야 하는 머신의 수입니다. |
| `OffPeakIdleTime`   | _Off Peak_ 시간대에 제거되기 전에 _Idle_ 상태에 있어야 하는 시간(초)입니다. |
| `MaxBuilds`         | 머신이 제거되기 전의 최대 작업(빌드) 수입니다. |
| `MachineName`       | 머신의 이름입니다. 고유한 머신 식별자로 대체되어야 합니다. |
| `MachineDriver`     | Docker Machine `driver`입니다. 자세한 정보는 [Docker Machine configuration section](autoscale.md#supported-cloud-providers)을 참조하세요. |
| `MachineOptions`    | Docker Machine 옵션입니다. 자세한 정보는 [Docker Machine configuration section](autoscale.md#supported-cloud-providers)을 참조하세요. |

### `[[runners.machine.autoscaling]]` 섹션

| 매개변수           | 설명 |
|---------------------|-------------|
| `Periods`           | 이 스케줄이 활성화되는 시간대입니다. 크론 스타일 패턴(아래 참조)의 배열입니다. |
| `IdleCount`         | _Idle_ 상태에서 생성되어 대기해야 하는 머신 수입니다. |
| `IdleScaleFactor`   | (실험적) 현재 사용 중인 머신 수의 팩터로 _Idle_ 머신의 수를 나타냅니다. 부동 소수점 숫자 형식이어야 합니다. 자세한 내용은 [오토스케일 문서](autoscale.md#the-idlescalefactor-strategy)를 참조하세요. 기본값은 `0.0`입니다. |
| `IdleCountMin`      | `IdleScaleFactor`를 사용할 때 _Idle_ 상태에서 생성되어 대기해야 하는 최소 머신 수입니다. 기본값은 1입니다. |
| `IdleTime`          | 머신이 제거되기 전에 _Idle_ 상태에 있어야 하는 시간(초)입니다. |
| `Timezone`   | `Periods`에서 주어진 시간대입니다. `Europe/Berlin`과 같은 시간대 문자열입니다. 지정되지 않았거나 비어 있으면 호스트의 로캘 시스템 설정을 기본값으로 합니다. GitLab Runner는 `ZONEINFO` 환경 변수로 지정된 디렉터리나 압축 푼 zip 파일의 시간대 데이터베이스를 찾은 후, Unix 시스템의 알려진 설치 위치에서 찾은 후, 마지막으로 `$GOROOT/lib/time/zoneinfo.zip`에서 찾습니다. |

예시:

```toml
[runners.machine]
  IdleCount = 5
  IdleTime = 600
  MaxBuilds = 100
  MachineName = "auto-scale-%s"
  MachineDriver = "google" # 인증 방법은 Docker Machine 문서를 참조하세요: https://docs.docker.com/machine/drivers/gce/#credentials
  MachineOptions = [
      # Google Compute Engine 드라이버를 이용한 추가 머신 옵션.
      # 호스트에 연결할 수 없는 문제가 발생하면 (예: "SSH 대기 중"),
      # 디버깅을 돕기 위해 선택적 매개변수를 제거해야 합니다.
      # https://docs.docker.com/machine/drivers/gce/
      "google-project=GOOGLE-PROJECT-ID",
      "google-zone=GOOGLE-ZONE", # 예: 'us-central1-a', 전체 디렉터리은 https://cloud.google.com/compute/docs/regions-zones/에 있습니다.
  ]
  [[runners.machine.autoscaling]]
    Periods = ["* * 9-17 * * mon-fri *"]
    IdleCount = 50
    IdleCountMin = 5
    IdleScaleFactor = 1.5 # 현재 Idle 머신 수는 사용 중 머신 수의 1.5배로 설정됩니다.
                          # 최대 50 (IdleCount의 값)이고 최소 5 (IdleCountMin의 값)보다 적게 설정되지는 않습니다.
    IdleTime = 3600
    Timezone = "UTC"
  [[runners.machine.autoscaling]]
    Periods = ["* * * * * sat,sun *"]
    IdleCount = 5
    IdleTime = 60
    Timezone = "UTC"

기간 구문

Periods 설정에는 cron 스타일 형식으로 나타낸 시간대의 문자열 패턴 배열이 포함되어 있습니다. 이 줄에는 다음 필드가 포함되어 있습니다.

[초] [분] [시] [월의 날짜] [월] [요일] [년]

일반적인 cron 구성 파일과 마찬가지로, 이 필드에는 단일 값, 범위, 디렉터리, 별표가 포함될 수 있습니다. 구문의 자세한 설명은 구현에 대한 자세한 설명을 참조하세요.

[runners.instance] 섹션

상태: Beta

다음 파라미터는 인스턴스 실행자 구성을 정의합니다. 인스턴스 실행자는 Beta 상태입니다.

파라미터 타입 설명
allowed_images 문자열 VM 격리가 활성화된 경우, allowed_images는 작업이 지정할 수 있는 이미지를 제어합니다.

[runners.autoscaler] 섹션

  • GitLab Runner v15.10.0에서 소개되었습니다.

다음 파라미터는 오토스케일러 기능을 구성합니다. 이러한 파라미터는 인스턴스도커 오토스케일러 실행자와 함께 사용할 수 있습니다. 이 실행자들은 Beta 상태입니다.

파라미터 설명
capacity_per_instance 단일 인스턴스에서 동시에 실행될 수 있는 작업 수입니다.
max_use_count 인스턴스가 제거되기 전에 사용될 수 있는 최대 횟수입니다.
max_instances 허용된 최대 인스턴스 수로, 인스턴스 상태(대기 중, 실행 중, 삭제 중)에 관계없이 적용됩니다. 기본값: 0 (무제한).
plugin 사용할 fleeting 플러그인입니다. 바이너리는 PATH 환경 변수를 통해 찾을 수 있어야 합니다.

[runners.autoscaler.plugin_config] 섹션

이 해시 테이블은 JSON으로 다시 인코딩되어 구성된 플러그인에 직접 전달됩니다.

fleeting 플러그인들은 일반적으로 지원되는 구성에 대한 문서를 가지고 있습니다.

[runners.autoscaler.connector_config] 섹션

fleeting 플러그인들은 일반적으로 지원되는 연결 옵션에 대한 문서를 가지고 있습니다.

플러그인들은 연결 구성을 자동으로 업데이트합니다. [runners.autoscaler.connector_config]를 사용하여 연결 구성의 자동 업데이트를 무시하거나, 플러그인이 결정할 수 없는 빈 값들을 채울 수 있습니다.

파라미터 설명
os 인스턴스의 운영 체제입니다.
arch 인스턴스의 아키텍처입니다.
protocol 사용할 프로토콜입니다: ssh 또는 winrm.
username 연결에 사용되는 사용자 이름입니다.
password 연결에 사용되는 비밀번호입니다.
key_path 연결에 사용되는 TLS 키이거나 동적으로 자격 증명을 제공합니다.
use_static_credentials 자동 자격 증명 제공을 비활성화합니다. 기본값: false.
keepalive 연결 유지 기간입니다.
timeout 연결 시간 초과 기간입니다.
use_external_addr 플러그인에서 제공된 외부 주소를 사용할지 여부입니다. 플러그인이 내부 주소만 반환하는 경우에도이 설정에 관계없이 사용됩니다. 기본값: false.

[[runners.autoscaler.policy]] 섹션들

참고 - 이 컨텍스트에서의 idle_count는 레거시 오토스케일링 방법과 달리 작업 수가 아닌 오토스케일된 기계 수를 나타냅니다.

periods 이 정책이 활성화된 기간을 나타내기 위해 unix-cron 형식의 문자열 배열입니다. 기본값: * * * * *
timezone unix-cron 기간을 평가할 때 사용되는 시간대입니다. 기본값: 시스템의 로컬 시간대.
idle_count 즉시 작업에 대기하고 있는 대상 대기 용량입니다.
idle_time 인스턴스가 종료되기 전에 대기할 수 있는 시간입니다.
scale_factor 현재 사용 중인 용량의 배수로, idle_count에 추가하여 즉시 작업에 대기할 대상 대기 용량입니다. 기본값: 0.0
scale_factor_limit scale_factor 계산 결과의 최대 용량입니다.

scale_factor가 설정되면 idle_count가 최소 idle 용량이 되고 scale_factor_limit가 최대 idle 용량이 됩니다.

Periods 구문

periods 설정에는 정책이 활성화되는 기간을 나타내는 unix-cron 형식의 문자열 배열이 포함됩니다. 크론 형식은 5개의 필드로 구성됩니다:

 ┌────────── 분 (0 - 59)
 │ ┌──────── 시간 (0 - 23)
 │ │ ┌────── 월의 날짜 (1 - 31)
 │ │ │ ┌──── 월 (1 - 12)
 │ │ │ │ ┌── 요일 (1 - 7 또는 MON-SUN, 0은 일요일의 별칭)
 * * * * *
  • -은 두 숫자 사이에 사용되어 범위를 지정할 수 있습니다.
  • *은 해당 필드의 유효한 값의 전체 범위를 나타낼 때 사용됩니다.
  • / 뒤에 숫자가 올 수 있으며, 범위 뒤에 사용하여 해당 범위에서 해당 숫자를 건너뛸 수 있습니다. 예를 들어 시간 필드의 경우 0-12/2는 00:00부터 00:12까지 2시간마다 기간을 활성화합니다.
  • ,은 필드의 유효한 숫자나 범위를 구분하는 데 사용될 수 있습니다. 예를 들어 1,2,6-9입니다.

이 크론 작업은 시간 범위를 나타냅니다. 예를 들면:

기간 영향
1 * * * * 매 시간 1분 동안의 기간으로 규칙이 활성화됨 (거의 유용하지 않을 것으로 예상됨)
* 0-12 * * * 매일 시작 부분에 12시간 동안의 기간으로 규칙이 활성화됨
0-30 13,16 * * SUN 매 주 일요일마다 1시 30분과 4시 30분씩 30분의 기간으로 규칙이 활성화됨

[runners.custom] 섹션

다음 매개변수는 사용자 정의 실행자 구성을 정의합니다.

매개변수 유형 설명
config_exec string 실행 작업이 시작되기 전에 사용자가 일부 구성 설정을 재정의할 수 있도록 실행 파일 경로입니다. 이러한 값은 [[runners]] 섹션에서 설정된 값보다 우선합니다. 사용자 정의 실행자 문서에서 전체 디렉터리을 확인할 수 있습니다.
config_args string array config_exec 실행 파일로 전달되는 첫 번째 인수 집합입니다.
config_exec_timeout integer config_exec의 실행이 완료되기까지의 제한 시간(초)입니다. 기본값은 3600초(1시간)입니다.
prepare_exec string 환경을 준비하기 위한 실행 파일 경로입니다.
prepare_args string array prepare_exec 실행 파일로 전달되는 첫 번째 인수 집합입니다.
prepare_exec_timeout integer prepare_exec의 실행이 완료되기까지의 제한 시간(초)입니다. 기본값은 3600초(1시간)입니다.
run_exec string 필수 항목입니다. 환경에서 스크립트를 실행하기 위한 실행 파일 경로입니다. 예를 들어, 클론 및 빌드 스크립트 등이 있습니다.
run_args string array run_exec 실행 파일로 전달되는 첫 번째 인수 집합입니다.
cleanup_exec string 환경을 정리하기 위한 실행 파일 경로입니다.
cleanup_args string array cleanup_exec 실행 파일로 전달되는 첫 번째 인수 집합입니다.
cleanup_exec_timeout integer cleanup_exec의 실행이 완료되기까지의 제한 시간(초)입니다. 기본값은 3600초(1시간)입니다.
graceful_kill_timeout integer prepare_execcleanup_exec이 종료될 때(예: 작업 취소 중) 대기할 시간(초)입니다. 이 시간이 경과하면 프로세스가 종료됩니다. 기본값은 600초(10분)입니다.
force_kill_timeout integer 스크립트에 kill 시그널이 전송된 후 대기할 시간(초)입니다. 기본값은 600초(10분)입니다.

[runners.cache] 섹션

다음 매개변수는 분산 캐시 기능을 정의합니다. 자세한 내용은 러너 오토 스케일 문서를 참조하십시오.

매개변수 유형 설명
Type string s3, gcs, azure 중 하나입니다.
Path string 캐시 URL 앞에 추가할 경로의 이름입니다.
Shared boolean 러너 간 캐시 공유를 활성화합니다. 기본값은 false입니다.
MaxUploadedArchiveSize int64 클라우드 스토리지에 업로드되는 캐시 아카이브의 바이트 제한입니다. 악의적인 사용자는이 제한을 우회할 수 있으므로 GCS 어댑터는 서명된 URL의 X-Goog-Content-Length-Range 헤더를 통해이 제한을 강제합니다. 클라우드 스토리지 제공자에서도 제한을 설정해야 합니다.

캐시 메커니즘은 GitLab 러너가 자체 인스턴스에서 사전 서명된 URL을 사용하여 캐시를 업로드하고 다운로드합니다. 작업 스크립트(캐시 업로드/다운로드 스크립트 포함)가 로컬 또는 외부 기계에서 실행되는지 여부는 중요하지 않습니다. 예를 들어, shell 또는 docker 실행자는 스크립트를 GitLab 러너 프로세스가 실행되는 기계와 같은 기계에서 실행합니다. 동시에 virtualbox 또는 docker+machine은 스크립트를 실행하기 위해 별도의 VM에 연결합니다. 이 프로세스는 보안상의 이유로 진행됩니다. 캐시 어댑터 자격 증명이 유출 가능성을 최소화합니다.

S3 캐시 어댑터가 IAM 인스턴스 프로필을 사용하도록 구성되면, 어댑터는 GitLab 러너 머신에 연결된 프로필을 사용합니다. 마찬가지로 GCS 캐시 어댑터CredentialsFile을 사용하도록 구성되면 파일은 GitLab 러너 머신에 있어야 합니다.

이 표는 register를위한 config.toml, CLI 옵션 및 ENV 변수를 나열합니다.

설정 TOML 필드 register에 대한 CLI 옵션 register에 대한 ENV 변수
Type [runners.cache] -> Type --cache-type $CACHE_TYPE
Path [runners.cache] -> Path --cache-path

12.0 이전에는 --cache-s3-cache-path
$CACHE_PATH

12.0 이전에는 $S3_CACHE_PATH
Shared [runners.cache] -> Shared --cache-shared

12.0 이전에는 --cache-cache-shared
$CACHE_SHARED
S3.ServerAddress [runners.cache.s3] -> ServerAddress

12.0 이전에는 [runners.cache] -> ServerAddress
--cache-s3-server-address $CACHE_S3_SERVER_ADDRESS

12.0 이전에는 $S3_SERVER_ADDRESS
S3.AccessKey [runners.cache.s3] -> AccessKey

12.0 이전에는 [runners.cache] -> AccessKey
--cache-s3-access-key $CACHE_S3_ACCESS_KEY

12.0 이전에는 $S3_ACCESS_KEY
S3.SecretKey [runners.cache.s3] -> SecretKey

12.0 이전에는 [runners.cache] -> SecretKey
--cache-s3-secret-key $CACHE_S3_SECRET_KEY

12.0 이전에는 $S3_SECRET_KEY
S3.SessionToken [runners.cache.s3] -> SessionToken --cache-s3-session-token $CACHE_S3_SESSION_TOKEN
S3.BucketName [runners.cache.s3] -> BucketName

12.0 이전에는 [runners.cache] -> BucketName
--cache-s3-bucket-name $CACHE_S3_BUCKET_NAME

12.0 이전에는 $S3_BUCKET_NAME
S3.BucketLocation [runners.cache.s3] -> BucketLocation

12.0 이전에는 [runners.cache] -> BucketLocation
--cache-s3-bucket-location $CACHE_S3_BUCKET_LOCATION

12.0 이전에는 $S3_BUCKET_LOCATION
S3.Insecure [runners.cache.s3] -> Insecure

12.0 이전에는 [runners.cache] -> Insecure
--cache-s3-insecure $CACHE_S3_INSECURE

12.0 이전에는 $S3_INSECURE
S3.AuthenticationType [runners.cache.s3] -> AuthenticationType --cache-s3-authentication_type $CACHE_S3_AUTHENTICATION_TYPE
S3.ServerSideEncryption [runners.cache.s3] -> ServerSideEncryption --cache-s3-server-side-encryption $CACHE_S3_SERVER_SIDE_ENCRYPTION
S3.ServerSideEncryptionKeyID [runners.cache.s3] -> ServerSideEncryptionKeyID --cache-s3-server-side-encryption-key-id $CACHE_S3_SERVER_SIDE_ENCRYPTION_KEY_ID
GCS.AccessID [runners.cache.gcs] -> AccessID --cache-gcs-access-id $CACHE_GCS_ACCESS_ID
GCS.PrivateKey [runners.cache.gcs] -> PrivateKey --cache-gcs-private-key $CACHE_GCS_PRIVATE_KEY
GCS.CredentialsFile [runners.cache.gcs] -> CredentialsFile --cache-gcs-credentials-file $GOOGLE_APPLICATION_CREDENTIALS
GCS.BucketName [runners.cache.gcs] -> BucketName --cache-gcs-bucket-name $CACHE_GCS_BUCKET_NAME
Azure.AccountName [runners.cache.azure] -> AccountName --cache-azure-account-name $CACHE_AZURE_ACCOUNT_NAME
Azure.AccountKey [runners.cache.azure] -> AccountKey --cache-azure-account-key $CACHE_AZURE_ACCOUNT_KEY
Azure.ContainerName [runners.cache.azure] -> ContainerName --cache-azure-container-name $CACHE_AZURE_CONTAINER_NAME
Azure.StorageDomain [runners.cache.azure] -> StorageDomain --cache-azure-storage-domain $CACHE_AZURE_STORAGE_DOMAIN

[runners.cache.s3] 섹션

다음 매개변수는 캐시의 S3 리포지터리를 정의합니다.

매개변수 유형 설명
ServerAddress string S3 호환 서버의 host:port. AWS 이외의 서버를 사용하는 경우 리포지터리 제품 설명서를 참조하여 올바른 주소를 확인하세요. DigitalOcean의 경우 주소는 spacename.region.digitaloceanspaces.com 형식이어야 합니다.
AccessKey string S3 인스턴스에 지정된 액세스 키입니다.
SecretKey string S3 인스턴스에 지정된 비밀 키입니다.
SessionToken string 임시 자격 증명을 사용하는 경우 S3 인스턴스에 지정된 세션 토큰입니다.
BucketName string 캐시가 저장된 리포지터리 버킷의 이름입니다.
BucketLocation string S3 지역의 이름입니다.
Insecure boolean S3 서비스가 HTTP로 이용 가능한 경우 true로 설정합니다. 기본값은 false입니다.
AuthenticationType string GitLab 14.4 이상에서는 iam 또는 access-key로 설정합니다. ServerAddress, AccessKey, SecretKey가 모두 제공되는 경우 기본값은 access-key입니다. ServerAddress, AccessKey, 또는 SecretKey 중 하나가 누락된 경우 기본값은 iam입니다.
ServerSideEncryption string GitLab 15.3 이상에서는 S3와 함께 사용되는 서버 측 암호화 유형입니다. 사용 가능한 유형은 S3 또는 KMS입니다.
ServerSideEncryptionKeyID string GitLab 15.3 이상에서는 KMS를 사용하는 경우 암호화에 사용되는 KMS 키의 별칭 또는 ID입니다.

예시:

[runners.cache]
  Type = "s3"
  Path = "path/to/prefix"
  Shared = false
  [runners.cache.s3]
    ServerAddress = "s3.amazonaws.com"
    AccessKey = "AWS_S3_ACCESS_KEY"
    SecretKey = "AWS_S3_SECRET_KEY"
    BucketName = "runners-cache"
    BucketLocation = "eu-west-1"
    Insecure = false
    ServerSideEncryption = "KMS"
    ServerSideEncryptionKeyID = "alias/my-key"

만약 ServerAddress, AccessKey, 또는 SecretKey 중 하나라도 지정되지 않고 AuthenticationType이 제공되지 않으면, S3 클라이언트는 gitlab-runner 인스턴스에 사용 가능한 IAM 인스턴스 프로필을 사용합니다. 자동 스케일 구성에서는 작업이 실행되는 온디맨드 머신이 아닙니다. ServerAddress, AccessKey, SecretKey가 모두 지정되지만 AuthenticationType이 제공되지 않는 경우 access-key가 인증 유형으로 사용됩니다.

GitLab Runner를 설치할 때 Helm 차트를 사용하고 values.yaml 파일에서 rbac.create를 true로 설정하면 ServiceAccount가 생성됩니다. 이 ServiceAccount의 주석은 rbac.serviceAccountAnnotations 섹션에서 검색됩니다.

Amazon EKS에서 실행 중인 러너에 대해 서비스 계정에 할당할 IAM 역할을 지정할 수 있습니다. 필요한 구체적인 주석은 다음과 같습니다: eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<IAM_ROLE_NAME>.

이 역할을위한 IAM 정책은 지정된 버킷에 대해 다음 작업을 수행 할 수있는 권한이 있어야합니다:

  • s3:PutObject
  • s3:GetObjectVersion
  • s3:GetObject
  • s3:DeleteObject

S3ServerSideEncryption을 사용하는 경우, 이 역할은 지정된 KMS 키에 대해 다음 작업을 수행 할 수 있어야합니다:

  • kms:Encrypt
  • kms:Decrypt
  • kms:ReEncrypt*
  • kms:GenerateDataKey*
  • kms:DescribeKey

::SSE-C:: 타입의 ServerSideEncryption은 지원되지 않습니다. SSE-C는 사용자 제공 키가 포함 된 헤더가 다운로드 요청에 대해 제공되어야하며, 사전 서명 된 URL에 대해 키가 전달되어야합니다. 이는 키가 안전하게 보관 될 수 없는 작업으로 키 자체가 노출 될 수 있음을 의미합니다. 이 문제에 대한 논의는 이 MR에서 확인할 수 있습니다.

note
AWS S3 캐시에 업로드 할 수있는 단일 파일의 최대 크기는 5GB입니다. 이 동작에 대한 잠재적 해결책에 대한 논의는 이 이슈에서 확인할 수 있습니다.

러너 캐시를위한 S3 버킷에서 KMS 키 암호화 사용

GenerateDataKey API는 클라이언트 측 암호화를 위해 KMS 대칭 키를 사용합니다 (https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html). KMS 키 구성은 다음과 같아야합니다:

속성 설명
키 유형 대칭
원천 AWS_KMS
키 사양 SYMMETRIC_DEFAULT
키 사용 암호화 및 복호화

rbac.serviceAccountName에 정의된 Service Account에 할당 된 역할을위한 IAM 정책은 KMS 키에 대해 다음 작업을 수행 할 수있어야합니다:

  • kms:GetPublicKey
  • kms:Decrypt
  • kms:Encrypt
  • kms:DescribeKey
  • kms:GenerateDataKey

Kubernetes ServiceAccount 리소스에 대한 IAM 역할 활성화

서비스 계정에 대한 IAM 역할을 사용하려면 클러스터에 IAM OIDC 공급자가 있어야합니다. IAM OIDC 공급자가 클러스터에 연결 된 후, 러너의 서비스 계정에 연결 할 IAM 역할을 만들 수 있습니다.

  1. 역할 생성 창에서 신뢰 할 수있는 엔터티 유형 선택에서 웹 신원을 선택합니다.
  2. 역할의 신뢰 할 수있는 관계 탭에서:

    • 신뢰할수있는 엔터티 섹션은 다음 형식이어야합니다: arn:aws:iam::<ACCOUNT_ID>:oidc-provider/oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>. OIDC ID는 EKS 클러스터의 구성 탭에서 찾을 수 있습니다.

    • 조건 섹션은 rbac.serviceAccountName에 정의 된 GitLab Runner 서비스 계정 또는 rbac.createtrue로 설정되어있는 경우 생성 된 기본 서비스 계정을 포함해야합니다:

      조건
      StringEquals oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>:sub system:serviceaccount:<GITLAB_RUNNER_NAMESPACE>:<GITLAB_RUNNER_SERVICE_ACCOUNT>

[runners.cache.gcs] 섹션

다음 매개변수는 Google Cloud Storage의 네이티브 지원을 정의합니다. 이러한 값에 대한 자세한 정보는 Google Cloud Storage (GCS) 인증 문서를 참조하십시오.

매개변수 유형 설명
CredentialsFile string Google JSON 키 파일의 경로입니다. service_account 유형만 지원됩니다. 구성된 경우이 값은 config.toml에서 직접 구성된 AccessIDPrivateKey보다 우선합니다.
AccessID string 리포지터리에 액세스하는 데 사용되는 GCP 서비스 계정의 ID입니다.
PrivateKey string GCS 요청에 서명하는 데 사용되는 개인 키입니다.
BucketName string 캐시가 저장된 리포지터리 버킷의 이름입니다.

예시:

config.toml 파일에 직접 구성된 자격 증명:

[runners.cache]
  Type = "gcs"
  Path = "prefix/경로"
  Shared = false
  [runners.cache.gcs]
    AccessID = "cache-access-account@test-project-123456.iam.gserviceaccount.com"
    PrivateKey = "-----BEGIN PRIVATE KEY-----\nXXXXXX\n-----END PRIVATE KEY-----\n"
    BucketName = "runners-cache"

GCP에서 다운로드한 JSON 파일에 포함된 자격 증명:

[runners.cache]
  Type = "gcs"
  Path = "prefix/경로"
  Shared = false
  [runners.cache.gcs]
    CredentialsFile = "/etc/gitlab-runner/service-account.json"
    BucketName = "runners-cache"

GCP 메타데이터 서버의 기본 애플리케이션 자격 증명 (ADC):

Google Cloud ADC(애플리케이션 기본 자격 증명)를 사용할 때 일반적으로 기본 서비스 계정을 사용합니다. 그런 다음 인스턴스에 자격 증명을 제공할 필요가 없습니다:

[runners.cache]
  Type = "gcs"
  Path = "prefix/경로"
  Shared = false
  [runners.cache.gcs]
    BucketName = "runners-cache"

ADC를 사용하는 경우 사용하는 서비스 계정에 iam.serviceAccounts.signBlob 권한이 있는지 확인하십시오. 일반적으로 이것은 서비스 계정에 서비스 계정 토큰 생성자 역할을 부여하여 수행됩니다.

[runners.cache.azure] 섹션

  • GitLab Runner 13.4.0에서 소개되었습니다.

다음 매개변수는 Azure Blob Storage의 네이티브 지원을 정의합니다. 자세한 내용은 Azure Blob Storage 문서를 참조하십시오. S3 및 GCS는 개체 모음을 나타내는 데 버킷이라는 단어를 사용하는 반면 Azure는 블롭 모음을 나타내는 데 컨테이너라는 단어를 사용합니다.

매개변수 유형 설명
AccountName string 리포지터리에 액세스하는 데 사용되는 Azure Blob Storage 계정의 이름입니다.
AccountKey string 컨테이너에 액세스하는 데 사용되는 리포지터리 계정 액세스 키입니다.
ContainerName string 캐시 데이터를 저장할 저장 컨테이너의 이름입니다.
StorageDomain string Azure 리포지터리 엔드포인트를 서비스하는 데 사용되는 도메인 이름입니다(옵션). 기본값은 blob.core.windows.net입니다.

예시:

[runners.cache]
  Type = "azure"
  Path = "prefix/경로"
  Shared = false
  [runners.cache.azure]
    AccountName = "<AZURE STORAGE ACCOUNT NAME>"
    AccountKey = "<AZURE STORAGE ACCOUNT KEY>"
    ContainerName = "runners-cache"
    StorageDomain = "blob.core.windows.net"

[runners.kubernetes] 섹션

  • GitLab Runner v1.6.0에서 소개되었습니다.

다음 매개변수는 Kubernetes 동작을 정의합니다. 더 많은 매개변수에 대한 자세한 내용은 Kubernetes 실행기 문서를 참조하십시오.

매개변수 유형 설명
host string 옵션. Kubernetes 호스트 URL입니다. 지정하지 않은 경우, 실행기는 자동으로 찾으려고 시도합니다.
cert_file string 옵션. Kubernetes 인증서입니다.
key_file string 옵션. Kubernetes 인증 개인 키입니다.
ca_file string 옵션. Kubernetes 인증 ca 인증서입니다.
image string 작업에 사용할 기본 Docker 이미지입니다.
allowed_images array .gitlab-ci.yml에서 허용된 이미지의 와일드카드 디렉터리입니다. 지정되지 않은 경우 모든 이미지가 허용됩니다(["*/*:*"]와 동등). Docker 실행기 또는 Kubernetes 실행기와 함께 사용합니다.
allowed_services array .gitlab-ci.yml에서 허용된 서비스의 와일드카드 디렉터리입니다. 지정되지 않은 경우 모든 이미지가 허용됩니다(["*/*:*"]와 동등). Docker 실행기 또는 Kubernetes 실행기와 함께 사용합니다.
namespace string Kubernetes 작업을 실행할 네임스페이스입니다.
privileged boolean 모든 컨테이너를 특권 플래그를 활성화하여 실행합니다.
allow_privilege_escalation boolean 옵션. allowPrivilegeEscalation 플래그를 사용하여 모든 컨테이너를 실행합니다.
node_selector table key=value 쌍의 string=string table입니다. 모든 key=value 쌍과 일치하는 Kubernetes 노드에 pod의 생성을 제한합니다.
image_pull_secrets array 프라이빗 레지스트리에서 Docker 이미지를 인증하는 데 사용되는 Kubernetes docker-registry 비밀 이름을 포함하는 항목의 배열입니다.

예시:

[runners.kubernetes]
  host = "https://45.67.34.123:4892"
  cert_file = "/etc/ssl/kubernetes/api.crt"
  key_file = "/etc/ssl/kubernetes/api.key"
  ca_file = "/etc/ssl/kubernetes/ca.crt"
  image = "golang:1.8"
  privileged = true
  allow_privilege_escalation = true
  image_pull_secrets = ["docker-registry-credentials", "optional-additional-credentials"]
  allowed_images = ["ruby:*", "python:*", "php:*"]
  allowed_services = ["postgres:9.4", "postgres:latest"]
  [runners.kubernetes.node_selector]
    gitlab = "true"

도우미 이미지

docker, docker+machine, 또는 kubernetes executor를 사용할 때 GitLab Runner는 Git, artifacts, cache 작업을 처리하기 위한 특정 컨테이너를 사용합니다. 이 컨테이너는 도우미 이미지(helper image)라는 이름의 이미지에서 생성됩니다.

도우미 이미지는 amd64, arm, arm64, s390x, ppc64le 아키텍처에서 사용할 수 있습니다. 이 이미지에는 gitlab-runner-helper 이라는 이진 파일이 포함되어 있으며, GitLab Runner 이진 파일의 특별한 컴파일입니다. 이 파일에는 사용 가능한 명령어 중 일부만 포함되어 있으며, Git, Git LFS 및 SSL 인증서 리포지터리도 포함되어 있습니다.

도우미 이미지에는 몇 가지 버전이 있습니다: alpine, alpine3.16, alpine3.17, alpine3.18, alpine3.19, alpine-latest, ubi-fips, ubuntu. alpine 이미지는 현재 footprint가 작아 기본값이지만, 일부 환경에서 DNS 문제가 발생할 수 있습니다. helper_image_flavor = "ubuntu"를 사용하면 ubuntu 버전의 도우미 이미지를 선택할 수 있습니다.

GitLab Runner 16.1 이상에서 alpine 버전은 alpine3.18의 별칭입니다.

alpine-latest 버전은 alpine:latest를 기본 이미지로 사용하며, 이는 더 불안정할 수 있다는 의미일 수 있습니다.

DEB/RPM 패키지에서 GitLab Runner를 설치하는 경우, 지원되는 아키텍처용 이미지가 호스트에 설치됩니다. 러너가 작업을 실행하기 위해, 도커 엔진에서 지정된 버전의 이미지를 찾을 수 없는 경우 자동으로 로드됩니다. dockerdocker+machine executor는 모두 이 방식으로 작동합니다.

alpine 버전의 경우, 패키지에는 기본 alpine 버전 이미지만 포함되어 있습니다. 그 외의 다른 버전은 레지스트리에서 다운로드해야 합니다.

kubernetes executor 및 GitLab Runner의 매뉴얼 설치는 다르게 작동합니다.

  • 매뉴얼 설치의 경우, gitlab-runner-helper 바이너리가 포함되어 있지 않습니다.
  • kubernetes executor의 경우, Kubernetes API는 gitlab-runner-helper 이미지를 로컬 아카이브에서 로드할 수 없습니다.

두 경우 모두 GitLab Runner는 도우미 이미지를 다운로드합니다. GitLab Runner의 리비전과 아키텍처에 따라 어떤 태그를 다운로드할지가 정해집니다.

Arm의 Kubernetes용 도우미 이미지 구성

arm64 Kubernetes 클러스터에서 arm64 도우미 이미지를 사용하려면 구성 파일에서 다음 값을 설정하세요.

[runners.kubernetes]
        helper_image = "gitlab/gitlab-runner-helper:arm64-latest"

Alpine Linux 이전 버전을 사용하는 러너 이미지

이미지는 여러 버전의 Alpine Linux로 빌드되므로 새로운 버전뿐만 아니라 이전 버전도 사용할 수 있습니다.

도우미 이미지의 경우, helper_image_flavor를 변경하거나 도우미 이미지 섹션을 참조하세요.

GitLab Runner 이미지의 경우, 동일한 논리를 따르며 alpine, alpine3.16, alpine3.17, alpine3.18, alpine3.19 또는 alpine-latest가 버전의 접두어로 사용됩니다:

docker pull gitlab/gitlab-runner:alpine3.18-v16.1.0

Alpine pwsh 이미지

GitLab Runner 16.1 이상에서 모든 alpine 도우미 이미지에는 pwsh 변형이 포함되어 있습니다. 유일한 예외는 alpine-latest이며, GitLab Runner 도우미 이미지가 기반으로 하는 pwsh Docker 이미지에서 alpine:latest을 지원하지 않기 때문입니다.

예시:

docker pull gitlab/gitlab-runner-helper:alpine3.18-x86_64-v16.1.0-pwsh

도우미 이미지 레지스트리

GitLab 15.0 이상에서 도우미 이미지는 GitLab Container Registry에서 가져옵니다.

GitLab 15.0 이전에는 도우미 이미지를 Docker Hub의 이미지를 사용하도록 구성합니다. GitLab 레지스트리에서 기본 gitlab-runner-helper 이미지를 검색하려면 helper-image 값인 registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-v${CI_RUNNER_VERSION}를 사용하세요.

Self-managed 인스턴스는 GitLab.com의 GitLab Container Registry에서 도우미 이미지를 가져옵니다. GitLab Container Registry의 상태를 확인하려면 GitLab System Status를 참조하세요.

도우미 이미지 재정의

어떤 경우에는 도우미 이미지를 재정의해야 할 수 있습니다. 이를 수행하는 몇 가지 이유는 다음과 같습니다:

  1. 작업 실행 속도 향상: 느린 인터넷 연결 환경에서 동일한 이미지를 여러 번 다운로드하면 작업 실행 시간이 증가할 수 있습니다. gitlab/gitlab-runner-helper:XYZ의 정확한 복사본이 저장된 로컬 레지스트리에서 도우미 이미지를 다운로드하면 속도를 향상시킬 수 있습니다.

  2. 보안 문제: 검토되지 않은 외부 의존성을 다운로드하고 싶지 않을 수 있습니다. 로컬 리포지터리에 저장되어 검토된 의존성만 사용하도록 비즈니스 규칙이 있을 수 있습니다.

  3. 인터넷 액세스가 불가능한 빌드 환경: 경우에 따라 작업은 전용 폐쇄 네트워크 환경에서 실행됩니다. 이는 kubernetes executor에는 해당되지 않으며, 이미지는 여전히 Kubernetes 클러스터에서 사용 가능한 외부 레지스트리에서 다운로드해야 합니다.

  4. 추가 소프트웨어: openssh와 같은 추가 소프트웨어를 도우미 이미지에 설치하여 git+http 대신 git+ssh를 통해 액세스할 수 있는 서브모듈을 지원해야 할 수 있습니다.

이러한 경우에 helper_image 구성 필드를 사용하여 docker, docker+machine, kubernetes executor에 대해 사용자 정의 이미지를 구성할 수 있습니다.

[[runners]]
  (...)
  executor = "docker"
  [runners.docker]
    (...)
    helper_image = "my.registry.local/gitlab/gitlab-runner-helper:tag"

도우미 이미지의 버전은 엄격하게 GitLab Runner의 버전과 연결되어야 합니다. 이러한 이미지를 제공하는 주된 이유 중 하나는 GitLab Runner가 gitlab-runner-helper 이진 파일을 사용하고 있기 때문입니다. 이 바이너리는 GitLab Runner 소스의 일부로부터 컴파일되었으며, 이 바이너리는 두 사용 체계간 동일해야 한다고 예상되는 내부 API를 사용합니다.

기본값으로, GitLab Runner는 GitLab Runner 아키텍처 및 Git revision을 기반으로 한 gitlab/gitlab-runner-helper:XYZ 이미지를 참조합니다. GitLab Runner 11.3 이상에서는 다음과 같은 버전 변수 중 하나를 사용하여 이미지 버전을 정의할 수 있습니다:

[[runners]]
  (...)
  executor = "docker"
  [runners.docker]
    (...)
    helper_image = "my.registry.local/gitlab/gitlab-runner-helper:x86_64-v${CI_RUNNER_VERSION}"

이 구성을 사용하면 GitLab Runner가 executor에게 컴파일 데이터에 기반한 버전 x86_64-v${CI_RUNNER_VERSION} 이미지를 사용하도록 지시합니다. GitLab Runner를 새 버전으로 업데이트한 후에 이미지를 레지스트리에 업로드해야 하며, 그렇지 않으면 작업이 “이미지 없음” 오류로 시작하여 실패합니다.

GitLab Runner 13.2 이상에서, 도우미 이미지는 $CI_RUNNER_VERSION과 함께 태그가 지정됩니다. 두 태그 모두 유효하며 동일한 이미지를 가리킵니다.

[[runners]]
  (...)
  executor = "docker"
  [runners.docker]
    (...)
    helper_image = "my.registry.local/gitlab/gitlab-runner-helper:x86_64-v${CI_RUNNER_VERSION}"

PowerShell Core를 사용하는 경우

Linux용 추가 헬퍼 이미지의 다른 버전으로, PowerShell Core를 포함하고 있는 이미지가 gitlab/gitlab-runner-helper:XYZ-pwsh 태그와 함께 출판됩니다.

[runners.custom_build_dir] 섹션

이 섹션은 사용자 정의 빌드 디렉터리 매개변수를 정의합니다.

이 기능은 명시적으로 구성되지 않은 경우, kubernetes, dockerdocker+machine 실행기에 대해 기본적으로 활성화됩니다. 다른 실행기에 대해서는 기본적으로 비활성화됩니다.

이 기능을 사용하려면 GIT_CLONE_PATHrunners.builds_dir에서 정의된 경로에 있어야 합니다. builds_dir을 사용하려면 $CI_BUILDS_DIR 변수를 사용하세요.

기본적으로, 이 기능은 dockerkubernetes 실행기에만 활성화되어 있습니다. 왜냐하면 이러한 실행기는 리소스를 분리하는 좋은 방법을 제공하기 때문입니다. 그러나 모든 실행기에 대해 명시적으로 이 기능을 활성화할 수 있지만, ‘concurrent > 1’과 함께 사용할 때 주의해야 합니다.

매개변수 유형 설명
enabled boolean 작업의 사용자 정의 빌드 디렉터리를 정의할 수 있도록 합니다.

예시:

[runners.custom_build_dir]
  enabled = true

기본 빌드 디렉터리

GitLab Runner는 리파지토리를 _빌드 디렉터리_라고도 알려진 기본 경로 아래에 복제합니다. 이 기본 디렉터리의 기본 위치는 실행기에 따라 다릅니다. 예를 들어:

  • Kubernetes, DockerDocker Machine 실행기의 경우, 컨테이너 내부의 /builds입니다.
  • Shell 실행기의 경우, $PWD/builds입니다.
  • SSH, VirtualBoxParallels 실행기의 경우, SSH 연결을 처리하기 위해 구성된 사용자의 홈 디렉터리 안의 ~/builds입니다.
  • Custom 실행기의 경우, 기본값이 제공되지 않으며 명시적으로 구성해야 합니다. 그렇지 않으면 작업이 실패합니다.

사용자는 builds_dir 설정을 사용하여 사용자 정의 빌드 디렉터리를 명시적으로 정의할 수 있습니다.

note
필요한 경우 GIT_CLONE_PATH 를 지정하거나 아래 가이드라인을 적용하지 않을 수 있습니다.

GitLab Runner는 모든 작업에 대해 _빌드 디렉터리_를 사용하지만, 특정 패턴을 사용하여 중첩합니다. {builds_dir}/$RUNNER_TOKEN_KEY/$CONCURRENT_ID/$NAMESPACE/$PROJECT_NAME. 예시: /builds/2mn-ncv-/0/user/playground.

GitLab Runner는 빌드 디렉터리 내부에 저장하는 것을 막지 않습니다. 예를 들어, CI 실행 중에 사용할 수 있는 도구를 /builds/tools 안에 저장할 수 있습니다. 그러나 이러한 방식은 강하게 권장하지 않습니다. 빌드 디렉터리 내에 아무 것도 저장하지 않아야 하며, CI에 필요한 의존성이 있다면 다른 위치에 설치하는 것을 권장합니다.

[runners.referees] 섹션

GitLab Runner 리퍼리를 사용하여 추가 작업 모니터링 데이터를 GitLab에 전달하세요. 리퍼리는 작업과 관련된 추가 데이터를 쿼리하고 수집하는 실행기 관리자 내의 워커입니다. 결과는 작업 artifact로 GitLab에 업로드됩니다.

메트릭스 Runner 리퍼리 사용

작업을 실행하는 머신이나 컨테이너가 Prometheus 메트릭을 노출하는 경우, GitLab Runner는 작업 기간 동안 Prometheus 서버를 쿼리할 수 있습니다. 메트릭을 수신한 후, 나중에 분석에 사용할 수 있는 작업 artifact로 업로드합니다.

리퍼리는 docker-machine 실행자만 지원합니다.

GitLab Runner용 메트릭스 Runner 리퍼리 구성

config.toml 파일 내에서 [[runner]] 섹션 안에 [runner.referees][runner.referees.metrics]를 정의하고 다음 필드를 추가하세요:

설정 설명
prometheus_address GitLab Runner 인스턴스에서 메트릭을 수집하는 서버입니다. 작업이 완료되면 실행기 관리자가 액세스할 수 있어야 합니다.
query_interval 작업과 관련된 Prometheus 인스턴스가 쿼리되는 빈도를 정의하는 것으로, 간격(초)으로 정의됩니다.
queries 각 간격에 대해 실행되는 PromQL 쿼리 배열입니다.

다음은 node_exporter 메트릭스를 위한 완전한 구성 예시입니다:

[[runners]]
  [runners.referees]
    [runners.referees.metrics]
      prometheus_address = "http://localhost:9090"
      query_interval = 10
      metric_queries = [
        "arp_entries:rate(node_arp_entries{{selector}}[{interval}])",
        "context_switches:rate(node_context_switches_total{{selector}}[{interval}])",
        "cpu_seconds:rate(node_cpu_seconds_total{{selector}}[{interval}])",
        "disk_read_bytes:rate(node_disk_read_bytes_total{{selector}}[{interval}])",
        "disk_written_bytes:rate(node_disk_written_bytes_total{{selector}}[{interval}])",
        "memory_bytes:rate(node_memory_MemTotal_bytes{{selector}}[{interval}])",
        "memory_swap_bytes:rate(node_memory_SwapTotal_bytes{{selector}}[{interval}])",
        "network_tcp_active_opens:rate(node_netstat_Tcp_ActiveOpens{{selector}}[{interval}])",
        "network_tcp_passive_opens:rate(node_netstat_Tcp_PassiveOpens{{selector}}[{interval}])",
        "network_receive_bytes:rate(node_network_receive_bytes_total{{selector}}[{interval}])",
        "network_receive_drops:rate(node_network_receive_drop_total{{selector}}[{interval}])",
        "network_receive_errors:rate(node_network_receive_errs_total{{selector}}[{interval}])",
        "network_receive_packets:rate(node_network_receive_packets_total{{selector}}[{interval}])",
        "network_transmit_bytes:rate(node_network_transmit_bytes_total{{selector}}[{interval}])",
        "network_transmit_drops:rate(node_network_transmit_drop_total{{selector}}[{interval}])",
        "network_transmit_errors:rate(node_network_transmit_errs_total{{selector}}[{interval}])",
        "network_transmit_packets:rate(node_network_transmit_packets_total{{selector}}[{interval}])"
      ]

메트릭스 쿼리는 canonical_name:query_string 포맷입니다. 쿼리 문자열은 실행 중에 대체되는 두 변수를 지원합니다:

설정 설명
{selector} 특정 GitLab Runner 인스턴스에서 Prometheus에 의해 생성된 메트릭을 선택하는 label_name=label_value 쌍으로 대체됩니다.
{interval} 이 리퍼리에 대한 [runners.referees.metrics] 설정에서의 query_interval 매개변수로 대체됩니다.

예를 들어, docker-machine 실행자를 사용하는 공유 GitLab Runner 환경은 {selector}node=shared-runner-123와 유사하게 가질 것입니다.