Shell 执行器 (BASIC ALL)
Shell 执行器是在安装极狐GitLab Runner 的机器上本地执行构建的简单的执行器。它支持所有可以安装 Runner 的系统。 这意味着可以使用为 Bash、PowerShell Core、Windows PowerShell 和 Windows Batch(废弃)所生成的脚本。
以特权用户身份运行脚本
如果 --user
添加到
gitlab-runner run
命令,脚本能够以非特权用户的身份运行。只有 Bash 支持这个功能。
源项目检出到:
<working-directory>/builds/<short-token>/<concurrent-id>/<namespace>/<project-name>
。
项目缓存存储在
<working-directory>/cache/<namespace>/<project-name>
。
其中:
-
<working-directory>
是传递到gitlab-runner run
命令或运行 Runner 的当前目录时的--working-directory
的值。 -
<short-token>
Runner 令牌的简写版本(前 8 个字母)。 -
<concurrent-id>
是一个特别的数字,标识在项目的上下文中特定 Runner 上的本地作业 ID(可通过CI_CONCURRENT_PROJECT_ID
预定义变量访问)。 -
<namespace>
是极狐GitLab 上存储项目的命名空间。 -
<project-name>
是存储在极狐GitLab 上的项目的名称。
如果您想覆盖 <working-directory>/builds
和 <working-directory/cache
,
请指定 config.toml
中 [[runners]]
部分下的 builds_dir
和 cache_dir
选项。
以非特权用户身份运行脚本
如果极狐GitLab Runner 从官方 .deb
或 .rpm
安装包安装在 Linux 上,如果能够找到,安装器会试着使用 gitlab_ci_multi_runner
用户;如果未找到,它会创建 gitlab-runner
用户并使用。
系统会以 gitlab-runner
或
gitlab_ci_multi_runner
用户的身份执行所有 Shell 构建。
在一些测试场景中,您的构建或许需要访问一些特权资源,例如 Docker Engine 或 VirtualBox。这种情况下,您需要向各自的组中添加
gitlab-runner
用户:
usermod -aG docker gitlab-runner
usermod -aG vboxusers gitlab-runner
选择您的 Shell
极狐GitLab Runner 支持特定 Shell。如果您想选择 Shell,请在您的 config.toml
文件中进行指定。例如:
...
[[runners]]
name = "shell executor runner"
executor = "shell"
shell = "powershell"
...
安全
一般情况下,用 Shell 执行器运行测试是不安全的。可以使用用户的权限(gitlab-runner
)运行作业并且作业可以从其他运行在这个服务器上的项目”偷取”代码。
请只在您信任和拥有的服务器上运行构建。
停止和关闭进程
Shell 执行器为每个新进程中的作业启动脚本。 在 UNIX 系统上,它将主进程设置为进程组。
极狐GitLab Runner 遇到如下情况会停止进程:
- 作业超时的时候。
- 取消作业的时候。
极狐GitLab 13.0 及更早版本
在 UNIX 系统中,gitlab-runner
向进程发送 SIGKILL
以关闭进程,
因为子进程属于同一个进程组,同样要给它们发送信号。
对于 Windows 系统,需要日发送 taskkill /F /T
。
极狐GitLab 13.1 及更早版本
在 UNIX 系统中,gitlab-runner
向进程及其子进程发送 SIGTERM
,
并且 10 分钟后发送 SIGKILL
。这允许优雅关闭进程。
Windows 系统中没有与 SIGTERM
对等的信号,所以需要发送两次关闭信号。
10 分钟后发送第二个关闭信号。
在 UNIX 系统中,gitlab-runner
将 SIGTERM
发送到进程及其子进程,并在 10 分钟后发送 SIGKILL
。这允许优雅关闭进程。 Windows 系统中没有与 SIGTERM
对等的信号,所以需要发送两次 Kill 信号。10 分钟后发送第二个信号。