셸 실행기

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

셸 실행기는 GitLab Runner가 설치된 컴퓨터에서 로컬로 빌드를 실행하는 데 사용하는 간단한 실행기입니다. Runner가 설치될 수 있는 모든 시스템을 지원합니다. 따라서 Bash, PowerShell Core, Windows PowerShell 및 Windows Batch(사용 중단됨)를 위해 생성된 스크립트를 사용할 수 있습니다.

note
일반 사전 요구 사항을 GitLab Runner가 셸 실행기를 사용하는 컴퓨터에서 충족하는지 확인하세요.

특권이 있는 사용자로 스크립트 실행

--usergitlab-runner run 명령에 추가하면 스크립트를 특권이 없는 사용자로 실행할 수 있습니다. 이 기능은 Bash에서만 지원됩니다.

소스 프로젝트는 다음 위치로 체크아웃됩니다: <작업 디렉토리>/builds/<짧은 토큰>/<동시 실행 ID>/<네임스페이스>/<프로젝트 이름>.

프로젝트의 캐시는 <작업 디렉토리>/cache/<네임스페이스>/<프로젝트 이름>에 저장됩니다.

여기서:

  • <작업 디렉토리>gitlab-runner run 명령에 전달되거나 Runner가 실행 중인 현재 디렉토리의 값입니다.
  • <짧은 토큰>은 Runner의 토큰의 단축 버전(첫 8 글자)입니다.
  • <동시 실행 ID>는 프로젝트의 컨텍스트에서 특정 Runner의 로컬 작업 ID를 식별하는 고유한 숫자입니다(프리디파인드 변수(CI_CONCURRENT_PROJECT_ID)를 통해 액세스할 수 있음).
  • <네임스페이스>는 GitLab에 프로젝트가 저장된 네임스페이스입니다.
  • <프로젝트 이름>은 GitLab에 저장된 프로젝트의 이름입니다.

<작업 디렉토리>/builds<작업 디렉토리>/cache를 덮어쓰려면 config.toml[[runners]] 섹션 아래에 builds_dircache_dir 옵션을 지정하세요(자세한 내용은 구성 파일 참조).

특권이 없는 사용자로 스크립트 실행

GitLab Runner를 Linux에 공식 .deb 또는 .rpm 패키지에서 설치하는 경우, 설치 프로그램은 gitlab_ci_multi_runner 사용자가 있으면 이를 사용하려고 시도합니다. 이를 찾을 수 없다면 gitlab-runner 사용자를 만들고 이를 대신 사용합니다.

모든 셸 빌드는 이후 gitlab-runner 또는 gitlab_ci_multi_runner 사용자 중 하나로 실행됩니다.

일부 테스트 시나리오에서 빌드에는 Docker Engine 또는 VirtualBox와 같은 특권이 필요할 수 있습니다. 이 경우 gitlab-runner 사용자를 해당 그룹에 추가해야 합니다.

usermod -aG docker gitlab-runner
usermod -aG vboxusers gitlab-runner

셸 선택

GitLab Runner는 특정 셸을 지원합니다. 셸을 선택하려면 config.toml 파일에 지정하세요. 예:

...
[[runners]]
  name = "shell executor runner"
  executor = "shell"
  shell = "powershell"
...

보안

보통 셸 실행기로 작업을 실행하는 것은 안전하지 않습니다. 작업은 사용자의 권한(gitlab-runner)으로 실행되며,이 서버에서 실행되는 다른 프로젝트들에서 코드를 “도난”당할 수 있습니다. 구성에 따라, 작업은 고도로 특권이 있는 사용자로써 서버에서 임의의 명령을 실행할 수도 있습니다. 신뢰할 수 있는 사용자의 빌드만을 신뢰할 수 있는 서버에서만 실행하세요.

프로세스 종료 및 종료

셸 실행기는 각 작업에 대해 새 프로세스에서 스크립트를 시작합니다. UNIX 시스템에서는 주 프로세스를 프로세스 그룹으로 설정합니다.

GitLab Runner는 다음과 같은 경우에 프로세스를 종료합니다:

UNIX 시스템에서 gitlab-runner는 프로세스 및 해당 자식 프로세스에 SIGTERM을 보내고, 10분 후에 SIGKILL을 보냅니다. 이에 따라 프로세스가 공정하게 종료됩니다. Windows에는 SIGTERM과 동일한 것이 없으므로, 킬 신호가 두 번 보내집니다. 두 번째는 10분 후에 보내집니다.