You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GitLab Pipeline使用Runner环境而非容器运行所有任务?

GitLab Pipeline 让所有阶段在同一Runner环境执行的方案

核心思路

默认Docker执行器会为每个job启动独立容器,要让所有阶段共享同一环境,需使用Shell执行器的Runner——它直接在Runner所在主机的环境中运行所有job,无需启动容器。

步骤1:配置Shell执行器的GitLab Runner

注册Runner时选择shell执行器,操作如下:

  1. 在Runner主机上运行注册命令:gitlab-runner register
  2. 按提示输入GitLab实例地址、注册令牌
  3. 执行器类型选择shell
  4. 为该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串行执行,避免环境冲突

内容的提问来源于stack exchange,提问作者Putnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:53:25