如何让GitLab Pipeline使用Runner环境而非容器运行所有任务?
GitLab Pipeline 让所有阶段在同一Runner环境执行的方案
核心思路
默认Docker执行器会为每个job启动独立容器,要让所有阶段共享同一环境,需使用Shell执行器的Runner——它直接在Runner所在主机的环境中运行所有job,无需启动容器。
步骤1:配置Shell执行器的GitLab Runner
注册Runner时选择shell执行器,操作如下:
- 在Runner主机上运行注册命令:
gitlab-runner register - 按提示输入GitLab实例地址、注册令牌
- 执行器类型选择
shell - 为该Runner设置专属标签(比如
shell-runner),方便后续CI配置指定
如果已有Runner,可修改其config.toml文件,确保executor = "shell",并添加对应标签。
步骤2:编写.gitlab-ci.yml配置
关键配置要点:
- 不指定
image字段,直接复用Runner的主机环境 - 所有job通过
tags指定使用上述Shell Runner - 可选:通过
resource_group控制并发,避免同一Runner上多job同时运行导致环境冲突
示例配置:
stages: - build - test - deploy # 构建阶段 build: stage: build tags: - shell-runner script: - echo "开始构建,当前工作目录:$(pwd)" - # 替换为实际构建命令,比如 mvn clean package、npm install 等 # 测试阶段 test: stage: test tags: - shell-runner script: - echo "开始测试,检查构建产物:" - ls -la target/ # 示例:检查Java构建产物 - # 替换为实际测试命令,比如 mvn test、npm test 等 # 部署阶段 deploy: stage: deploy tags: - shell-runner script: - echo "开始部署" - # 替换为实际部署命令
注意事项
- 提前在Runner主机安装所有job需要的依赖(比如编程语言环境、构建工具等),所有阶段都会复用这个环境的依赖
- 若需要保留job间的中间产物(比如构建后的文件),无需额外配置——所有job在同一主机的工作目录下执行(默认路径可在Runner的
config.toml中修改) - 若Runner默认并发数大于1,建议二选一:
- 修改Runner的
config.toml,设置concurrent = 1,确保同一时间仅一个job运行 - 在.gitlab-ci.yml的每个job中添加
resource_group: shared-environment,强制同一资源组的job串行执行,避免环境冲突
- 修改Runner的
内容的提问来源于stack exchange,提问作者Putnik
相关产品推荐
相关产品推荐

