执行器
Tier: 基础版,专业版,旗舰版
Offering: JihuLab.com,私有化部署
极狐GitLab Runner 实现了多种执行器,可用于在不同环境中运行您的构建:
其他执行器也可用,但它们不再处于活跃的功能开发中。它们会接收关键安全更新,但不会新增功能。
某些功能需要使用 fleeting的 runner。Docker 自动扩缩器 和实例执行器使用 fleeting。您应迁移到这些执行器之一,以充分利用 极狐GitLab Runner 的全部能力。
如果您不确定该选择哪个执行器,请参阅选择执行器。
有关每个执行器支持的功能的更多信息,请参阅兼容性图表。
这些执行器已锁定,我们不再开发或接受新的执行器。更多信息,请参阅贡献新的执行器。
选择执行器
执行器支持不同的平台和构建项目的方法。下图展示了根据您的操作系统和平台应选择哪个执行器:
Rendering chart...
SSH 执行器处于维护模式。它会接收关键安全更新,但不会规划新功能。 此外,它也是支持程度最低的执行器之一。对于基于本地 shell 的构建, 请考虑改用 Shell 执行器。
下表展示了每个执行器的关键信息,可帮助您决定使用哪个执行器:
SSH、Shell、VirtualBox、Parallels 和自定义执行器处于维护模式。 它们会接收关键安全更新,但不会规划新功能。
| 执行器 | Docker | Docker 自动扩缩器 | 实例 | Kubernetes | SSH | Shell | VirtualBox | Parallels | 自定义 |
|---|---|---|---|---|---|---|---|---|---|
| 每次构建都有干净的构建环境 | ✓ | ✓ | 视情况而定 1 | ✓ | ✗ | ✗ | ✓ | ✓ | 视情况而定 1 |
| 如果存在先前的克隆则复用 | ✓ | ✓ | 视情况而定 1 | ✓ 2 | ✓ | ✓ | ✗ | ✗ | 视情况而定 1 |
| Runner 文件系统访问受保护 3 | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ | ✓ | ✓ | 视情况而定 |
| 迁移 runner 机器 | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | 部分支持 | 部分支持 | ✓ |
| 并发构建的零配置支持 | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ 4 | ✓ | ✓ | 视情况而定 1 |
| 复杂的构建环境 | ✓ | ✓ | ✗ 5 | ✓ | ✗ | ✗ 5 | ✓ 6 | ✓ 6 | ✓ |
| 调试构建问题 | 中等 | 中等 | 中等 | 中等 | 简单 | 简单 | 困难 | 困难 | 中等 |
脚注:
- 取决于您预配的环境。可以完全隔离,也可以在构建之间共享。
- 需要配置每个并发持久构建卷。
- 当 runner 的文件系统访问不受保护时,作业可以访问整个系统, 包括 runner 的令牌以及其他作业的缓存和代码。 标记为 ✓ 的执行器默认不允许 runner 访问文件系统。 但是,安全缺陷或某些配置可能允许作业 突破其容器并访问承载 runner 的文件系统。
- 如果构建使用构建机器上安装的服务,选择执行器是可行的,但会有问题。
- 需要手动安装依赖项。
- 例如,使用 Vagrant。
Docker 执行器
Docker 执行器通过容器提供干净的构建环境。依赖管理简单直接,所有依赖都打包在 Docker 镜像中。此执行器要求在 Runner 主机上安装 Docker。
此执行器支持额外的服务,例如 MySQL。它还支持将 Podman 作为替代容器运行时。
此执行器可维持一致、隔离的构建环境。
Docker 自动扩缩执行器
Docker 自动扩缩执行器是支持自动扩缩的 Docker 执行器,它按需创建实例,以容纳 Runner Manager 处理的作业。它封装了 Docker 执行器,因此支持所有 Docker 执行器选项和功能。
Docker 自动扩缩器使用 fleeting 插件进行自动扩缩。Fleeting 是一组自动扩缩实例的抽象,它使用支持云提供商的插件,例如 Google Cloud、AWS 和 Azure。此执行器特别适合工作负载需求动态变化的环境。
实例执行器
实例执行器是支持自动扩缩的执行器,它按需创建实例,以容纳 Runner Manager 处理的预期作业量。
此执行器和相关的 Docker 自动扩缩执行器是新的自动扩缩执行器,与极狐GitLab Runner Fleeting 和 Taskscaler 技术配合使用。
实例执行器也使用 fleeting 插件进行自动扩缩。
当作业需要完全访问主机实例、操作系统和连接的设备时,您可以使用实例执行器。实例执行器还可以配置为容纳单租户和多租户作业。
Kubernetes 执行器
您可以使用 Kubernetes 执行器,将现有的 Kubernetes 集群用于您的构建。该执行器会调用 Kubernetes 集群 API,并为每个极狐GitLab CI/CD 作业创建一个新的 Pod(包含一个构建容器和多个服务容器)。此执行器特别适合云原生环境,可提供出色的可扩展性和资源利用率。
处于维护模式的执行器
这些执行器会接收关键安全更新,但不会规划新功能:
兼容性图表
不同执行器支持的功能。
SSH、Shell、VirtualBox、Parallels 和自定义执行器处于维护模式。 它们会接收关键安全更新,但不会规划新功能。
| 执行器 | Docker | Docker 自动扩缩器 | 实例 | Kubernetes | SSH | Shell | VirtualBox | Parallels | 自定义 |
|---|---|---|---|---|---|---|---|---|---|
| 安全变量 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| .gitlab-ci.yml:image | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓ (1) | ✓ (1) | ✓(通过使用 $CUSTOM_ENV_CI_JOB_IMAGE) |
| .gitlab-ci.yml:services | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ |
| .gitlab-ci.yml:cache | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| .gitlab-ci.yml:artifacts | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 在阶段之间传递产物 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 使用极狐GitLab 容器镜像仓库的私有镜像 | ✓ | ✓ | 不适用 | ✓ | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
| 交互式 Web 终端 | ✓ | ✗ | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ | ✗ |
脚注:
- 在极狐GitLab Runner 14.2 中添加了支持。 更多详情,请参阅覆盖基础 VM 镜像部分。
不同 shell 支持的系统:
| Shells | Bash | PowerShell Desktop | PowerShell Core | sh |
|---|---|---|---|---|
| Linux | ✓ 1 | ✗ | ✓ | ✓ |
| macOS | ✓ 1 | ✗ | ✓ | ✓ |
| FreeBSD | ✓ 1 | ✗ | ✗ | ✓ |
| Windows | ✗ 3 | ✓ 4 | ✓ 2,5 | ✗ |
脚注:
- 默认 shell
- runner 注册以及使用 shell 执行器的作业的默认 shell。
- Windows 不支持 Bash shell。
- 使用 docker-windows 和 kubernetes 执行器的作业的默认 shell。
- 使用 shell 执行器的作业的默认 shell。
不同 shell 支持交互式 Web 终端的系统:
| Shells | Bash | PowerShell Desktop | PowerShell Core | sh |
|---|---|---|---|---|
| Windows | ✗ | ✓ | ✓ | ✗ |
| Linux | ✓ | ✗ | ✓ | ✓ |
| macOS | ✓ | ✗ | ✓ | ✓ |
| FreeBSD | ✓ | ✗ | ✗ | ✓ |
非 Docker 执行器的 Git 要求
不依赖辅助镜像的执行器要求在目标机器上安装 Git,并且 Git 位于 PATH中。请始终使用最新可用的 Git 版本。
如果目标机器上安装了 Git LFS,极狐GitLab Runner 会使用 git lfs 命令。 请确保在极狐GitLab Runner 使用这些执行器的所有系统上,Git LFS 都是最新版本。
请务必为执行极狐GitLab Runner 命令的用户使用 git lfs install 初始化 Git LFS。您可以使用 git lfs install --system 在整个系统上初始化 Git LFS。
为了对与极狐GitLab 实例的 Git 交互进行身份验证,极狐GitLab Runner 使用 CI_JOB_TOKEN。根据 FF_GIT_URLS_WITHOUT_TOKENS 设置,最后使用的凭据可能会缓存在预装的 Git 凭据助手中(例如 Git credential manager), 前提是已安装此类助手并配置为缓存凭据:
- 当 FF_GIT_URLS_WITHOUT_TOKENS 为 false 时,最后使用的 CI_JOB_TOKEN 会存储在预装的 Git 凭据助手中。
- 当 FF_GIT_URLS_WITHOUT_TOKENS 为 true 时,CI_JOB_TOKEN 绝不会存储或缓存在任何预装的 Git 凭据助手中。