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

GitLab CI能否实现多分支/版本流水线部署及定时更新?

GitLab CI实现分支部署测试+手动/定时触发生产部署方案

完全可以实现你需要的流水线需求,先分析你现有配置的问题,再给出完整的解决方案:

现有配置的问题

  1. 生产部署触发条件过窄:你的deploy:prod规则仅匹配固定标签v11.0.0,只有推送该特定标签时才会执行,主分支推送或定时任务触发时都不会触发这个任务。
  2. 阶段顺序无依赖:测试和生产部署都放在release阶段,无法保证“测试通过后再部署生产”的执行顺序。

完整配置方案

下面的配置将实现:

  • 主分支推送时,自动执行测试→部署测试环境,需手动确认后部署生产
  • 推送版本标签(如v1.0.0)时,自动执行测试→部署测试→部署生产
  • 定时任务触发时,自动执行测试→部署测试→部署生产(用于更新证书等)
# 定义流水线阶段顺序,确保执行流程:测试→部署测试→部署生产
stages:
  - test
  - deploy_test
  - deploy_prod

# 测试阶段:所有触发场景都需先执行测试
test:
  image: alpine:3.18
  stage: test
  script:
    - echo "执行自动化测试用例..."
    # 这里替换成你的实际测试命令
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: always
    - if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
      when: always
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
      when: always

# 部署测试环境:主分支、标签、定时触发时自动执行,依赖测试通过
deploy:test:
  image: alpine:3.18
  stage: deploy_test
  script:
    - echo "部署到测试环境:分支=$CI_COMMIT_BRANCH,标签=$CI_COMMIT_TAG"
    - cat version.txt
    # 这里替换成你的实际测试环境部署命令
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: always
    - if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
      when: always
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
      when: always
  needs: [test] # 必须等待测试阶段成功完成才会执行

# 部署生产环境:支持三种触发方式
deploy:prod:
  image: alpine:3.18
  stage: deploy_prod
  script:
    - echo "部署到生产环境:分支=$CI_COMMIT_BRANCH,标签=$CI_COMMIT_TAG"
    - cat version.txt
    - echo "更新证书、配置等内容..."
    # 这里替换成你的实际生产环境部署命令
  rules:
    # 1. 主分支推送后,手动确认部署(测试通过后需人工触发)
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: manual
      allow_failure: false # 禁止跳过,必须手动确认
    # 2. 推送版本标签时自动部署(适配vX.X.X格式的版本号)
    - if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
      when: always
    # 3. 定时任务触发时自动部署(用于定期更新证书)
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
      when: always
  needs: [deploy:test] # 必须等待测试环境部署完成才会执行

定时任务设置

在GitLab项目的「CI/CD」→「计划」页面添加定时任务,设置执行频率(比如每天凌晨2点),触发后流水线会自动执行全流程,完成生产环境的证书更新等操作。

关键配置说明

  • needs关键字:用来定义任务依赖,确保前序阶段成功后才会执行当前任务,实现“测试通过再部署”的顺序要求。
  • when: manual:主分支推送时,生产部署需要手动确认,避免误操作直接部署生产。
  • 正则匹配标签:用$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'匹配所有标准版本格式的标签,无需固定某个标签。
  • CI_PIPELINE_SOURCE == "schedule":识别定时触发的流水线,自动执行全流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:07:41