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

从Jenkins迁移至GitLab:如何在单gitlab-ci.yml中分离CI与手动部署

方案可行性结论

你描述的需求完全可以通过单个gitlab-ci.yml实现,GitLab CI原生支持「部分任务自动触发、部分任务仅手动执行」的运行模式,不需要调整现有开发人员的提交、合并流程,完全适配你当前的Jenkins使用习惯。

你草拟的配置仅需做少量调整即可正常运行:

  1. 修正stages段的重复定义,两个test保留一个即可,阶段是按顺序执行的,相同阶段的任务会并行运行,不需要重复声明。
  2. 可以给手动部署/销毁任务增加分支限制,避免在非主干分支误触发生产操作,调整后示例如下:
workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
      when: never
    - if: '$CI_COMMIT_BRANCH'

stages:
  - test
  - deploy
  - destroy

test-python-job:
  stage: test
  rules:
     - if: '$CI_PIPELINE_SOURCE == "push"'
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
  script:
    - echo "Test Python"
    - black
    - bandit
    - flake8
    - tox

test-terraform-job:
  stage: test
  rules:
     - if: '$CI_PIPELINE_SOURCE == "push"'
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
  script:
    - echo "Test Terraform"
    - terraform validate --yadda

test-ansible-job:
  stage: test
  rules:
     - if: '$CI_PIPELINE_SOURCE == "push"'
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
  script:
    - echo "Test Ansible"
    - ansible-lint --yadda

deploy-job:
  stage: deploy
  variables:
    DEPLOYMENT_ID: "Only deploy-job can use this variable's value"
  secrets:
    DATABASE_PASSWORD:
      vault: production/db/password@ops
  rules:
    # 仅主干分支显示手动部署按钮
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: manual
      allow_failure: true
  script:
    - echo "Terraform Deploy"
    - terraform deploy
    - ansible-playbook yaddas

destroy-job:
  stage: destroy
  variables:
    DEPLOYMENT_ID: "Only destroy-job can use this variable's value"
  secrets:
    DATABASE_PASSWORD:
      vault: production/db/password@ops
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: manual
      allow_failure: true
  script:
    - terraform destroy

注:allow_failure: true 是为了避免手动任务未执行时,整个流水线被标记为失败,符合常规CI流水线的校验逻辑。

迁移适配成本评估

整体迁移成本极低,核心适配工作仅包含以下内容:

  • 原有Jenkins多分支流水线的自动校验逻辑(代码检查、测试、镜像构建)可以直接平移到gitlab-ci.yml的自动触发任务中,脚本基本不需要修改。
  • 原有手动触发的部署任务逻辑可以直接平移到when: manual的任务中,GitLab支持手动运行流水线时自定义输入参数,完全兼容你当前Jenkins参数化部署的使用习惯。
  • 现有Ansible、Terraform配置以及CI环节构建的Docker镜像可以直接复用,不需要做适配调整。
  • 权限管控逻辑可以完全对齐:GitLab支持配置仅指定角色的用户可触发手动部署/销毁任务,和原有Jenkins的权限管控能力一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:18:02