- 구성 검증
- 전역 섹션
[session_server]
섹션-
[[runners]]
섹션 - 실행기
- 셸
-
[runners.docker]
섹션 [runners.parallels]
섹션[runners.virtualbox]
섹션- 기본 VM 이미지 재정의
[runners.ssh]
섹션-
[runners.machine]
섹션 [runners.instance]
섹션[runners.autoscaler]
섹션[runners.autoscaler.plugin_config]
섹션[runners.autoscaler.scale_throttle]
섹션[runners.autoscaler.connector_config]
섹션[runners.autoscaler.state_storage]
섹션-
[[runners.autoscaler.policy]]
섹션 [runners.autoscaler.vm_isolation]
섹션[runners.autoscaler.vm_isolation.connector_config]
섹션[runners.custom]
섹션-
[runners.cache]
섹션 [runners.kubernetes]
섹션- 헬퍼 이미지
-
[runners.custom_build_dir]
섹션 -
[runners.referees]
섹션
고급 구성
GitLab Runner의 동작을 변경하려면 config.toml
파일을 수정하세요.
config.toml
파일은 다음 위치에서 찾을 수 있습니다:
-
GitLab Runner가 root로 실행될 때 *nix 시스템의
/etc/gitlab-runner/
. 이 디렉토리는 서비스 구성의 경로이기도 합니다. -
GitLab Runner가 비-root로 실행될 때 *nix 시스템의
~/.gitlab-runner/
. -
기타 시스템의
./
.
대부분의 옵션을 변경할 때 GitLab Runner는 재시작이 필요하지 않습니다. 이에는 [[runners]]
섹션의 매개변수와 전역 섹션의 대부분의 매개변수가 포함되지만 listen_address
는 제외됩니다. 이미 등록된 러너는 다시 등록할 필요가 없습니다.
GitLab Runner는 3초마다 구성 변경 사항을 확인하고 필요한 경우 다시 로드합니다. GitLab Runner는 SIGHUP
신호에 응답하여 구성도 다시 로드합니다.
구성 검증
- GitLab Runner 15.10에서 도입됨
구성 검증은 config.toml
파일의 구조를 확인하는 과정입니다. 구성 검증기의 출력은 info
수준 메시지만 제공합니다.
구성 검증 과정은 정보 제공 목적으로만 사용됩니다. 출력 결과를 사용하여 러너 구성의 잠재적인 문제를 식별할 수 있습니다. 구성 검증이 모든 가능한 문제를 잡아내지 못할 수 있으며, 메시지가 없더라도 config.toml
파일이 완벽하다는 보장은 없습니다.
전역 섹션
이 설정은 전역적입니다. 모든 러너에 적용됩니다.
설정 | 설명 |
---|---|
concurrent |
모든 등록된 러너에서 동시에 실행할 수 있는 작업 수를 제한합니다. 각 [[runners]] 섹션은 자체 제한을 정의할 수 있지만, 이 값은 모든 해당 값의 최대치를 설정합니다. 예를 들어 10 의 값은 동시에 10개 이상의 작업이 실행될 수 없음을 의미합니다. 0 은 금지됩니다. 이 값을 사용하면 러너 프로세스가 치명적인 오류와 함께 종료됩니다. 이 설정이 Docker Machine, Instance, 및 Docker Autoscaler 실행기에서 어떻게 작동하는지 확인하세요. |
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 서버가 청취해야 하는 주소 (<host>:<port> )를 정의합니다. |
shutdown_timeout |
강제 종료 작업이 시간 초과되고 프로세스를 종료할 때까지의 초 수입니다. 기본 값은 30 입니다. 0 또는 그 이하로 설정하면 기본 값이 사용됩니다. |
구성 예시는 다음과 같습니다:
# 예제 `config.toml` 파일
concurrent = 100 # 이 `config.toml` 파일에서 정의된 모든 러너 섹션에 적용되는 작업 동시성의 전역 설정
log_level = "warning"
log_format = "info"
check_interval = 3 # 초 단위의 값
[[runners]]
name = "first"
url = "당신의 GitLab 인스턴스 URL (예: `https://gitlab.com`)"
executor = "shell"
(...)
[[runners]]
name = "second"
url = "당신의 GitLab 인스턴스 URL (예: `https://gitlab.com`)"
executor = "docker"
(...)
[[runners]]
name = "third"
url = "당신의 GitLab 인스턴스 URL (예: `https://gitlab.com`)"
executor = "docker-autoscaler"
(...)
log_format
예제 (단축)
runner
런타임 플랫폼 arch=amd64 os=darwin pid=37300 revision=HEAD version=development version
/multi-runner/config.toml...에서 다중 실행 시작... builds=0
경고: 사용자 모드로 실행 중입니다.
경고: 시스템 모드의 경우 sudo를 사용하세요:
경고: $ sudo gitlab-runner...
구성 로드됨 builds=0
listen_address가 정의되지 않음, 메트릭 및 디버그 엔드포인트 비활성화됨 builds=0
[session_server].listen_address가 정의되지 않음, 세션 엔드포인트 비활성화됨 builds=0
text
정보[0000] 런타임 플랫폼 arch=amd64 os=darwin pid=37773 revision=HEAD version="development version"
정보[0000] /etc/gitlab-runner/config.toml...에서 다중 실행 시작... builds=0
경고[0000] 사용자 모드로 실행 중입니다.
경고[0000] 시스템 모드의 경우 sudo를 사용하세요:
경고[0000] $ sudo gitlab-runner...
정보[0000]
정보[0000] 구성 로드됨 builds=0
정보[0000] listen_address가 정의되지 않음, 메트릭 및 디버그 엔드포인트 비활성화됨 builds=0
정보[0000] [session_server].listen_address가 정의되지 않음, 세션 엔드포인트 비활성화됨 builds=0
json
{"arch":"amd64","level":"info","msg":"런타임 플랫폼","os":"darwin","pid":38229,"revision":"HEAD","time":"2020-06-05T15:57:35+02:00","version":"development version"}
{"builds":0,"level":"info","msg":"/etc/gitlab-runner/config.toml...에서 다중 실행 시작...","time":"2020-06-05T15:57:35+02:00"}
{"level":"warning","msg":"사용자 모드로 실행 중입니다.","time":"2020-06-05T15:57:35+02:00"}
{"level":"warning","msg":"시스템 모드의 경우 sudo를 사용하세요:","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":"구성 로드됨","time":"2020-06-05T15:57:35+02:00"}
{"builds":0,"level":"info","msg":"listen_address가 정의되지 않음, 메트릭 및 디버그 엔드포인트 비활성화됨","time":"2020-06-05T15:57:35+02:00"}
{"builds":0,"level":"info","msg":"[session_server].listen_address가 정의되지 않음, 세션 엔드포인트 비활성화됨","time":"2020-06-05T15:57:35+02:00"}
check_interval
작동 방식
config.toml
에 [[runners]]
섹션이 두 개 이상 있을 경우, GitLab Runner는
지속적으로 작업 요청을 GitLab 인스턴스에 예약하는 루프를 포함합니다.
다음 예제는 check_interval
이 10초이고 두 개의 [[runners]]
섹션
(runner-1
및 runner-2
)를 가지고 있습니다. GitLab Runner는 매 10초마다 요청을 보내고 5초 동안 대기합니다:
-
check_interval
값 가져오기 (10s
). - 러너 목록 가져오기 (
runner-1
,runner-2
). - 대기 간격 계산하기 (
10s / 2 = 5s
). - 무한 루프 시작:
-
runner-1
에 대한 작업 요청. -
5s
동안 대기. -
runner-2
에 대한 작업 요청. -
5s
동안 대기. - 반복.
-
다음은 check_interval
구성 예제입니다:
# 예제 `config.toml` 파일
concurrent = 100 # 이 `config.toml` 파일에 정의된 모든 러너 섹션에 적용되는 작업 동시 처리에 대한 글로벌 설정입니다.
log_level = "warning"
log_format = "info"
check_interval = 10 # 초 단위 값
[[runners]]
name = "runner-1"
url = "귀하의 GitLab 인스턴스 URL (예: `https://gitlab.com`)"
executor = "shell"
(...)
[[runners]]
name = "runner-2"
url = "귀하의 GitLab 인스턴스 URL (예: `https://gitlab.com`)"
executor = "docker"
(...)
이 예제에서 러너 프로세스에서의 작업 요청은 매 5초마다 이루어집니다.
runner-1
및 runner-2
가 동일한
GitLab 인스턴스에 연결되어 있다면, 이 GitLab 인스턴스도 이 러너로부터 매 5초마다 새 요청을 받습니다.
첫 번째 요청과 두 번째 요청 사이에 두 개의 대기 기간이 발생합니다.
각 기간은 5초를 소요하므로, runner-1
의 후속 요청은 대략적으로 10초가 걸립니다.
runner-2
에도 동일하게 적용됩니다.
더 많은 러너를 정의하면 대기 간격이 더 작아집니다.
그러나 러너에 대한 요청은 다른 러너와 그 대기 기간에 대한 모든 요청이 호출된 후에 반복됩니다.
[session_server]
섹션
[session_server]
섹션은 사용자가 작업과 상호작용할 수 있게 해줍니다. 예를 들어,
인터랙티브 웹 터미널에서 가능합니다.
[session_server]
섹션은 루트 수준에서 지정해야 하며, 러너별로 지정하지 않아야 합니다.
이 섹션은 [[runners]]
섹션 외부에 정의해야 합니다.
# 세션 서버가 구성된 `config.toml` 파일의 예
concurrent = 100 # 이 `config.toml` 파일에 정의된 모든 러너 섹션에 적용되는 작업 동시 실행에 대한 전역 설정
log_level = "warning"
log_format = "info"
check_interval = 3 # 초 단위의 값
[session_server]
listen_address = "[::]:8093" # 포트 `8093`에서 모든 사용 가능한 인터페이스에서 수신
advertise_address = "runner-host-name.tld:8093"
session_timeout = 1800
[session_server]
섹션을 구성할 때:
-
listen_address
및advertise_address
의 경우host:port
형식을 사용하십시오. 여기서host
는 IP 주소(127.0.0.1:8093
) 또는 도메인(my-runner.example.com:8093
)입니다. 러너는 이 정보를 사용하여 보안 연결을 위한 TLS 인증서를 생성합니다. -
웹 브라우저가
advertise_address
에 연결할 수 있는지 확인하십시오. 라이브 세션은 웹 브라우저에 의해 시작됩니다. -
advertise_address
가 공용 IP 주소인지 확인하십시오. 그렇지 않으면 애플리케이션 설정인allow_local_requests_from_web_hooks_and_services
를 활성화해야 합니다.
설정 | 설명 |
---|---|
listen_address |
세션 서버에 대한 내부 URL입니다. |
advertise_address |
세션 서버에 접근하기 위한 URL입니다. GitLab Runner가 GitLab에 노출합니다. 정의되지 않으면 listen_address 가 사용됩니다. |
session_timeout |
작업이 완료된 후 세션이 활성 상태로 유지될 수 있는 초 수입니다. 타임아웃은 작업 완료를 차단합니다. 기본값은 1800 (30분)입니다. |
세션 서버 및 터미널 지원을 비활성화하려면 [session_server]
섹션을 삭제하십시오.
참고:
러너 인스턴스가 이미 실행 중인 경우,
[session_server]
섹션의 변경 사항을 적용하려면 gitlab-runner restart
를 실행해야 할 수 있습니다.
GitLab Runner Docker 이미지를 사용하는 경우,
docker run
명령에 -p 8093:8093
를 추가하여 포트 8093
을 노출해야 합니다.
[[runners]]
섹션
각 [[runners]]
섹션은 하나의 러너를 정의합니다.
설정 | 설명 |
---|---|
name |
러너의 설명입니다. 정보 제공 용도입니다. |
url |
GitLab 인스턴스 URL입니다. |
token |
러너 등록 중에 얻어진 러너의 인증 토큰입니다. 등록 토큰과는 다릅니다. |
tls-ca-file |
HTTPS 사용 시, 피어를 확인하는 인증서를 포함하는 파일입니다. 자체 서명된 인증서 또는 커스텀 인증 기관 문서를 참조하세요. |
tls-cert-file |
HTTPS 사용 시, 피어와 인증하는 인증서를 포함하는 파일입니다. |
tls-key-file |
HTTPS 사용 시, 피어와 인증하는 개인 키를 포함하는 파일입니다. |
limit |
등록된 이 러너가 동시에 처리할 수 있는 작업 수를 제한합니다. 0 (기본값)은 제한이 없음을 의미합니다. 이 설정이 Docker Machine, Instance, Docker Autoscaler 실행자에서 어떻게 작동하는지 보려면 각각의 문서를 참조하세요. |
executor |
러너가 CI/CD 작업을 실행하는 데 사용하는 호스트 운영 체제의 환경 또는 명령 프로세서입니다. 자세한 내용은 실행자를 참조하세요. |
shell |
스크립트를 생성할 셸의 이름입니다. 기본값은 플랫폼에 따라 다릅니다. |
builds_dir |
선택된 실행자의 컨텍스트 내에서 빌드가 저장될 디렉터리에 대한 절대 경로입니다. 예를 들어, 로컬, Docker 또는 SSH입니다. |
cache_dir |
선택된 실행자의 컨텍스트 내에서 빌드 캐시가 저장될 디렉터리에 대한 절대 경로입니다. 예를 들어, 로컬, Docker 또는 SSH입니다. docker 실행자를 사용하는 경우, 이 디렉터리는 해당 volumes 매개변수에 포함되어야 합니다. |
environment |
환경 변수를 추가하거나 덮어씁니다. |
request_concurrency |
GitLab에서 새로운 작업에 대한 동시 요청 수를 제한합니다. 기본값은 1 입니다. |
output_limit |
최대 빌드 로그 크기(킬로바이트 단위)입니다. 기본값은 4096 (4MB)입니다. |
pre_get_sources_script |
Git 리포지토리를 업데이트하고 하위 모듈을 업데이트하기 전에 러너에서 실행할 명령입니다. Git 클라이언트 구성을 먼저 조정하는 데 사용합니다. 여러 명령을 삽입하려면 (세 줄로 묶인) 멀티라인 문자열이나 \n 문자를 사용하십시오. |
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 |
디버그 추적 비활성화입니다. true 로 설정하면 CI_DEBUG_TRACE 가 true 로 설정되더라도 디버그 로그(추적)가 비활성화됩니다. |
referees |
작업 아티팩트를 GitLab에 전달하는 추가 작업 모니터링 작업자입니다. |
unhealthy_requests_limit |
러너 작업자가 비활성화되는 새로운 작업 요청에 대한 unhealthy 응답 수입니다. |
unhealthy_interval |
건강하지 않은 요청 제한을 초과한 후 러너 작업자가 비활성화되는 기간입니다. ‘3600s’, ‘1h30min’ 등의 구문을 지원합니다. |
예시:
[[runners]]
name = "ruby-3.3-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_url
을 http://192.168.1.23
로 설정하세요.
clone_url
이 설정되면, 러너는 다음 형식의 클론 URL을 구성합니다.
http://gitlab-ci-token:s3cr3tt0k3n@192.168.1.23/namespace/project.git
.
메모:
clone_url
은 Git LFS 엔드포인트에 영향을 미치지 않습니다.
Git LFS 엔드포인트 수정
Git LFS 엔드포인트를 수정하려면 다음 파일 중 하나에서 pre_get_sources_script
를 설정하세요:
-
config.toml
:pre_get_sources_script = "mkdir -p $RUNNER_TEMP_PROJECT_DIR/git-template; git config -f $RUNNER_TEMP_PROJECT_DIR/git-template/config lfs.url https://<alternative-endpoint>"
-
.gitlab-ci.yml
:default: hooks: pre_get_sources_script: - mkdir -p $RUNNER_TEMP_PROJECT_DIR/git-template - git config -f $RUNNER_TEMP_PROJECT_DIR/git-template/config lfs.url https://localhost
unhealthy_requests_limit
및 unhealthy_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 VM, 하지만 SSH로 연결. |
virtualbox |
[runners.virtualbox] 및 [runners.ssh]
|
VirtualBox VM, 하지만 SSH로 연결. |
docker+machine |
[runners.docker] 및 [runners.machine]
|
docker 처럼, 하지만 자동 확장된 Docker 머신을 사용. |
kubernetes |
[runners.kubernetes] |
Kubernetes 포드. |
docker-autoscaler |
[docker-autoscaler] 및 [runners.autoscaler]
|
docker 처럼, 하지만 컨테이너에서 CI/CD 작업을 실행하기 위해 자동 확장되는 인스턴스를 사용. |
instance |
[docker-autoscaler] 및 [runners.autoscaler]
|
shell 처럼, 하지만 호스트 인스턴스에서 CI/CD 작업을 직접 실행하기 위해 자동 확장되는 인스턴스를 사용. |
셸
CI/CD 작업은 셸 실행기를 사용하도록 구성되었을 때 호스트 머신에서 로컬로 실행됩니다. 지원되는 운영 체제 셸은 다음과 같습니다:
셸 | 설명 |
---|---|
bash |
Bash(Bourne-shell) 스크립트를 생성합니다. 모든 명령은 Bash 컨텍스트에서 실행됩니다. 모든 Unix 시스템의 기본값입니다. |
sh |
Sh(Bourne-shell) 스크립트를 생성합니다. 모든 명령은 Sh 컨텍스트에서 실행됩니다. 모든 Unix 시스템에서 bash 의 대체입니다. |
powershell |
PowerShell 스크립트를 생성합니다. 모든 명령은 PowerShell Desktop 컨텍스트에서 실행됩니다. GitLab Runner 12.0-13.12에서는 Windows의 기본값입니다. |
pwsh |
PowerShell 스크립트를 생성합니다. 모든 명령은 PowerShell Core 컨텍스트에서 실행됩니다. GitLab Runner 14.0 이상에서는 Windows의 기본값입니다. |
shell
옵션이 bash
또는 sh
로 설정되면 Bash의 ANSI-C quoting이 작업 스크립트를 셸 이스케이프하는 데 사용됩니다.
POSIX 준수 셸 사용
GitLab Runner 14.9 이상에서는 FF_POSIXLY_CORRECT_ESCAPES
라는 기능 플래그를 활성화하여 POSIX 준수 셸(예: dash
)을 사용합니다. 활성화되면, POSIX 준수 셸 이스케이프 메커니즘인 “Double Quotes”가 사용됩니다.
[runners.docker]
섹션
다음 설정은 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 입니다. 문자열입니다. |
cpuset_mems |
제어 그룹의 CpusetMems 입니다. 문자열입니다. |
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 |
이미지의 entrypoint 덮어쓰기를 비활성화합니다. |
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.19 와 동일한 버전을 사용합니다. |
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 (기본값)입니다. 풀 정책 문서에 대한 자세한 내용을 확인하세요. 여러 풀 정책 추가, 실패한 풀 재시도 또는 풀 정책 제한을 추가할 수 있습니다. |
runtime |
Docker 컨테이너의 런타임입니다. |
isolation |
컨테이너 격리 기술(default , hyperv , 및 process ). Windows 전용입니다. |
security_opt |
보안 옵션(–security-opt in docker run ). : 로 구분된 키/값 목록을 받습니다. |
shm_size |
이미지에 대한 공유 메모리 크기(바이트)입니다. |
sysctls |
sysctl 옵션입니다. |
tls_cert_path |
ca.pem , cert.pem 또는 key.pem 이 저장되고 Docker에 대한 안전한 TLS 연결을 만드는 데 사용되는 디렉토리입니다. boot2docker 에서 유용합니다. |
tls_verify |
Docker 데몬에 대한 연결의 TLS 검증을 활성화 또는 비활성화합니다. 기본적으로 비활성화되어 있습니다. 기본적으로 GitLab Runner는 SSH를 통해 Docker Unix 소켓에 연결합니다. Unix 소켓은 RTLS를 지원하지 않으며, SSH를 통해 HTTP로 통신하여 암호화 및 인증을 제공합니다. tls_verify 를 활성화하는 것은 일반적으로 필요하지 않으며 추가 구성이 필요합니다. tls_verify 를 활성화하려면 데몬이 포트에서 수신 대기해야 합니다(기본 Unix 소켓이 아니라) 및 GitLab Runner Docker 호스트가 데몬이 수신 대기하고 있는 주소를 사용해야 합니다. |
user |
컨테이너 내에서 모든 명령을 지정된 사용자로 실행합니다. |
userns_mode |
사용자 네임스페이스 리맵핑 옵션이 활성화되었을 때 컨테이너 및 Docker 서비스의 사용자 네임스페이스 모드입니다. Docker 1.10 이상에서 사용할 수 있습니다. |
ulimit |
컨테이너에 전달되는 ulimit 값입니다. Docker --ulimit 플래그와 동일한 구문을 사용합니다. |
volumes |
마운트되어야 할 추가 볼륨입니다. Docker -v 플래그와 동일한 구문을 사용합니다. |
volumes_from |
<container name>[:<access_level>] 형식으로 다른 컨테이너에서 상속할 볼륨 목록입니다. 접근 수준은 기본적으로 읽기-쓰기(read-write)로 설정되지만 수동으로 ro (읽기 전용) 또는 rw (읽기-쓰기)로 설정할 수 있습니다. |
volume_driver |
컨테이너에 사용할 볼륨 드라이버입니다. |
wait_for_services_timeout |
Docker 서비스 대기 시간입니다. -1 로 설정하여 비활성화합니다. 기본값은 30 입니다. |
container_labels |
러너에 의해 생성된 각 컨테이너에 추가할 레이블 세트입니다. 레이블 값에 환경 변수를 포함하여 확장할 수 있습니다. |
services_limit |
작업당 허용되는 최대 서비스 수를 설정합니다. -1 (기본값)은 제한이 없음을 의미합니다. |
service_cpuset_cpus |
서비스에 사용할 cgroups CpusetCpus 를 포함하는 문자열 값입니다. |
service_cpu_shares |
서비스의 상대 CPU 사용을 설정하는 데 사용되는 CPU 공유 수(기본값: 1024 )입니다. |
service_cpus |
서비스의 CPU 수 문자열 값입니다. Docker 1.13 이상에서 사용할 수 있습니다. |
service_memory |
서비스의 메모리 제한에 대한 문자열 값입니다. |
service_memory_swap |
서비스의 총 메모리 제한에 대한 문자열 값입니다. |
service_memory_reservation |
서비스의 메모리 소프트 제한에 대한 문자열 값입니다. |
[[runners.docker.services]]
섹션
작업과 함께 실행할 추가 서비스를 지정합니다. 사용 가능한 이미지 목록은 Docker Registry를 참조하세요.
각 서비스는 별도의 컨테이너에서 실행되며 작업에 연결됩니다.
매개변수 | 설명 |
---|---|
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:3.3"
memory = "128m"
memory_swap = "256m"
memory_reservation = "64m"
oom_kill_disable = false
cpuset_cpus = "0,1"
cpuset_mems = "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]
섹션의 볼륨
볼륨에 대한 자세한 정보는 Docker 문서에서 확인하세요.
다음 예제는 [runners.docker]
섹션에서 볼륨을 지정하는 방법을 보여줍니다.
예제 1: 데이터 볼륨 추가
데이터 볼륨은 하나 이상의 컨테이너에서 Union File System을 우회하는 특별히 지정된 디렉토리입니다. 데이터 볼륨은 컨테이너의 수명 주기와 독립적으로 데이터를 지속하도록 설계되었습니다.
[runners.docker]
host = ""
hostname = ""
tls_cert_path = "/Users/ayufan/.boot2docker/certs"
image = "ruby:3.3"
privileged = false
disable_cache = true
volumes = ["/path/to/volume/in/container"]
이 예제는 컨테이너의 /path/to/volume/in/container
에 새로운 볼륨을 생성합니다.
예제 2: 호스트 디렉토리를 데이터 볼륨으로 마운트
컨테이너 외부에 디렉토리를 저장하려는 경우 Docker 데몬의 호스트에서 컨테이너로 디렉토리를 마운트할 수 있습니다:
[runners.docker]
host = ""
hostname = ""
tls_cert_path = "/Users/ayufan/.boot2docker/certs"
image = "ruby:3.3"
privileged = false
disable_cache = true
volumes = ["/path/to/bind/from/host:/path/to/bind/in/container:rw"]
이 예제는 CI/CD 호스트의 /path/to/bind/from/host
를 컨테이너의 /path/to/bind/in/container
에 사용합니다.
GitLab Runner 11.11 이상에서는 정의된 서비스에 대해 호스트 디렉토리를 마운트합니다.
개인 컨테이너 레지스트리 사용
작업에 대한 이미지 소스로 개인 레지스트리를 사용하려면 CI/CD 변수 DOCKER_AUTH_CONFIG
로 인증을 구성하세요. 다음 방법 중 하나로 변수를 설정할 수 있습니다:
-
file
형식으로 프로젝트의 CI/CD 설정 -
config.toml
파일
if-not-present
풀 정책으로 개인 레지스트리를 사용하면 보안 문제를 초래할 수 있습니다. 풀 정책이 작동하는 방식에 대한 자세한 정보는 러너가 이미지를 끌어오는 방법 구성하기를 참조하세요.
개인 컨테이너 레지스트리 사용에 대한 더 많은 정보는 다음을 참조하세요:
러너가 수행하는 단계를 요약하면 다음과 같습니다:
-
레지스트리 이름은 이미지 이름에서 찾아집니다.
-
값이 비어 있지 않으면 실행기는 이 레지스트리에 대한 인증 구성을 검색합니다.
-
마지막으로 지정된 레지스트리에 해당하는 인증이 발견되면, 이후의 풀에서 이를 사용합니다.
GitLab 통합 레지스트리에 대한 지원
GitLab은 작업 데이터를 함께 통합 레지스트리에 대한 자격 증명을 전송합니다. 이러한 자격 증명은 자동으로 레지스트리의 인증 매개변수 목록에 추가됩니다.
이 단계 이후 레지스트리에 대한 인증은 DOCKER_AUTH_CONFIG
변수로 추가된 구성고 유사하게 진행됩니다.
작업에서는 GitLab 통합 레지스트리의 모든 이미지를 사용할 수 있으며, 이미지가 비공개이거나 보호되어 있어도 사용할 수 있습니다. 작업이 액세스할 수 있는 이미지에 대한 정보는 CI/CD 작업 토큰 문서를 참조하세요.
도커 인증 우선 순위 해결
앞서 설명한 바와 같이, GitLab Runner는 다양한 방법으로 전송된 자격 증명을 사용하여 도커를 레지스트리에 대해 인증할 수 있습니다. 적절한 레지스트리를 찾기 위해 다음의 우선 순위를 고려합니다:
-
DOCKER_AUTH_CONFIG
로 구성된 자격 증명. - GitLab Runner 호스트의 로컬에
~/.docker/config.json
또는~/.dockercfg
파일로 구성된 자격 증명 (예: 호스트에서docker login
을 실행하여). - 작업의 페이로드와 함께 기본적으로 전송된 자격 증명 (예: 앞서 설명한 통합 레지스트리에 대한 자격 증명).
레지스트리를 위해 처음 발견된 자격 증명이 사용됩니다. 예를 들어, 통합 레지스트리에 대해 DOCKER_AUTH_CONFIG
변수를 사용하여 자격 증명을 추가하면 기본 자격 증명이 덮어씌워집니다.
[runners.parallels]
섹션
다음 매개변수는 Parallels에 해당합니다.
매개변수 | 설명 |
---|---|
base_name |
클론된 Parallels VM의 이름. |
template_name |
연결된 Parallels VM 템플릿의 사용자 정의 이름. 선택 사항. |
disable_snapshots |
비활성화된 경우, 작업이 완료되면 VM이 파괴됩니다. |
allowed_images |
허용된 image /base_name 값 목록, 정규 표현식으로 표현됩니다. 자세한 내용은 기본 VM 이미지 재정의 섹션을 참조하세요. |
예시:
[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 실행기 모두에서 base_name
으로 지정된 기본 VM 이름을 재정의할 수 있습니다.
이를 위해 .gitlab-ci.yml
파일에서 image 매개변수를 사용하세요.
후방 호환성을 위해 기본적으로 이 값을 재정의할 수 없습니다. base_name
으로 지정된 이미지만 허용됩니다.
사용자가 .gitlab-ci.yml
image 매개변수를 사용하여 VM 이미지를 선택할 수 있도록 하려면:
[runners.virtualbox]
...
allowed_images = [".*"]
예제에서는 기존의 모든 VM 이미지를 사용할 수 있습니다.
allowed_images
매개변수는 정규 표현식 목록입니다. 구성이 필요에 따라 정밀할 수 있습니다.
예를 들어 특정 VM 이미지만 허용하고 싶다면 다음과 같은 정규 표현식을 사용할 수 있습니다:
[runners.virtualbox]
...
allowed_images = ["^allowed_vm[1-2]$"]
이 예에서는 allowed_vm1
및 allowed_vm2
만 허용됩니다. 다른 모든 시도는 오류가 발생합니다.
[runners.ssh]
섹션
다음 매개변수는 SSH 연결을 정의합니다.
매개변수 | 설명 |
---|---|
host |
연결할 위치. |
port |
포트. 기본값은 22 입니다. |
user |
사용자 이름. |
password |
비밀번호. |
identity_file |
SSH 개인 키(id_rsa , id_dsa 또는 id_edcsa )에 대한 파일 경로. 파일은 암호화되지 않은 상태로 저장해야 합니다. |
disable_strict_host_key_checking |
이 값은 러너가 엄격한 호스트 키 검사를 사용할지 여부를 결정합니다. 기본값은 true 입니다. GitLab 15.0에서는 기본값이나 명시하지 않으면 false 가 됩니다. |
예제:
[runners.ssh]
host = "my-production-server"
port = "22"
user = "root"
password = "production-server-password"
identity_file = ""
[runners.machine]
섹션
다음 매개변수는 Docker Machine 기반 자동 확장 기능을 정의합니다. 자세한 내용은 Docker Machine Executor autoscale configuration을 참조하세요.
매개변수 | 설명 |
---|---|
MaxGrowthRate |
러너에 병렬로 추가할 수 있는 최대 머신 수입니다. 기본값은 0 (제한 없음)입니다. |
IdleCount |
생성되고 Idle 상태에서 대기해야 하는 머신 수입니다. |
IdleScaleFactor |
사용 중인 머신 수에 대한 Idle 머신 수의 비율입니다. 부동 소수점 형식이어야 합니다. 자세한 내용은 자동 확장 문서를 참조하세요. 기본값은 0.0 입니다. |
IdleCountMin |
IdleScaleFactor 가 사용 중일 때 생성되고 Idle 상태에서 대기해야 하는 최소 머신 수입니다. 기본값은 1입니다. |
IdleTime |
머신이 Idle 상태에 있어야 하는 시간(초)입니다. 이 시간이 지나면 머신이 제거됩니다. |
[[runners.machine.autoscaling]] |
자동 확장 구성에 대한 재정의를 포함하는 여러 섹션입니다. 현재 시간과 일치하는 표현식이 있는 마지막 섹션이 선택됩니다. |
OffPeakPeriods |
사용 중단: 스케줄러가 OffPeak 모드에 있는 시간 기간입니다. cron 스타일 패턴의 배열입니다 (아래 periods-syntax 참조). |
OffPeakTimezone |
사용 중단: OffPeakPeriods에 주어진 시간의 시간대입니다. Europe/Berlin 과 같은 시간대 문자열입니다. 생략하거나 비어 있으면 호스트의 로컬 시스템 설정을 따릅니다. GitLab Runner는 ZONEINFO 환경 변수로 지정된 디렉토리 또는 압축 해제된 zip 파일에서 시간대 데이터베이스를 찾으려 하고, 그 후 유닉스 시스템의 알려진 설치 위치를 확인하며, 마지막으로 $GOROOT/lib/time/zoneinfo.zip 에서 검색합니다. |
OffPeakIdleCount |
사용 중단: IdleCount 와 유사하지만 Off Peak 시간 동안의 머신 수입니다. |
OffPeakIdleTime |
사용 중단: IdleTime 과 유사하지만 Off Peak 시간 동안의 머신 상태입니다. |
MaxBuilds |
머신이 제거되기 전 최대 작업(빌드) 수입니다. |
MachineName |
머신의 이름입니다. 반드시 %s 를 포함해야 하며, 이는 고유한 머신 식별자로 대체됩니다. |
MachineDriver |
Docker Machine driver 입니다. Docker Machine 구성에서 클라우드 제공업체 섹션을 참조하세요. |
MachineOptions |
MachineDriver에 대한 Docker Machine 옵션입니다. 자세한 내용은 지원되는 클라우드 제공업체를 참조하세요. AWS에 대한 모든 옵션에 대한 정보는 AWS와 GCP 프로젝트를 Docker Machine 리포지토리에서 확인하세요. |
[[runners.machine.autoscaling]]
섹션
다음 매개변수는 Instance 또는 Docker Autoscaler 실행기를 사용할 때 사용 가능한 구성을 정의합니다.
매개변수 | 설명 |
---|---|
Periods |
이 일정이 활성화되는 시간 기간. cron 스타일 패턴의 배열(아래 설명 참조). |
IdleCount |
생성되어 Idle 상태에서 대기해야 하는 머신 수. |
IdleScaleFactor |
(실험) 사용 중인 머신 수에 대한 Idle 머신 수의 비율. 부동 소수점 형식으로 입력해야 합니다. 자세한 내용은 autoscale 문서를 참조하세요. 기본값은 0.0 입니다. |
IdleCountMin |
IdleScaleFactor 사용 시 생성되어 Idle 상태에서 대기해야 하는 최소 머신 수. 기본값은 1입니다. |
IdleTime |
머신이 제거되기 전 Idle 상태에 있어야 하는 시간(초)입니다. |
Timezone |
Periods 에 제공된 시간의 시간대. Europe/Berlin 과 같은 시간대 문자열입니다. 생략하거나 비어 있으면 호스트의 로캘 시스템 설정으로 기본값이 설정됩니다. GitLab Runner는 ZONEINFO 환경 변수로 지정된 디렉토리나 압축 해제된 zip 파일에서 시간대 데이터베이스를 찾으려고 하며, 다음으로 Unix 시스템의 알려진 설치 위치를 확인하고, 마지막으로 $GOROOT/lib/time/zoneinfo.zip 에서 찾습니다. |
예시:
[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 드라이버를 사용하여 추가 머신 옵션을 추가할 수 있습니다.
# 호스트에 접근할 수 없는 경우(ex. "Waiting for 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 구문
Periods
설정은 cron 스타일 형식으로 표현된 시간 기간의 문자열 패턴 배열을 포함합니다. 이 줄은 다음 필드를 포함합니다:
[초] [분] [시간] [월의 일] [월] [주일] [년도]
표준 cron 구성 파일과 마찬가지로 필드는 단일 값, 범위, 목록 및 별표(*)를 포함할 수 있습니다. 구문에 대한 자세한 설명을 확인하세요.
[runners.instance]
섹션
매개변수 | 유형 | 설명 |
---|---|---|
allowed_images |
문자열 | VM Isolation이 활성화된 경우, allowed_images 는 작업이 지정할 수 있는 이미지의 종류를 제어합니다. |
[runners.autoscaler]
섹션
- GitLab Runner v15.10.0에 도입됨.
다음 매개변수는 autoscaler 기능을 구성합니다. 이 매개변수는 Instance와 Docker Autoscaler 실행기에만 사용할 수 있습니다.
매개변수 | 설명 |
---|---|
capacity_per_instance |
단일 인스턴스에서 동시에 실행할 수 있는 작업의 수입니다. |
max_use_count |
인스턴스가 제거를 위해 예약되기 전 사용할 수 있는 최대 횟수입니다. |
max_instances |
허용되는 인스턴스의 최대 수로, 인스턴스의 상태(대기, 실행, 삭제)에 관계없이 적용됩니다. 기본값: 0 (제한 없음). |
plugin |
사용할 fleeting 플러그인입니다. 플러그인을 설치하고 참조하는 방법에 대한 자세한 내용은 플레팅 플러그인 설치를 참조하십시오. |
delete_instances_on_shutdown |
GitLab Runner가 종료될 때 모든 프로비저닝된 인스턴스가 삭제되는지 여부를 지정합니다. 기본값: false . GitLab Runner 15.11에 도입됨. |
instance_ready_command |
autoscaler에 의해 프로비저닝된 각 인스턴스에서 이 명령을 실행하여 사용 준비가 되었는지 확인합니다. 실패하면 인스턴스가 제거됩니다. GitLab Runner 16.11에 도입됨. |
update_interval |
인스턴스 업데이트를 위해 플레팅 플러그인에 확인할 간격입니다. 기본값: 1m (1분). GitLab Runner 16.11에 도입됨. |
update_interval_when_expecting |
상태 변화가 예상될 때 플레팅 플러그인에 확인할 간격입니다. 예를 들어, 인스턴스를 프로비저닝하고 러너가 pending 에서 running 으로 전환 대기 중일 때입니다. 기본값: 2s (2초). GitLab Runner 16.11에 도입됨. |
참고:
instance_ready_command
가 유휴 스케일 규칙으로 인해 자주 실패하는 경우, 인스턴스가 작업을 수락하는 것보다 더 빠르게 제거되고 생성될 수 있습니다. 스케일 스로틀링을 지원하기 위해, GitLab 17.0에서 지수 백오프가 추가되었습니다.
참고:
Autoscaler 구성 옵션은 구성 변경 시 다시 로드되지 않습니다. 그러나 GitLab 17.5.0 이상에서는 [[runners.autoscaler.policy]]
항목이 구성 변경 시 다시 로드됩니다.
[runners.autoscaler.plugin_config]
섹션
이 해시 테이블은 JSON으로 재인코딩되어 구성된 플러그인에 직접 전달됩니다.
fleeting 플러그인은 일반적으로 지원되는 구성에 대한 문서가 함께 제공됩니다.
[runners.autoscaler.scale_throttle]
섹션
- GitLab Runner v17.0.0에 도입되었습니다.
매개변수 | 설명 |
---|---|
limit |
프로비저닝할 수 있는 초당 새로운 인스턴스의 비율 제한입니다. -1 은 무한을 의미합니다. 기본값(0 )은 제한을 100 으로 설정합니다. |
burst |
새로운 인스턴스의 버스트 제한입니다. max_instances 가 설정되지 않았을 때 기본값은 max_instances 또는 limit 입니다. 만약 limit 이 무한이라면, burst 는 무시됩니다. |
[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.state_storage]
섹션
- GitLab Runner 17.5.0에 도입되었습니다.
상태 저장소가 비활성화된 상태에서 GitLab Runner가 시작되면(기본값), 기존의 fleeting 인스턴스는 안전상의 이유로 즉시 제거됩니다. max_use_count: 1
과 같은 구성에서는 그 사용 상태를 알지 못할 경우 이미 사용된 인스턴스에 작업이 할당되는 것을 방지할 수 있습니다.
상태 저장소 기능을 활성화하면 인스턴스의 상태가 로컬 디스크에 지속됩니다. 이 경우, GitLab Runner가 시작할 때 인스턴스가 존재하면 삭제되지 않습니다. 캐시된 연결 세부 정보, 사용 횟수 및 기타 구성은 복원됩니다.
상태 저장소 기능을 활성화할 때 다음 정보를 고려하세요:
- 인스턴스의 인증 세부 정보(사용자 이름, 비밀번호, 키)는 디스크에 남아 있습니다.
- 인스턴스가 작업을 실행 중일 때 복원되면, GitLab Runner는 기본적으로 이를 제거합니다. 이 동작은 안전성을 보장합니다. GitLab Runner는 작업을 재개할 수 없기 때문입니다. 인스턴스를 유지하려면
keep_instance_with_acquisitions
를true
로 설정하세요.
keep_instance_with_acquisitions
를 true
로 설정하는 것은 인스턴스에서 진행 중인 작업에 대해 걱정하지 않을 때 유용합니다. 환경을 정리하는 데에도 유용합니다. 예를 들어, instance_ready_command
구성 옵션을 사용하여 환경을 정리하여 인스턴스를 유지할 수 있습니다. 이는 모든 실행 중인 명령을 중단하거나 Docker 컨테이너를 강제로 제거하는 것과 관련이 있을 수 있습니다.
매개변수 | 설명 |
---|---|
enabled |
상태 저장소가 활성화되어 있는지 여부입니다. 기본값: false . |
dir |
상태 저장소 디렉토리입니다. 각 러너 구성 항목은 여기에서 하위 디렉토리를 가집니다. 기본값: GitLab Runner 구성 파일 디렉토리의 .taskscaler . |
keep_instance_with_acquisitions |
활성 작업이 있는 인스턴스가 제거되는지 여부입니다. 기본값: 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
용량이 됩니다.
여러 정책을 정의할 수 있습니다. 마지막으로 일치하는 정책이 사용됩니다.
다음 예제에서는 월요일부터 금요일까지 08:00에서 15:59 사이에 유휴 수 1
이 사용됩니다. 그렇지 않으면 유휴 수는 0입니다.
[[runners.autoscaler.policy]]
idle_count = 0
idle_time = "0s"
periods = ["* * * * *"]
[[runners.autoscaler.policy]]
idle_count = 1
idle_time = "30m0s"
periods = ["* 8-15 * * mon-fri"]
기간 구문
periods
설정은 정책이 활성화되는 기간을 나타내는 unix-cron 형식 문자열의 배열을 포함합니다. 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
와 같습니다.
이 cron 작업은 시간의 범위를 나타낸다는 점을 염두에 두는 것이 중요합니다. 예를 들어:
기간 | 영향 |
---|---|
1 * * * * * |
매 시간 1분 동안 활성화된 규칙 (그리 유용하지 않을 가능성이 높음) |
* 0-12 * * * |
매일 시작하는 12시간 동안 활성화된 규칙 |
0-30 13,16 * * SUN |
매주 일요일 오후 1시와 오후 4시 각각 30분 동안 활성화된 규칙. |
[runners.autoscaler.vm_isolation]
섹션
VM Isolation은 nesting
을 사용하며, 현재 MacOS에서만 지원됩니다.
매개변수 | 설명 |
---|---|
enabled |
VM Isolation이 활성화되었는지 여부를 지정합니다. 기본값: false . |
nesting_host |
nesting 데몬의 호스트. |
nesting_config |
nesting 구성. 이 데이터는 JSON으로 직렬화되어 nesting 데몬에 전송됩니다. |
image |
작업 이미지가 지정되지 않았을 경우 nesting 데몬에서 사용하는 기본 이미지. |
[runners.autoscaler.vm_isolation.connector_config]
섹션
[runners.autoscaler.vm_isolation.connector_config]
섹션의 매개변수는 [runners.autoscaler.connector_config]
섹션과 동일하지만, 자동 확장된 인스턴스가 아닌 nesting
으로 제공된 가상 머신에 연결하는 데 사용됩니다.
[runners.custom]
섹션
다음 매개변수는 커스텀 실행기에 대한 구성을 정의합니다.
매개변수 | 유형 | 설명 |
---|---|---|
config_exec |
문자열 | 사용자가 작업 시작 전에 일부 구성 설정을 재정의할 수 있도록 실행 파일의 경로입니다. 이러한 값은 [[runners]] 섹션에서 설정된 값을 재정의합니다. 커스텀 실행기 문서에서 전체 목록을 확인할 수 있습니다. |
config_args |
문자열 배열 |
config_exec 실행 파일에 전달되는 첫 번째 인수 집합입니다. |
config_exec_timeout |
정수 |
config_exec 의 실행 완료를 위한 타임아웃(초)입니다. 기본값은 3600초(1시간)입니다. |
prepare_exec |
문자열 | 환경을 준비하기 위해 실행할 파일의 경로입니다. |
prepare_args |
문자열 배열 |
prepare_exec 실행 파일에 전달되는 첫 번째 인수 집합입니다. |
prepare_exec_timeout |
정수 |
prepare_exec 의 실행 완료를 위한 타임아웃(초)입니다. 기본값은 3600초(1시간)입니다. |
run_exec |
문자열 | 필수. 환경에서 스크립트를 실행하기 위해 실행할 파일의 경로입니다. 예를 들어, 클론 및 빌드 스크립트입니다. |
run_args |
문자열 배열 |
run_exec 실행 파일에 전달되는 첫 번째 인수 집합입니다. |
cleanup_exec |
문자열 | 환경을 정리하기 위해 실행할 파일의 경로입니다. |
cleanup_args |
문자열 배열 |
cleanup_exec 실행 파일에 전달되는 첫 번째 인수 집합입니다. |
cleanup_exec_timeout |
정수 |
cleanup_exec 의 실행 완료를 위한 타임아웃(초)입니다. 기본값은 3600초(1시간)입니다. |
graceful_kill_timeout |
정수 | 작업 취소와 같은 경우에 prepare_exec 및 cleanup_exec 가 종료될 때까지 기다리는 시간(초)입니다. 이 타임아웃 후에는 프로세스가 종료됩니다. 기본값은 600초(10분)입니다. |
force_kill_timeout |
정수 | 스크립트에 종료 신호가 전송된 후 기다리는 시간(초)입니다. 기본값은 600초(10분)입니다. |
[runners.cache]
섹션
다음 매개변수는 분산 캐시 기능을 정의합니다. 자세한 내용은 러너 자동 스케일 문서에서 확인하세요.
매개변수 | 유형 | 설명 |
---|---|---|
Type |
string | 다음 중 하나: s3 , gcs , azure . |
Path |
string | 캐시 URL에 추가할 경로의 이름입니다. |
Shared |
boolean | 러너 간의 캐시 공유를 활성화합니다. 기본값은 false 입니다. |
MaxUploadedArchiveSize |
int64 | 클라우드 스토리지에 업로드되는 캐시 아카이브의 바이트 크기 제한입니다. 악의적인 사용자가 이 한계를 우회할 수 있으므로 GCS 어댑터는 서명된 URL의 X-Goog-Content-Length-Range 헤더를 통해 이를 강제합니다. 클라우드 스토리지 제공업체에서도 한계를 설정해야 합니다. |
캐시 메커니즘은 캐시를 업로드하고 다운로드하기 위해 미리 서명된 URL을 사용합니다. URL은 GitLab Runner의 자체 인스턴스에서 서명됩니다.
작업의 스크립트(캐시 업로드/다운로드 스크립트 포함)가 로컬 또는 외부 머신에서 실행되는 것은 중요하지 않습니다.
예를 들어, shell
또는 docker
실행자는 GitLab Runner 프로세스가 실행되는 동일한 머신에서 스크립트를 실행합니다.
동시에, virtualbox
또는 docker+machine
은 별도의 VM에 연결하여 스크립트를 실행합니다. 이 프로세스는 보안상의 이유로 캐시 어댑터의 자격 증명 유출 가능성을 최소화합니다.
S3 캐시 어댑터가 IAM 인스턴스 프로파일을 사용하도록 구성된 경우 어댑터는 GitLab Runner 머신에 연결된 프로파일을 사용합니다.
유사하게 GCS 캐시 어댑터도 CredentialsFile
을 사용하도록 구성된 경우 GitLab Runner 머신에 해당 파일이 존재해야 합니다.
이 표는 config.toml
, CLI 옵션 및 register
용 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 |
S3.DualStack |
[runners.cache.s3] -> DualStack |
--cache-s3-dual-stack |
$CACHE_S3_DUAL_STACK |
S3.Accelerate |
[runners.cache.s3] -> Accelerate |
--cache-s3-accelerate |
$CACHE_S3_ACCELERATE |
S3.PathStyle |
[runners.cache.s3] -> PathStyle |
--cache-s3-path-style |
$CACHE_S3_PATH_STYLE |
S3.UploadRoleARN |
[runners.cache.s3] -> UploadRoleARN |
--cache-s3-upload-role-arn |
$CACHE_S3_UPLOAD_ROLE_ARN |
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 |
문자열 | S3 호환 서버의 host:port . AWS가 아닌 다른 서버를 사용하는 경우, 올바른 주소를 확인하기 위해 스토리지 제품 설명서를 참조하세요. DigitalOcean의 경우 주소는 spacename.region.digitaloceanspaces.com 형식이어야 합니다. |
AccessKey |
문자열 | S3 인스턴스에 대해 지정된 액세스 키입니다. |
SecretKey |
문자열 | S3 인스턴스에 대해 지정된 비밀 키입니다. |
SessionToken |
문자열 | 임시 자격 증명을 사용하는 경우 S3 인스턴스에 대해 지정된 세션 토큰입니다. |
BucketName |
문자열 | 캐시가 저장되는 저장소 버킷의 이름입니다. |
BucketLocation |
문자열 | S3 지역의 이름입니다. |
Insecure |
부울 | S3 서비스가 HTTP 로 제공되는 경우 true 로 설정합니다. 기본값은 false 입니다. |
AuthenticationType |
문자열 |
iam 또는 access-key 로 설정합니다. ServerAddress , AccessKey , SecretKey 가 모두 제공되면 기본값은 access-key 입니다. ServerAddress , AccessKey , 또는 SecretKey 가 누락되면 기본값은 iam 입니다. |
ServerSideEncryption |
문자열 | GitLab 15.3 이상에서 사용할 수 있는 S3 서버 측 암호화 유형은 S3 또는 KMS 입니다. GitLab 17.5 이상에서는 DSSE-KMS 가 지원됩니다. |
ServerSideEncryptionKeyID |
문자열 | GitLab 15.3 이상에서 KMS 를 사용하는 경우 암호화에 사용되는 KMS 키의 별칭 또는 ID입니다. 별칭을 사용하는 경우 alias/ 로 시작해야 합니다. |
DualStack |
부울 | GitLab 17.5 이상에서 IPv4 및 IPv6 엔드포인트의 사용을 활성화합니다 (기본값: true). AWS S3 Express를 사용하는 경우 이 기능을 비활성화합니다. ServerAddress 가 설정되어 있으면 무시됩니다. |
Accelerate |
부울 | GitLab 17.5 이상에서 AWS S3 Transfer Acceleration의 사용을 활성화합니다. ServerAddress 가 가속 엔드포인트로 구성되어 있는 경우 자동으로 true로 설정됩니다. |
PathStyle |
부울 | GitLab 17.5 이상에서 경로 스타일 액세스의 사용을 활성화합니다 (기본값: ServerAddress 에 기반하여 자동감지). |
UploadRoleARN |
부울 | GitLab 17.5 이상에서 AssumeRole 과 함께 사용하여 시간 제한이 있는 PutObject S3 요청을 생성하는 데 사용할 수 있는 AWS 역할 ARN을 지정합니다. 이로써 S3 다중 업로드의 사용이 가능해집니다. |
예:
[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 인스턴스 프로필을 사용합니다. autoscale 구성에서는 작업이 실행되는 온디맨드 머신이 아닙니다. ServerAddress
, AccessKey
, SecretKey
가 모두 지정되지만 AuthenticationType
이 제공되지 않으면 access-key
가 인증 유형으로 사용됩니다.
Helm 차트를 사용하여 GitLab Runner를 설치할 때 rbac.create
가 values.yaml
파일에서 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
KMS
유형의 ServerSideEncryption
을 사용하는 경우 이 역할은 또한 지정된 AWS KMS 키에 대해 다음 작업을 수행할 수 있는 권한이 있어야 합니다:
kms:Encrypt
kms:Decrypt
kms:ReEncrypt*
kms:GenerateDataKey*
kms:DescribeKey
SSE-C
유형의 ServerSideEncryption
은 지원되지 않습니다.
SSE-C
는 다운로드 요청에 대해 사용자 제공 키가 포함된 헤더가 필요하며, 이와 함께 사전 서명된 URL이 필요합니다. 이는 작업에 키 자재를 전달해야 하며, 키를 안전하게 유지할 수 없습니다. 이는 복호화 키가 유출될 가능성이 있습니다. 이 문제에 대한 논의는 이 머지 요청에 있습니다.
주목:
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
에 정의된 ServiceAccount에 할당된 역할의 IAM 정책은 KMS 키에 대해 다음 작업을 수행할 수 있는 권한이 있어야 합니다:
kms:GetPublicKey
kms:Decrypt
kms:Encrypt
kms:DescribeKey
kms:GenerateDataKey
UploadRoleARN
으로 멀티파트 업로드 활성화
캐시에 대한 접근을 제한하기 위해, 러너 관리자는 취소된 시간의 프리사인 URL을 생성하여 작업이 캐시에서 다운로드하고 업로드할 수 있도록 합니다. 그러나 AWS S3는 단일 PUT 요청을 5 GB로 제한합니다. 5 GB보다 큰 파일의 경우, 멀티파트 업로드 API를 사용해야 합니다.
멀티파트 업로드는 AWS S3에서만 지원되며 다른 S3 제공업체에서는 지원되지 않습니다. 러너 관리자가 여러 프로젝트의 작업을 처리하기 때문에, 러너 관리자는 버킷 전체 권한이 있는 S3 자격 증명을 전달할 수 없습니다. 대신, 러너 관리자는 시간 제한 프리사인 URL과 제한된 범위의 자격 증명을 사용하여 특정 객체에 대한 액세스를 제한합니다.
AWS와 함께 S3 멀티파트 업로드를 사용하려면, UploadRoleARN
에 arn:aws:iam:::<ACCOUNT ID>:<YOUR ROLE NAME>
형식으로 IAM 역할을 지정하세요. 이 역할은 특정 블롭에 쓰기 위해 좁게 범위가 지정된 시간 제한 AWS 자격 증명을 생성합니다. 원래 S3 자격 증명이 지정된 UploadRoleARN
에 대한 AssumeRole
에 액세스할 수 있는지 확인하세요.
UploadRoleARN
에 지정된 IAM 역할은 다음과 같은 권한을 가져야 합니다:
-
BucketName
에 지정된 버킷에 대한s3:PutObject
액세스. - KMS 또는 DSSE-KMS를 사용하는 서버 측 암호화가 활성화된 경우
kms:Decrypt
및kms:GenerateDataKey
.
예를 들어, my-instance-role
이라는 IAM 역할이 arn:aws:iam::1234567890123:role/my-instance-role
ARN을 가진 EC2 인스턴스에 연결되어 있다고 가정해 보세요.
BucketName
에 대한 s3:PutObject
권한만 있는 새 역할 arn:aws:iam::1234567890123:role/my-upload-role
을 생성할 수 있습니다. my-instance-role
에 대한 AWS 설정에서 신뢰 관계
는 다음과 유사할 수 있습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::1234567890123:role/my-upload-role"
},
"Action": "sts:AssumeRole"
}
]
}
새 역할을 생성하지 않고 my-instance-role
을 UploadRoleARN
으로 재사용할 수도 있습니다. my-instance-role
이 AssumeRole
권한을 갖고 있는지 확인하세요. 예를 들어, EC2 인스턴스와 연결된 IAM 프로필의 신뢰 관계
는 다음과 같을 수 있습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"AWS": "arn:aws:iam::1234567890123:role/my-instance-role"
},
"Action": "sts:AssumeRole"
}
]
}
AWS 명령줄 인터페이스를 사용하여 인스턴스가 AssumeRole
권한을 갖고 있는지 확인할 수 있습니다. 예를 들어:
aws sts assume-role --role-arn arn:aws:iam::1234567890123:role/my-upload-role --role-session-name gitlab-runner-test1
UploadRoleARN
로 파일 업로드 하는 방법
UploadRoleARN
이 존재하면, 러너가 캐시에 업로드할 때마다:
-
러너 관리자는 원래의 S3 자격 증명(
AuthenticationType
,AccessKey
,SecretKey
를 통해 지정됨)을 검색합니다. -
S3 자격 증명으로, 러너 관리자는
UploadRoleARN
과 함께 Amazon Security Token Service (STS)에AssumeRole
요청을 보냅니다.
정책 요청은 다음과 유사하게 보입니다:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::<YOUR-BUCKET-NAME>/<CACHE-FILENAME>" } ] }
-
요청이 성공하면, 러너 관리자는 제한된 세션을 가진 임시 AWS 자격 증명을 얻습니다.
-
러너 관리자는 이러한 자격 증명과
s3://<bucket name>/<filename>
형식의 URL을 캐시 아카이버에 전달하여 파일을 업로드합니다.
Kubernetes ServiceAccount 리소스에 대한 IAM 역할 활성화
서비스 계정에 대한 IAM 역할을 사용하려면, 클러스터에 대한 IAM OIDC 공급자가 존재해야 합니다. IAM OIDC 공급자가 클러스터와 연결되면, 러너의 서비스 계정과 연결할 IAM 역할을 생성할 수 있습니다.
-
Create Role 창에서 Select type of trusted entity에서 Web Identity를 선택합니다.
-
역할의 Trusted Relationships tab에서:
-
Trusted entities 섹션은 다음 형식을 가져야 합니다:
arn:aws:iam::<ACCOUNT_ID>:oidc-provider/oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>
.
OIDC ID는 EKS 클러스터의 Configuration 탭에서 찾을 수 있습니다. -
Condition 섹션은
rbac.serviceAccountName
에 정의된 GitLab Runner 서비스 계정을 가지고 있어야 하며,rbac.create
가true
로 설정되면 생성된 기본 서비스 계정이 사용됩니다:Condition Key Value 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) 인증 문서를 참조하세요.
Parameter | Type | Description |
---|---|---|
CredentialsFile |
string | Google JSON 키 파일의 경로. 오직 service_account 타입만 지원됩니다. 설정되면 이 값은 config.toml 에 직접 구성된 AccessID 와 PrivateKey 보다 우선합니다. |
AccessID |
string | 저장소에 접근하기 위해 사용되는 GCP 서비스 계정의 ID입니다. |
PrivateKey |
string | GCS 요청에 서명하는 데 사용되는 개인 키입니다. |
BucketName |
string | 캐시가 저장되는 스토리지 버킷의 이름입니다. |
예시:
config.toml
파일에 직접 구성된 자격 증명:
[runners.cache]
Type = "gcs"
Path = "path/to/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 = "path/to/prefix"
Shared = false
[runners.cache.gcs]
CredentialsFile = "/etc/gitlab-runner/service-account.json"
BucketName = "runners-cache"
GCP의 메타데이터 서버에서의 애플리케이션 기본 자격 증명(ADC):
Google Cloud ADC와 함께 GitLab Runner를 사용할 때, 일반적으로 기본 서비스 계정을 사용합니다. 따라서 인스턴스에 대한 자격 증명을 제공할 필요가 없습니다:
[runners.cache]
Type = "gcs"
Path = "path/to/prefix"
Shared = false
[runners.cache.gcs]
BucketName = "runners-cache"
ADC를 사용하는 경우, 사용 중인 서비스 계정이 iam.serviceAccounts.signBlob
권한을 가지고 있는지 확인하세요. 일반적으로 이는 Service Account Token Creator 역할을 서비스 계정에 부여함으로써 수행됩니다.
[runners.cache.azure]
섹션
- GitLab Runner 13.4.0에서 도입됨.
다음 매개변수는 Azure Blob Storage에 대한 기본 지원을 정의합니다. 자세한 내용은 Azure Blob Storage 문서를 참조하세요.
S3 및 GCS는 객체 모음에 대해 bucket
이라는 단어를 사용하지만, Azure는
blob의 모음을 나타내기 위해 container
라는 단어를 사용합니다.
매개변수 | 유형 | 설명 |
---|---|---|
AccountName |
string | 스토리지에 접근하는 데 사용되는 Azure Blob Storage 계정 이름입니다. |
AccountKey |
string | 컨테이너에 접근하는 데 사용되는 스토리지 계정 접근 키입니다. AccountKey 를 구성에서 생략하려면 Azure workload 또는 관리되는 ID를 사용하세요. |
ContainerName |
string | 캐시 데이터를 저장할 스토리지 컨테이너 이름입니다. |
StorageDomain |
string |
Azure 스토리지 엔드포인트를 제공하는 데 사용되는 도메인 이름 (선택사항)입니다. 기본값은 blob.core.windows.net 입니다. |
예시:
[runners.cache]
Type = "azure"
Path = "path/to/prefix"
Shared = false
[runners.cache.azure]
AccountName = "<AZURE STORAGE ACCOUNT NAME>"
AccountKey = "<AZURE STORAGE ACCOUNT KEY>"
ContainerName = "runners-cache"
StorageDomain = "blob.core.windows.net"
Azure workload 및 관리되는 ID
- GitLab Runner v17.5.0에서 도입됨.
Azure workload 또는 관리되는 ID를 사용하려면 구성에서 AccountKey
를 생략하세요.
AccountKey
가 비어 있으면 러너는 다음을 시도합니다:
-
DefaultAzureCredential
를 통해 임시 자격 증명을 얻습니다. -
사용자 위임 키를 얻습니다.
-
해당 키로 SAS 토큰을 생성하여 스토리지 계정 blob에 접근합니다.
해당 인스턴스에 Storage Blob Data Contributor
역할이 할당되어 있는지 확인하세요.
해당 인스턴스가 위의 작업을 수행할 수 있는 접근 권한이 없으면 GitLab Runner는
AuthorizationPermissionMismatch
오류를 보고합니다.
[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 | 지정되지 않은 작업에 사용할 기본 컨테이너 이미지입니다. |
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 |
string=string 의 key=value 쌍으로 구성된 table 입니다. 모든 key=value 쌍과 일치하는 Kubernetes 노드에 대한 파드 생성을 제한합니다. |
image_pull_secrets |
array | 개인 레지스트리에서 컨테이너 이미지를 인증하는 데 사용되는 Kubernetes docker-registry 비밀 이름을 포함하는 항목 배열입니다. |
logs_base_dir |
string | 빌드 로그를 저장하기 위해 생성된 경로에 추가되는 기본 디렉토리입니다. GitLab Runner 17.2에서 도입됨. |
scripts_base_dir |
string | 빌드 스크립트를 저장하기 위해 생성된 경로에 추가되는 기본 디렉토리입니다. GitLab Runner 17.2에서 도입됨. |
예시:
[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"]
logs_base_dir = "/tmp"
scripts_base_dir = "/tmp"
[runners.kubernetes.node_selector]
gitlab = "true"
헬퍼 이미지
docker
, docker+machine
또는 kubernetes
실행기를 사용할 때, GitLab Runner는 특정 컨테이너를 사용하여 Git, 아티팩트 및 캐시 작업을 처리합니다. 이 컨테이너는 헬퍼 이미지
라는 이름의 이미지에서 생성됩니다.
헬퍼 이미지는 amd64, arm, arm64, s390x 및 ppc64le 아키텍처에서 사용할 수 있습니다. 이 이미지는 GitLab Runner 바이너리의 특별한 컴파일인 gitlab-runner-helper
바이너리를 포함하고 있습니다. 사용 가능한 명령어의 하위 집합과 Git, Git LFS 및 SSL 인증서 저장소만 포함되어 있습니다.
헬퍼 이미지는 몇 가지 종류가 있습니다: alpine
, alpine3.17
, alpine3.18
, alpine3.19
, alpine-latest
, ubi-fips
및 ubuntu
. 현재 alpine
이미지는 작은 크기 때문에 기본값으로 설정되어 있지만, 일부 환경에서 DNS 문제가 있을 수 있습니다. helper_image_flavor = "ubuntu"
를 사용하면 헬퍼 이미지의 ubuntu
종류가 선택됩니다.
GitLab Runner 16.1에서 17.1까지 alpine
종류는 alpine3.18
의 별칭입니다. GitLab Runner 17.2 및 이후 버전에서는 alpine3.19
의 별칭입니다.
alpine-latest
종류는 alpine:latest
를 기본 이미지로 사용하며, 이는 잠재적으로 더 불안정할 수 있습니다.
GitLab Runner가 DEB/RPM 패키지를 통해 설치될 때, 지원되는 아키텍처의 이미지가 호스트에 설치됩니다.
러너가 작업을 실행하기 위해 준비할 때, 지정된 버전(러너의 Git 수정 기준)에서 이미지가 Docker Engine에서 발견되지 않으면 자동으로 로드됩니다. docker
와 docker+machine
실행기는 모두 이러한 방식으로 작동합니다.
alpine
종류의 경우, 기본 alpine
종류 이미지만 패키지에 포함되어 있습니다. 나머지 모든 종류는 레지스트리에서 다운로드됩니다.
kubernetes
실행기와 GitLab Runner의 수동 설치는 다르게 작동합니다.
- 수동 설치의 경우
gitlab-runner-helper
바이너리가 포함되지 않습니다. -
kubernetes
실행기의 경우, Kubernetes API는gitlab-runner-helper
이미지를 로컬 아카이브에서 로드하는 것을 허용하지 않습니다.
두 경우 모두 GitLab Runner는 헬퍼 이미지를 다운로드합니다.
GitLab Runner의 수정 및 아키텍처는 다운로드할 태그를 정의합니다.
Arm에서 Kubernetes 용 헬퍼 이미지 구성
arm64
Kubernetes 클러스터에서 arm64
헬퍼 이미지를 사용하려면, 구성 파일에서 다음 값을 설정하십시오.
[runners.kubernetes]
helper_image = "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:arm64-latest"
구버전의 Alpine Linux를 사용하는 러너 이미지
- GitLab Runner 14.5에서 도입됨.
이미지는 여러 버전의 Alpine Linux로 빌드되므로 더 최신 버전의 Alpine을 사용할 수 있지만 동시에 이전 버전도 사용할 수 있습니다.
헬퍼 이미지의 경우 helper_image_flavor
를 변경하거나 헬퍼 이미지 섹션을 읽으십시오.
GitLab Runner 이미지의 경우, 동일한 논리를 따르며, alpine, alpine3.16, alpine3.17, alpine3.18, alpine3.19 또는 alpine-latest가 이미지 내 버전 이전에 접두사로 사용됩니다.
docker pull gitlab/gitlab-runner:alpine3.19-v16.1.0
Alpine pwsh 이미지
GitLab Runner 16.1 버전 이후 모든 alpine
헬퍼 이미지에 pwsh
변형이 있습니다. 유일한 예외는 alpine-latest
로, pwsh Docker 이미지를 기반으로 하는 GitLab Runner 헬퍼 이미지가 alpine:latest
를 지원하지 않기 때문입니다.
예시:
docker pull registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:alpine3.18-x86_64-v16.1.0-pwsh
헬퍼 이미지 레지스트리
GitLab 15.0 및 이전 버전에서는 헬퍼 이미지를 Docker Hub에서 가져오도록 구성할 수 있습니다.
GitLab 15.1 이후 버전에서는 헬퍼 이미지가 GitLab Container Registry에서 가져옵니다.
GitLab 레지스트리에서 기본 gitlab-runner-helper
이미지를 가져오려면 helper-image
값을 사용하세요: registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-v${CI_RUNNER_VERSION}
.
자체 관리 인스턴스도 GitLab.com의 GitLab Container Registry에서 헬퍼 이미지를 가져옵니다. GitLab Container Registry의 상태를 확인하려면 GitLab 시스템 상태를 참조하세요.
헬퍼 이미지 재정의
경우에 따라 헬퍼 이미지를 재정의해야 할 수도 있습니다. 그렇게 하는 이유는 여러 가지가 있습니다:
-
작업 실행 속도 향상: 인터넷 연결이 느린 환경에서는 같은 이미지를 여러 번 다운로드하는 것이 작업 실행 시간을 늘릴 수 있습니다.
registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:XYZ
의 정확한 복사본이 저장된 로컬 레지스트리에서 헬퍼 이미지를 다운로드하면 속도를 높일 수 있습니다. -
보안 문제: 이전에 확인하지 않은 외부 의존성을 다운로드하고 싶지 않을 수 있습니다. 검토되고 로컬 리포지토리에 저장된 의존성만 사용하라는 비즈니스 규칙이 있을 수 있습니다.
-
인터넷에 접근할 수 없는 빌드 환경: 오프라인 환경에서 Kubernetes 클러스터를 설치한 경우, CI/CD 작업에 사용되는 이미지를 가져오기 위해 로컬 이미지 레지스트리나 패키지 저장소를 사용할 수 있습니다.
-
추가 소프트웨어:
git+http
대신git+ssh
로 접근 가능한 서브모듈을 지원하기 위해 헬퍼 이미지에openssh
와 같은 추가 소프트웨어를 설치하고 싶을 수 있습니다.
이러한 경우, docker
, docker+machine
, 및 kubernetes
실행기에 대해 사용할 수 있는 helper_image
구성 필드를 사용하여 사용자 정의 이미지를 구성할 수 있습니다:
[[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는 registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:XYZ
이미지를 참조합니다. 여기서 XYZ
는 GitLab Runner 아키텍처와 Git 수정에 따라 다릅니다. 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는 실행기에게 x86_64-v${CI_RUNNER_VERSION}
버전의 이미지를 사용하도록 지시합니다. 이는 컴파일 데이터에 기반합니다. GitLab Runner를 새 버전으로 업데이트한 후, GitLab Runner는 적절한 이미지를 다운로드하려고 시도합니다. 이미지는 GitLab Runner를 업그레이드하기 전에 레지스트리에 업로드되어야 하며, 그렇지 않으면 작업이 “No such image” 오류와 함께 실패합니다.
GitLab Runner 13.2 이후 버전에서는 헬퍼 이미지가 $CI_RUNNER_VERSION
뿐만 아니라 $CI_RUNNER_REVISION
으로 태그가 지정됩니다. 두 태그는 유효하며 동일한 이미지를 가리킵니다.
[[runners]]
(...)
executor = "docker"
[runners.docker]
(...)
helper_image = "my.registry.local/gitlab/gitlab-runner-helper:x86_64-v${CI_RUNNER_VERSION}"
PowerShell Core 사용 시
PowerShell Core를 포함하는 헬퍼 이미지의 추가 버전이 registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:XYZ-pwsh
태그와 함께 게시됩니다.
[runners.custom_build_dir]
섹션
- GitLab Runner 11.10에서 소개됨.
이 섹션은 사용자 정의 빌드 디렉터리 매개변수를 정의합니다.
이 기능은 명시적으로 구성되지 않는 한 기본적으로 kubernetes
, docker
, docker+machine
, docker autoscaler
및 instance
실행자에 대해 활성화됩니다. 다른 모든 실행자는 기본적으로 비활성화됩니다.
이 기능은 GIT_CLONE_PATH
가 runners.builds_dir
에 정의된 경로에 있어야 합니다. builds_dir
를 사용하려면 $CI_BUILDS_DIR
변수를 사용하십시오.
기본적으로 이 기능은 docker
및 kubernetes
실행자에 대해서만 활성화됩니다.
이들은 자원을 분리하는 좋은 방법을 제공하기 때문입니다. 이 기능은 모든 실행자에 대해 명시적으로 활성화할 수 있지만, builds_dir
를 공유하고 concurrent > 1
인 실행자와 함께 사용할 때는 주의가 필요합니다.
매개변수 | 유형 | 설명 |
---|---|---|
enabled |
boolean | 작업을 위한 사용자 정의 빌드 디렉터리를 정의할 수 있도록 허용합니다. |
예시:
[runners.custom_build_dir]
enabled = true
기본 빌드 디렉터리
GitLab Runner는 리포지토리를 _빌드 디렉터리_라고 잘 알려진 기본 경로 아래에 존재하는 경로로 복제합니다. 이 기본 디렉터리의 기본 위치는 실행자에 따라 다릅니다. 예를 들어:
-
Kubernetes, Docker 및 Docker Machine 실행자에 대해
/builds
는 컨테이너 내에 있습니다. -
Instance에 대해
~/builds
는 SSH 또는 WinRM 연결을 처리하도록 구성된 사용자의 홈 디렉터리에 있습니다. -
Docker Autoscaler에 대해
/builds
는 컨테이너 내에 있습니다. -
Shell 실행자에 대해
$PWD/builds
입니다. -
SSH, VirtualBox 및 Parallels 실행자에 대해
~/builds
는 SSH 연결을 처리하도록 구성된 사용자의 홈 디렉터리에 있습니다. -
Custom 실행자에 대해서는 기본값이 제공되지 않으며 명시적으로 구성되어야 하며, 그렇지 않으면 작업이 실패합니다.
사용된 _빌드 디렉터리_는 사용자가 builds_dir
설정을 통해 명시적으로 정의할 수 있습니다.
참고:
사용자가 커스텀 디렉터리에 복제하고 싶을 경우 GIT_CLONE_PATH
도 지정할 수 있으며, 아래 가이드는 적용되지 않습니다.
GitLab Runner는 실행하는 모든 작업에 대해 _빌드 디렉터리_를 사용하지만, 특정 패턴을 사용하여 중첩합니다
{builds_dir}/$RUNNER_TOKEN_KEY/$CONCURRENT_PROJECT_ID/$NAMESPACE/$PROJECT_NAME
.
예: /builds/2mn-ncv-/0/user/playground
.
GitLab Runner는 빌드 디렉터리 내에 항목을 저장하는 것을 막지 않습니다. 예를 들어, CI 실행 중에 사용할 수 있는 /builds/tools
내에 도구를 저장할 수 있습니다. 우리는 강력히 이를 반대하며, 빌드 디렉터리 내에 어떤 것도 저장해서는 안 됩니다. GitLab Runner는 이를 완전히 제어해야 하며 이러한 경우에는 안정성을 제공하지 않습니다. CI에 필요한 의존성이 있는 경우, 다른 곳에 설치하는 것을 권장합니다.
[runners.referees]
섹션
GitLab Runner 심판을 사용하여 추가 작업 모니터링 데이터를 GitLab에 전달하십시오. 심판은 작업과 관련된 추가 데이터를 쿼리하고 수집하는 러너 관리자 내의 작업자입니다. 결과는 작업 아티팩트로서 GitLab에 업로드됩니다.
메트릭 러너 심판 사용하기
작업을 실행하는 머신 또는 컨테이너가 Prometheus 메트릭을 노출하는 경우, GitLab Runner는 작업 전체 기간 동안 Prometheus 서버를 쿼리할 수 있습니다. 메트릭을 수신한 후, 이들은 나중에 분석에 사용할 수 있는 작업 아티팩트로 업로드됩니다.
오직 docker-machine
executor만이 심판을 지원합니다.
GitLab 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
executor를 사용하는 공유 GitLab Runner 환경에서는 {selector}
가 node=shared-runner-123
와 유사할 것입니다.