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

GitLab CI配置优化:合并请求时避免生成两个独立流水线

GitLab CI 流水线优化配置方案

问题现状

  • 向非master分支提交代码时,仅运行test和node阶段的流水线
  • 发起合并请求(MR)时,会生成两个独立流水线:
    1. 执行test和node阶段的分支流水线
    2. 执行prepare、build、run阶段及Secret-Detection安全检测的MR专属流水线
  • 核心问题:若MR专属流水线(含秘检)失败但分支流水线成功,MR仍可合并,存在安全风险;且双流水线占用有限runner资源,拖慢执行速度

需求目标

  • MR及master分支提交代码时,所有阶段在同一流水线按顺序执行
  • 非master分支提交代码时,仅执行test和node阶段

修改后的完整配置

image: node:latest

# 控制流水线生成逻辑,避免MR时产生双流水线
workflow:
  rules:
    # MR事件时,仅生成MR流水线
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    # master分支直接提交时生成流水线
    - if: $CI_COMMIT_BRANCH == "master"
    # 其他分支提交时生成流水线(仅运行默认执行的任务)
    - if: $CI_COMMIT_BRANCH != "master" && $CI_PIPELINE_SOURCE != "merge_request_event"

stages:
  - test
  - node
  - prepare
  - build
  - run

node_18:
  stage: node
  image: node:18.20.2
  script:
    - echo "Testing Node.js version 18.20.2"
    - npm i
    - cp config.example.json config.json
    - rm config.json

node_20:
  stage: node
  image: node:20.13.1
  script:
    - echo "Testing Node.js version 20.13.1"
    - npm i
    - cp config.example.json config.json
    - rm config.json

node_22:
  stage: node
  image: node:22.2.0
  script:
    - echo "Testing Node.js version 22.2.0"
    - npm i
    - cp config.example.json config.json
    - rm config.json

prepare:
  stage: prepare
  script:
    - echo "Removing node_modules..."
    - rm -rf node_modules/
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"

compile:
  stage: build
  image: node:20
  script:
    - npm i
    - cp config.example.json config.json
    - node deploy-commands.js
    - npm run pm2start
    - npm run pm2stop
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"

testrun:
  stage: run
  script:
    - npm run test
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"

include:
  - template: Security/Secret-Detection.gitlab-ci.yml

配置说明

  1. workflow规则:

    • 明确限定流水线触发条件,MR事件仅生成单条MR流水线,彻底避免分支流水线与MR流水线重复生成的问题
    • 区分master分支、其他分支的触发逻辑,确保非master分支仅运行基础阶段任务
  2. 替换only为rules:

    • 将原only: [master, merge_requests]替换为精准的rules条件,确保prepare、build、run阶段及Secret-Detection仅在MR或master分支提交时执行
    • node阶段的任务无额外规则,默认在所有流水线中运行,符合非master分支仅执行test、node阶段的需求
  3. Secret-Detection集成:

    • 集成的安全检测模板会自动遵循全局workflow规则,仅在MR或master分支的流水线中执行,不会单独触发额外流水线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:33:14