首页/开发/CI/CD 与发布速查/执行器类型与隔离级别
流水线设计54 条

执行器类型与隔离级别

执行器决定作业跑在什么环境里:shell 复用宿主机(快但隔离弱)、docker 提供镜像隔离、Kubernetes 按 Pod 弹性调度。

CI/CD 与发布速查开发更新于 2026-10-13

执行器是什么

执行器决定作业跑在什么环境里:shell 直接复用宿主机,速度最快但隔离最弱;docker 每个作业拉镜像起容器,环境一致;Kubernetes 每个作业一个 Pod,弹性调度;instance 与 autoscaler 按需创建云主机,适合规模化弹性构建。执行器换来的是隔离与可复现性,代价是启动开销与配置复杂度,选择取决于信任边界与规模。

基本信息

shell复用宿主机工具链,速度最快、隔离最弱
docker每个作业拉镜像起容器,环境一致、需容器运行时
kubernetes每个作业一个 Pod,弹性好、需要集群
instance/autoscaler按需创建云主机,适合规模化弹性构建
选择依据隔离需求、信任边界、启动开销

典型使用场景

  • 固定构建机:shell 执行器复用手工维护的工具链。
  • 通用容器化:docker 执行器提供可复现的构建环境。
  • 弹性集群:Kubernetes 执行器按需调度构建 Pod。
  • 云上扩容:autoscaler 在高峰期自动增加工作机。
  • 遗留工具链:只能跑在特定宿主环境的构建放专用机。
  • 安全隔离:不可信代码的构建放容器或独立节点执行。

GitLab docker executor

GitLab docker executor
build:
  image: node:20
  script: npm ci && npm test

执行器对照

执行器隔离特点适用
shell弱直接复用宿主机工具链固定专用构建机
docker中每个作业拉镜像起容器通用场景
kubernetes强每作业一个 Pod,弹性好集群化 CI
instance/autoscaler强按需创建云主机规模化弹性构建
shell 执行器残留文件与环境污染,是「本机可以、CI 不行」的常见根因。
容器执行器的缓存路径要配置在容器内并用缓存服务存储,路径搞错时缓存永远不命中。
基础镜像用明确版本号而不是 latest,环境才可复现、问题才可回溯。
挂载宿主 docker.sock 等于把宿主机权限交给作业,只对受信任项目开放。

易错点

  • docker 执行器里挂载宿主 docker.sock:等于把宿主机权限交给作业,注意信任边界。
  • Kubernetes 执行器未配置资源 requests 与 limits:构建突发占用可能压垮节点。
  • shell 执行器残留污染:本地可以、CI 不行,多半是历史文件干扰。
  • 基础镜像用 latest:环境漂移后无法复现,固定版本号。
  • 执行器并发无上限:构建峰挤占共享资源,影响其他流水线。
  • 特权模式滥用:容器内以特权运行,攻击面明显扩大。

数据来源与参考

  • GitLab Docs《Executors》
  • Jenkins Handbook《Distributed builds》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌