InfoGrab Docs

Shell 실행기

요약

이 executor는 유지 관리 모드입니다. Shell executor는 GitLab Runner를 위한 가장 간단한 executor 구성입니다. 최소한의 종속성이 있는 빌드에는 적합하지만, Shell executor는 작업 간 격리가 제한됩니다.

Warning

이 executor는 유지 관리 모드입니다. 중요 보안 업데이트는 수신되지만 새 기능은 계획되어 있지 않습니다. 새 프로젝트의 경우 활성 개발 중인 executor 중 하나를 사용하는 것을 고려하세요.

Shell executor는 GitLab Runner를 위한 가장 간단한 executor 구성입니다. GitLab Runner가 설치된 머신에서 로컬로 빌드를 실행하므로 모든 종속성이 동일한 머신에 설치되어 있어야 합니다. Runner를 설치할 수 있는 모든 시스템을 지원합니다. 즉, Bash, PowerShell Core, Windows PowerShell 및 Windows Batch(사용 중단됨)용으로 생성된 스크립트를 사용할 수 있습니다.

최소한의 종속성이 있는 빌드에는 적합하지만, Shell executor는 작업 간 격리가 제한됩니다.

Note

Shell 실행기를 사용하는 머신에서 공통 사전 요구 사항을 충족하는지 확인하세요.

권한 있는 사용자로 스크립트 실행#

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

소스 프로젝트는 다음 경로에 체크아웃됩니다: <working-directory>/builds/<short-token>/<concurrent-id>/<namespace>/<project-name>.

프로젝트의 캐시는 다음 경로에 저장됩니다: <working-directory>/cache/<namespace>/<project-name>.

여기서:

  • <working-directory>gitlab-runner run 명령에 전달된 --working-directory 값 또는 Runner가 실행 중인 현재 디렉토리입니다.
  • <short-token>은 Runner 토큰의 단축 버전입니다 (처음 8글자).
  • <concurrent-id>는 동일한 프로젝트에 대해 동시에 빌드를 실행하는 모든 러너 목록에서의 러너 인덱스입니다 (CI_CONCURRENT_PROJECT_ID 사전 정의 변수를 통해 접근 가능).
  • <namespace>는 GitLab에서 프로젝트가 저장된 네임스페이스입니다.
  • <project-name>은 GitLab에 저장된 프로젝트의 이름입니다.

<working-directory>/builds<working-directory>/cache를 덮어쓰려면 config.toml[[runners]] 섹션 아래에서 builds_dircache_dir 옵션을 지정하세요.

권한 없는 사용자로 스크립트 실행#

GitLab Runner가 Linux에서 공식 .deb 또는 .rpm 패키지로 설치된 경우, 설치 프로그램은 gitlab_ci_multi_runner 사용자를 찾으면 사용하려고 합니다. 설치 프로그램이 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"
...

보안#

일반적으로 Shell 실행기로 작업을 실행하는 것은 안전하지 않습니다. 작업은 사용자 권한(gitlab-runner)으로 실행되며 이 서버에서 실행되는 다른 프로젝트의 코드를 "도용"할 수 있습니다. 구성에 따라 작업은 높은 권한의 사용자로 서버에서 임의의 명령을 실행할 수 있습니다. 신뢰하는 서버에서 신뢰하는 사용자의 빌드를 실행하는 경우에만 사용하세요.

프로세스 종료 및 종결#

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

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

  • 작업이 타임아웃됩니다.
  • 작업이 취소됩니다.

UNIX 시스템에서 gitlab-runner는 프로세스와 그 자식 프로세스에 SIGTERM을 보내고, 10분 후에 SIGKILL을 보냅니다. 이를 통해 프로세스가 정상적으로 종료될 수 있습니다. Windows에는 SIGTERM에 해당하는 신호가 없으므로, 종결 신호가 두 번 전송됩니다. 두 번째 신호는 10분 후에 전송됩니다.

Shell 실행기

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

이 executor는 유지 관리 모드입니다. Shell executor는 GitLab Runner를 위한 가장 간단한 executor 구성입니다. 최소한의 종속성이 있는 빌드에는 적합하지만, Shell executor는 작업 간 격리가 제한됩니다.

Warning

이 executor는 유지 관리 모드입니다. 중요 보안 업데이트는 수신되지만 새 기능은 계획되어 있지 않습니다. 새 프로젝트의 경우 활성 개발 중인 executor 중 하나를 사용하는 것을 고려하세요.

Shell executor는 GitLab Runner를 위한 가장 간단한 executor 구성입니다. GitLab Runner가 설치된 머신에서 로컬로 빌드를 실행하므로 모든 종속성이 동일한 머신에 설치되어 있어야 합니다. Runner를 설치할 수 있는 모든 시스템을 지원합니다. 즉, Bash, PowerShell Core, Windows PowerShell 및 Windows Batch(사용 중단됨)용으로 생성된 스크립트를 사용할 수 있습니다.

최소한의 종속성이 있는 빌드에는 적합하지만, Shell executor는 작업 간 격리가 제한됩니다.

Note

Shell 실행기를 사용하는 머신에서 공통 사전 요구 사항을 충족하는지 확인하세요.

권한 있는 사용자로 스크립트 실행#

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

소스 프로젝트는 다음 경로에 체크아웃됩니다: <working-directory>/builds/<short-token>/<concurrent-id>/<namespace>/<project-name>.

프로젝트의 캐시는 다음 경로에 저장됩니다: <working-directory>/cache/<namespace>/<project-name>.

여기서:

  • <working-directory>gitlab-runner run 명령에 전달된 --working-directory 값 또는 Runner가 실행 중인 현재 디렉토리입니다.
  • <short-token>은 Runner 토큰의 단축 버전입니다 (처음 8글자).
  • <concurrent-id>는 동일한 프로젝트에 대해 동시에 빌드를 실행하는 모든 러너 목록에서의 러너 인덱스입니다 (CI_CONCURRENT_PROJECT_ID 사전 정의 변수를 통해 접근 가능).
  • <namespace>는 GitLab에서 프로젝트가 저장된 네임스페이스입니다.
  • <project-name>은 GitLab에 저장된 프로젝트의 이름입니다.

<working-directory>/builds<working-directory>/cache를 덮어쓰려면 config.toml[[runners]] 섹션 아래에서 builds_dircache_dir 옵션을 지정하세요.

권한 없는 사용자로 스크립트 실행#

GitLab Runner가 Linux에서 공식 .deb 또는 .rpm 패키지로 설치된 경우, 설치 프로그램은 gitlab_ci_multi_runner 사용자를 찾으면 사용하려고 합니다. 설치 프로그램이 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"
...

보안#

일반적으로 Shell 실행기로 작업을 실행하는 것은 안전하지 않습니다. 작업은 사용자 권한(gitlab-runner)으로 실행되며 이 서버에서 실행되는 다른 프로젝트의 코드를 "도용"할 수 있습니다. 구성에 따라 작업은 높은 권한의 사용자로 서버에서 임의의 명령을 실행할 수 있습니다. 신뢰하는 서버에서 신뢰하는 사용자의 빌드를 실행하는 경우에만 사용하세요.

프로세스 종료 및 종결#

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

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

  • 작업이 타임아웃됩니다.
  • 작업이 취소됩니다.

UNIX 시스템에서 gitlab-runner는 프로세스와 그 자식 프로세스에 SIGTERM을 보내고, 10분 후에 SIGKILL을 보냅니다. 이를 통해 프로세스가 정상적으로 종료될 수 있습니다. Windows에는 SIGTERM에 해당하는 신호가 없으므로, 종결 신호가 두 번 전송됩니다. 두 번째 신호는 10분 후에 전송됩니다.