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

GitLab CI/CD如何实现deploy触发时自动重跑依赖的build作业

可行配置方案

核心调整逻辑

当前配置的核心问题是将build和deploy两个存在先后依赖的作业放在了同一个deploy阶段,GitLab 同阶段作业默认并行调度,无法自动触发前置作业重跑。通过拆分阶段+配置作业触发规则,即可在不改变两个作业独立运行环境的前提下,实现单按钮触发全流程、强制build先重跑、禁止deploy独立运行的需求。

具体配置修改

  • 首先在gitlab-ci.yml顶部定义流水线阶段顺序,保证build永远在deploy之前执行:
stages:
  - build
  - deploy
  • 修改build作业配置,调整所属阶段、增加触发规则,仅在部署流程触发时自动运行:
build:
  extends: .node_base
  stage: build
  artifacts:
    paths:
      - artifact_folder
  rules:
    # 手动触发部署/手动点deploy按钮时,自动重跑build拉取最新文件
    - if: $CI_PIPELINE_SOURCE == "web"
      when: always
    # 其余场景不自动触发build,避免无效运行
    - when: never
  script:
    - npm start
  • 修改deploy作业配置,增加限制规则禁止独立重跑:
deploy:
  tags:
    - linux-docker
  stage: deploy
  when: manual
  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
  script:
    - aws --endpoint-url $AWS_HOST s3 sync artifact_folder/ s3://$AWS_S3_BUCKET --delete --acl public-read
  dependencies:
    - build
  rules:
    # 仅允许在流水线页面触发deploy,触发后自动拉起前置build作业
    - if: $CI_PIPELINE_SOURCE == "web"
      when: manual
    # 禁止单独重跑deploy作业,避免复用旧的build制品
    - if: $CI_PIPELINE_SOURCE == "job"
      when: never

最终效果

  • GitLab界面仅在deploy阶段显示1个手动触发按钮,点击一次即可自动执行全流程:先跑build拉取最新外部文件生成制品,build成功后自动运行deploy上传S3,无需二次手动操作
  • deploy作业无法脱离build独立运行,每次部署必然执行最新的build流程,不会复用历史旧制品
  • 两个作业仍然使用各自原有运行环境,build走预装npm的.node_base环境,deploy走aws-base镜像,完全符合基础设施限制,不需要在deploy环境额外安装npm

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:18:17