如何让GitLab流水线的扫描组件与构建阶段并行执行?
GitLab流水线优化:让扫描任务与构建任务并行执行
问题场景
现有GitLab流水线包含build和scans两个串行阶段:
build阶段包含validate-dev构建任务scans阶段包含密钥扫描、漏洞扫描两个子组件
当前扫描任务需等待构建任务完成后才启动,希望调整为扫描与构建并行运行以缩短耗时。此前尝试新建任务引入组件时,出现“流水线结果为空”的错误。
解决方案
GitLab流水线中,同一阶段内的所有任务会并行执行,不同阶段则按顺序串行执行。只需将扫描任务的执行阶段修改为与构建任务一致,即可实现并行运行。
修改步骤
- 调整两个扫描组件的
stage输入参数,将原scans改为build(与构建任务同属一个阶段) - 可移除
stages配置中的scans项(若无需保留该阶段)
修改后的完整配置
stages: - build # 扫描与构建任务均归属此阶段,并行执行 workflow: rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' include: - component: ******/secrets-scan@~latest inputs: allow_failure: true stage: build # 修改为build阶段 rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - component: ******n/vulnerabilities-scan@~latest inputs: allow_failure: true stage: build # 修改为build阶段 verbose: true rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" validate-dev: stage: build rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"' when: on_success - when: never trigger: include: - local: "ci/sf-deploy.gitlab-ci.yml" inputs: SF_ENV: "dev" strategy: mirror
说明
- 归属
build阶段的所有任务会在流水线启动后立即并行执行,无需等待其他任务完成 - 保留
allow_failure: true可确保扫描任务失败不会中断整个流水线 - 直接修改现有组件的
stage参数,可避免因配置重复或规则冲突导致的“流水线结果为空”错误
内容的提问来源于stack exchange,提问作者Oupat
相关产品推荐
相关产品推荐

