GitLab Runner의 시스템 서비스
GitLab Runner은 Go service
라이브러리를 사용하여 기본 OS를 감지하고,
초기화 시스템에 기반하여 서비스 파일을 최종적으로 설치합니다.
service
패키지는 서비스(데몬)로 프로그램을 설치, 제거, 시작, 중지 및 실행합니다. Windows XP+, Linux (systemd, Upstart 및 System V), macOS (launchd)를 지원합니다.GitLab Runner를 설치하면 서비스 파일이 자동으로 생성됩니다:
-
systemd:
/etc/systemd/system/gitlab-runner.service
-
Upstart:
/etc/init/gitlab-runner
사용자 정의 환경 변수 설정
사용자 정의 환경 변수로 GitLab Runner를 실행할 수 있습니다.
예를 들어, 러너 환경에서 GOOGLE_APPLICATION_CREDENTIALS
를 정의하려고 하는 경우입니다. 이 작업은 모든 러너에서 실행되는 모든 작업에 자동으로 추가되는 변수를 정의하는environment
구성 설정과는 다릅니다.
systemd 사용자 정의
systemd를 사용하는 러너의 경우, 각 변수를 내보낼 때 /etc/systemd/system/gitlab-runner.service.d/env.conf
를 만들어 Environment=key=value
라인을 작성합니다.
예시:
[Service]
Environment=GOOGLE_APPLICATION_CREDENTIALS=/etc/gitlab-runner/gce-credentials.json
그런 다음, 구성을 다시 로드합니다:
systemctl daemon-reload
systemctl restart gitlab-runner.service
Upstart 사용자 정의
Upstart를 사용하는 러너의 경우, /etc/init/gitlab-runner.override
를 만들고 원하는 변수를 내보냅니다.
예시:
export GOOGLE_APPLICATION_CREDENTIALS="/etc/gitlab-runner/gce-credentials.json"
이후 러너를 다시 시작하여 변경 사항을 적용합니다.
기본 중지 동작 덮어쓰기
일부 경우에는 서비스의 기본 동작을 덮어써야 할 수 있습니다.
예를 들어, GitLab Runner를 업그레이드하는 경우, 실행 중인 모든 작업이 완료될 때까지 우아하게 중지해야 하는 경우가 있습니다. 그러나 systemd, Upstart 또는 다른 서비스는 새로운 작업을 처리하던 러너 프로세스를 심지어 알지 못한 채 즉시 다시 시작할 수 있습니다.
따라서 GitLab Runner를 업그레이드할 때 설치 스크립트는 그 때 새로운 작업을 처리하고 있을 가능성이 있는 러너 프로세스를 죽이고 다시 시작합니다.
systemd 덮어쓰기
systemd를 사용하는 러너의 경우, 다음 내용으로 /etc/systemd/system/gitlab-runner.service.d/kill.conf
를 만듭니다.
[Service]
TimeoutStopSec=7200
KillSignal=SIGQUIT
이 두 설정을 systemd 유닛 구성에 추가한 후, 러너를 중지할 수 있습니다. 러너 중지 후, systemd는 프로세스를 중지하기 위해 SIGQUIT
를 사용합니다. 또한, 우아하게 종료되지 않는 작업이 이 시간 초과 전에 종료되지 않으면 systemd가 SIGKILL
을 사용하여 프로세스를 중지합니다.
Upstart 덮어쓰기
Upstart를 사용하는 러너의 경우, 다음 내용으로 /etc/init/gitlab-runner.override
를 만듭니다.
kill signal SIGQUIT
kill timeout 7200
이 두 설정을 Upstart 유닛 구성에 추가한 후, 러너를 중지할 수 있습니다. systemd와 같은 방식으로 작동합니다.