고급 구성

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

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 신호에 응답하여 구성도 다시 로드합니다.

구성 검증

구성 검증은 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-1runner-2)를 가지고 있습니다. GitLab Runner는 매 10초마다 요청을 보내고 5초 동안 대기합니다:

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

다음은 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-1runner-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_addressadvertise_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_TRACEtrue로 설정되더라도 디버그 로그(추적)가 비활성화됩니다.
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_urlhttp://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_limitunhealthy_interval 작동 방식

GitLab 인스턴스가 오랜 시간 동안 이용 불가능할 때(예: 버전 업그레이드 중),

해당 인스턴스에 구성된 러너는 유휴 상태가 되고 GitLab 인스턴스가 다시 이용 가능해진 후

30-60분 동안 작업 처리를 재개하지 않습니다.

러너가 유휴 상태인 기간을 늘리거나 줄이려면 unhealthy_interval 설정을 변경하세요.

러너가 GitLab 서버에 연결을 시도하는 횟수와

유휴 상태가 되기 전에 받을 수 있는 불건전 대기 시간을 변경하려면

unhealthy_requests_limit 설정을 변경하세요.

자세한 내용은 How check_interval works를 참조하세요.

실행기

다음 실행기가 이용 가능합니다.

실행기 필수 구성 작업 실행 위치
shell   로컬 셸. 기본 실행기.
docker [runners.docker]Docker Engine Docker 컨테이너.
docker-windows [runners.docker]Docker Engine Windows Docker 컨테이너.
ssh [runners.ssh] SSH, 원격으로.
parallels [runners.parallels][runners.ssh] Parallels 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 풀 정책으로 개인 레지스트리를 사용하면 보안 문제를 초래할 수 있습니다. 풀 정책이 작동하는 방식에 대한 자세한 정보는 러너가 이미지를 끌어오는 방법 구성하기를 참조하세요.

개인 컨테이너 레지스트리 사용에 대한 더 많은 정보는 다음을 참조하세요:

러너가 수행하는 단계를 요약하면 다음과 같습니다:

  1. 레지스트리 이름은 이미지 이름에서 찾아집니다.

  2. 값이 비어 있지 않으면 실행기는 이 레지스트리에 대한 인증 구성을 검색합니다.

  3. 마지막으로 지정된 레지스트리에 해당하는 인증이 발견되면, 이후의 풀에서 이를 사용합니다.

GitLab 통합 레지스트리에 대한 지원

GitLab은 작업 데이터를 함께 통합 레지스트리에 대한 자격 증명을 전송합니다. 이러한 자격 증명은 자동으로 레지스트리의 인증 매개변수 목록에 추가됩니다.

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

작업에서는 GitLab 통합 레지스트리의 모든 이미지를 사용할 수 있으며, 이미지가 비공개이거나 보호되어 있어도 사용할 수 있습니다. 작업이 액세스할 수 있는 이미지에 대한 정보는 CI/CD 작업 토큰 문서를 참조하세요.

도커 인증 우선 순위 해결

앞서 설명한 바와 같이, GitLab Runner는 다양한 방법으로 전송된 자격 증명을 사용하여 도커를 레지스트리에 대해 인증할 수 있습니다. 적절한 레지스트리를 찾기 위해 다음의 우선 순위를 고려합니다:

  1. DOCKER_AUTH_CONFIG로 구성된 자격 증명.
  2. GitLab Runner 호스트의 로컬에 ~/.docker/config.json 또는 ~/.dockercfg 파일로 구성된 자격 증명 (예: 호스트에서 docker login을 실행하여).
  3. 작업의 페이로드와 함께 기본적으로 전송된 자격 증명 (예: 앞서 설명한 통합 레지스트리에 대한 자격 증명).

레지스트리를 위해 처음 발견된 자격 증명이 사용됩니다. 예를 들어, 통합 레지스트리에 대해 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_vm1allowed_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에 대한 모든 옵션에 대한 정보는 AWSGCP 프로젝트를 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 기능을 구성합니다. 이 매개변수는 InstanceDocker 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] 섹션

Status: Beta
  • GitLab Runner 17.5.0에 도입되었습니다.

상태 저장소가 비활성화된 상태에서 GitLab Runner가 시작되면(기본값), 기존의 fleeting 인스턴스는 안전상의 이유로 즉시 제거됩니다. max_use_count: 1과 같은 구성에서는 그 사용 상태를 알지 못할 경우 이미 사용된 인스턴스에 작업이 할당되는 것을 방지할 수 있습니다.

상태 저장소 기능을 활성화하면 인스턴스의 상태가 로컬 디스크에 지속됩니다. 이 경우, GitLab Runner가 시작할 때 인스턴스가 존재하면 삭제되지 않습니다. 캐시된 연결 세부 정보, 사용 횟수 및 기타 구성은 복원됩니다.

상태 저장소 기능을 활성화할 때 다음 정보를 고려하세요:

  • 인스턴스의 인증 세부 정보(사용자 이름, 비밀번호, 키)는 디스크에 남아 있습니다.
  • 인스턴스가 작업을 실행 중일 때 복원되면, GitLab Runner는 기본적으로 이를 제거합니다. 이 동작은 안전성을 보장합니다. GitLab Runner는 작업을 재개할 수 없기 때문입니다. 인스턴스를 유지하려면 keep_instance_with_acquisitionstrue로 설정하세요.

keep_instance_with_acquisitionstrue로 설정하는 것은 인스턴스에서 진행 중인 작업에 대해 걱정하지 않을 때 유용합니다. 환경을 정리하는 데에도 유용합니다. 예를 들어, 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_execcleanup_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.createvalues.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 멀티파트 업로드를 사용하려면, UploadRoleARNarn:aws:iam:::<ACCOUNT ID>:<YOUR ROLE NAME> 형식으로 IAM 역할을 지정하세요. 이 역할은 특정 블롭에 쓰기 위해 좁게 범위가 지정된 시간 제한 AWS 자격 증명을 생성합니다. 원래 S3 자격 증명이 지정된 UploadRoleARN에 대한 AssumeRole에 액세스할 수 있는지 확인하세요.

UploadRoleARN에 지정된 IAM 역할은 다음과 같은 권한을 가져야 합니다:

  • BucketName에 지정된 버킷에 대한 s3:PutObject 액세스.
  • KMS 또는 DSSE-KMS를 사용하는 서버 측 암호화가 활성화된 경우 kms:Decryptkms: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-roleUploadRoleARN으로 재사용할 수도 있습니다. my-instance-roleAssumeRole 권한을 갖고 있는지 확인하세요. 예를 들어, 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이 존재하면, 러너가 캐시에 업로드할 때마다:

  1. 러너 관리자는 원래의 S3 자격 증명( AuthenticationType, AccessKey, SecretKey를 통해 지정됨)을 검색합니다.

  2. 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>"
             }
         ]
     }
    
  3. 요청이 성공하면, 러너 관리자는 제한된 세션을 가진 임시 AWS 자격 증명을 얻습니다.

  4. 러너 관리자는 이러한 자격 증명과 s3://<bucket name>/<filename> 형식의 URL을 캐시 아카이버에 전달하여 파일을 업로드합니다.

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

서비스 계정에 대한 IAM 역할을 사용하려면, 클러스터에 대한 IAM OIDC 공급자가 존재해야 합니다. IAM OIDC 공급자가 클러스터와 연결되면, 러너의 서비스 계정과 연결할 IAM 역할을 생성할 수 있습니다.

  1. Create Role 창에서 Select type of trusted entity에서 Web Identity를 선택합니다.

  2. 역할의 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.createtrue로 설정되면 생성된 기본 서비스 계정이 사용됩니다:

      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에 직접 구성된 AccessIDPrivateKey보다 우선합니다.
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

Azure workload 또는 관리되는 ID를 사용하려면 구성에서 AccountKey를 생략하세요.

AccountKey가 비어 있으면 러너는 다음을 시도합니다:

  1. DefaultAzureCredential를 통해 임시 자격 증명을 얻습니다.

  2. 사용자 위임 키를 얻습니다.

  3. 해당 키로 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=stringkey=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-fipsubuntu. 현재 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에서 발견되지 않으면 자동으로 로드됩니다. dockerdocker+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를 사용하는 러너 이미지

이미지는 여러 버전의 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 시스템 상태를 참조하세요.

헬퍼 이미지 재정의

경우에 따라 헬퍼 이미지를 재정의해야 할 수도 있습니다. 그렇게 하는 이유는 여러 가지가 있습니다:

  1. 작업 실행 속도 향상: 인터넷 연결이 느린 환경에서는 같은 이미지를 여러 번 다운로드하는 것이 작업 실행 시간을 늘릴 수 있습니다. registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:XYZ의 정확한 복사본이 저장된 로컬 레지스트리에서 헬퍼 이미지를 다운로드하면 속도를 높일 수 있습니다.

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

  3. 인터넷에 접근할 수 없는 빌드 환경: 오프라인 환경에서 Kubernetes 클러스터를 설치한 경우, CI/CD 작업에 사용되는 이미지를 가져오기 위해 로컬 이미지 레지스트리나 패키지 저장소를 사용할 수 있습니다.

  4. 추가 소프트웨어: 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] 섹션

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

이 기능은 명시적으로 구성되지 않는 한 기본적으로 kubernetes, docker, docker+machine, docker autoscalerinstance 실행자에 대해 활성화됩니다. 다른 모든 실행자는 기본적으로 비활성화됩니다.

이 기능은 GIT_CLONE_PATHrunners.builds_dir에 정의된 경로에 있어야 합니다. builds_dir를 사용하려면 $CI_BUILDS_DIR 변수를 사용하십시오.

기본적으로 이 기능은 dockerkubernetes 실행자에 대해서만 활성화됩니다.

이들은 자원을 분리하는 좋은 방법을 제공하기 때문입니다. 이 기능은 모든 실행자에 대해 명시적으로 활성화할 수 있지만, builds_dir를 공유하고 concurrent > 1인 실행자와 함께 사용할 때는 주의가 필요합니다.

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

예시:

[runners.custom_build_dir]
  enabled = true

기본 빌드 디렉터리

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

  • Kubernetes, DockerDocker Machine 실행자에 대해 /builds는 컨테이너 내에 있습니다.

  • Instance에 대해 ~/builds는 SSH 또는 WinRM 연결을 처리하도록 구성된 사용자의 홈 디렉터리에 있습니다.

  • Docker Autoscaler에 대해 /builds는 컨테이너 내에 있습니다.

  • Shell 실행자에 대해 $PWD/builds입니다.

  • SSH, VirtualBoxParallels 실행자에 대해 ~/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와 유사할 것입니다.