- 구성 유효성 검사
- 전역 섹션
[session_server]
섹션-
[[runners]]
섹션 - 실행자
- 쉘
-
[runners.docker]
섹션 [runners.virtualbox]
섹션- 기본 VM 이미지 재정의
-
[runners.ssh]
섹션 [runners.instance]
섹션[runners.autoscaler]
섹션[runners.autoscaler.plugin_config]
섹션[runners.autoscaler.connector_config]
섹션-
[[runners.autoscaler.policy]]
섹션들 [runners.custom]
섹션-
[runners.cache]
섹션 [runners.kubernetes]
섹션- 도우미 이미지
-
[runners.custom_build_dir]
섹션 -
[runners.referees]
섹션
고급 구성
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-1
및 runner-2
)을 포함합니다. GitLab Runner는 10초마다 요청을 보내고 5초 동안 대기합니다:
-
check_interval
값 가져오기 (10s
). - 러너 디렉터리 가져오기 (
runner-1
,runner-2
). - 대기 간격 계산하기 (
10s / 2 = 5s
). - 무한 루프 시작:
-
runner-1
에 대한 작업 요청. -
5초
동안 대기. -
runner-2
에 대한 작업 요청. -
5초
동안 대기. - 반복.
-
이 예에서 각 러너의 프로세스는 5초마다 작업 요청을 합니다. 만약 runner-1
및 runner-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_address
및advertise_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]
섹션을 삭제하세요.
[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_TRACE 를 true 로 설정해도 디버그 로그 (추적)가 비활성화된 상태로 유지됩니다.
|
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_url
을 http://192.168.1.23
으로 설정하세요.
만약 clone_url
이 설정되면, 러너는 http://gitlab-ci-token:s3cr3tt0k3n@192.168.1.23/namespace/project.git
형식의 복제 URL을 생성합니다.
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 가상 머신, 하지만 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)가 수행하는 단계를 요약하면:
- 이미지 이름에서 레지스트리 이름을 찾습니다.
- 값이 비어 있지 않으면 실행기는이 레지스트리에 대한 인증 구성을 찾습니다.
- 마지막으로 지정된 레지스트리에 해당하는 인증이 있는 경우 후속 풀은 이를 사용합니다.
#### 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.yml
의 image 매개변수를 사용하여 VM 이미지를 선택할 수 있도록 허용하려면:
[runners.virtualbox]
...
allowed_images = [".*"]
이 예시에서는 기존 VM 이미지를 사용할 수 있습니다.
allowed_images
매개변수는 정규 표현식의 디렉터리입니다. 구성은 필요에 따라 정교해질 수 있습니다. 예를 들어, 특정 VM 이미지만 허용하려면 다음과 같이 regex를 사용할 수 있습니다:
[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
| 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 상태입니다.
파라미터 | 타입 | 설명 |
---|---|---|
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_exec 및 cleanup_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
S3
의 ServerSideEncryption
을 사용하는 경우, 이 역할은 지정된 KMS 키에 대해 다음 작업을 수행 할 수 있어야합니다:
kms:Encrypt
kms:Decrypt
kms:ReEncrypt*
kms:GenerateDataKey*
kms:DescribeKey
::SSE-C:: 타입의 ServerSideEncryption
은 지원되지 않습니다.
SSE-C
는 사용자 제공 키가 포함 된 헤더가 다운로드 요청에 대해 제공되어야하며, 사전 서명 된 URL에 대해 키가 전달되어야합니다.
이는 키가 안전하게 보관 될 수 없는 작업으로 키 자체가 노출 될 수 있음을 의미합니다. 이 문제에 대한 논의는 이 MR에서 확인할 수 있습니다.
러너 캐시를위한 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 역할을 만들 수 있습니다.
- 역할 생성 창에서 신뢰 할 수있는 엔터티 유형 선택에서 웹 신원을 선택합니다.
-
역할의 신뢰 할 수있는 관계 탭에서:
-
신뢰할수있는 엔터티 섹션은 다음 형식이어야합니다:
arn:aws:iam::<ACCOUNT_ID>:oidc-provider/oidc.eks.<AWS_REGION>.amazonaws.com/id/<OIDC_ID>
. OIDC ID는 EKS 클러스터의 구성 탭에서 찾을 수 있습니다. -
조건 섹션은
rbac.serviceAccountName
에 정의 된 GitLab Runner 서비스 계정 또는rbac.create
가true
로 설정되어있는 경우 생성 된 기본 서비스 계정을 포함해야합니다:조건 키 값 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 에서 직접 구성된 AccessID 및 PrivateKey 보다 우선합니다.
|
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를 설치하는 경우, 지원되는 아키텍처용 이미지가 호스트에 설치됩니다. 러너가 작업을 실행하기 위해, 도커 엔진에서 지정된 버전의 이미지를 찾을 수 없는 경우 자동으로 로드됩니다. docker
및 docker+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를 참조하세요.
도우미 이미지 재정의
어떤 경우에는 도우미 이미지를 재정의해야 할 수 있습니다. 이를 수행하는 몇 가지 이유는 다음과 같습니다:
-
작업 실행 속도 향상: 느린 인터넷 연결 환경에서 동일한 이미지를 여러 번 다운로드하면 작업 실행 시간이 증가할 수 있습니다.
gitlab/gitlab-runner-helper:XYZ
의 정확한 복사본이 저장된 로컬 레지스트리에서 도우미 이미지를 다운로드하면 속도를 향상시킬 수 있습니다. -
보안 문제: 검토되지 않은 외부 의존성을 다운로드하고 싶지 않을 수 있습니다. 로컬 리포지터리에 저장되어 검토된 의존성만 사용하도록 비즈니스 규칙이 있을 수 있습니다.
-
인터넷 액세스가 불가능한 빌드 환경: 경우에 따라 작업은 전용 폐쇄 네트워크 환경에서 실행됩니다. 이는
kubernetes
executor에는 해당되지 않으며, 이미지는 여전히 Kubernetes 클러스터에서 사용 가능한 외부 레지스트리에서 다운로드해야 합니다. -
추가 소프트웨어:
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를 사용하는 경우
- GitLab 13.9에 도입되었습니다.
Linux용 추가 헬퍼 이미지의 다른 버전으로, PowerShell Core를 포함하고 있는 이미지가 gitlab/gitlab-runner-helper:XYZ-pwsh
태그와 함께 출판됩니다.
[runners.custom_build_dir]
섹션
- GitLab Runner 11.10에 도입되었습니다.
이 섹션은 사용자 정의 빌드 디렉터리 매개변수를 정의합니다.
이 기능은 명시적으로 구성되지 않은 경우, kubernetes
, docker
및 docker+machine
실행기에 대해 기본적으로 활성화됩니다. 다른 실행기에 대해서는 기본적으로 비활성화됩니다.
이 기능을 사용하려면 GIT_CLONE_PATH
가 runners.builds_dir
에서 정의된 경로에 있어야 합니다. builds_dir
을 사용하려면 $CI_BUILDS_DIR
변수를 사용하세요.
기본적으로, 이 기능은 docker
및 kubernetes
실행기에만 활성화되어 있습니다. 왜냐하면 이러한 실행기는 리소스를 분리하는 좋은 방법을 제공하기 때문입니다. 그러나 모든 실행기에 대해 명시적으로 이 기능을 활성화할 수 있지만, ‘concurrent > 1’과 함께 사용할 때 주의해야 합니다.
매개변수 | 유형 | 설명 |
---|---|---|
enabled
| boolean | 작업의 사용자 정의 빌드 디렉터리를 정의할 수 있도록 합니다. |
예시:
[runners.custom_build_dir]
enabled = true
기본 빌드 디렉터리
GitLab Runner는 리파지토리를 _빌드 디렉터리_라고도 알려진 기본 경로 아래에 복제합니다. 이 기본 디렉터리의 기본 위치는 실행기에 따라 다릅니다. 예를 들어:
-
Kubernetes,
Docker 및 Docker Machine 실행기의 경우, 컨테이너 내부의
/builds
입니다. -
Shell 실행기의 경우,
$PWD/builds
입니다. -
SSH, VirtualBox
및 Parallels 실행기의 경우, SSH 연결을 처리하기 위해 구성된 사용자의 홈 디렉터리 안의
~/builds
입니다. - Custom 실행기의 경우, 기본값이 제공되지 않으며 명시적으로 구성해야 합니다. 그렇지 않으면 작업이 실패합니다.
사용자는 builds_dir
설정을 사용하여 사용자 정의 빌드 디렉터리를 명시적으로 정의할 수 있습니다.
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 12.7에 도입되었습니다.
- GitLab v12.6 이상이 필요합니다.
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
와 유사하게 가질 것입니다.