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

如何在GitLab中创建无SNAPSHOT的Maven项目手动部署流水线?

实现GitLab手动流水线完成无SNAPSHOT版本部署

一、更新.gitlab-ci.yml配置

调整流水线阶段,新增手动触发的版本准备任务,并优化现有部署任务的触发规则:

stages:
  - test
  - release-prepare  # 新增手动版本准备阶段
  - publish
  - deploy
  - manual

# Test all commits regardless of branch in a WildFly 10 instance
test:wf10:
  stage: test
  script:
    - mvn clean test -U -Dprofile.wildfly10 -Dwildfly10.servergroup=masterdata-web
  tags:
    - test

# 手动触发版本准备:生成无SNAPSHOT的Release Tag并推送
release-prepare:wf10:
  stage: release-prepare
  script:
    # 校验发布版本号不能包含SNAPSHOT
    - if echo "$RELEASE_VERSION" | grep -q "SNAPSHOT"; then echo "错误:发布版本号禁止包含SNAPSHOT"; exit 1; fi
    # 执行Maven Release准备,指定发布版本和下一个开发版本
    - mvn release:prepare -Darguments=-Dprofile.wildfly10 -DignoreSnapshots=true -DreleaseVersion=$RELEASE_VERSION -DdevelopmentVersion=$NEXT_DEVELOPMENT_VERSION
    # 清理Release临时文件
    - mvn release:clean
    # 推送Tag和分支变更到GitLab
    - git push --follow-tags
  tags:
    - test
  when: manual
  variables:
    RELEASE_VERSION: ""  # 需手动输入:无SNAPSHOT的发布版本(如v-1.0.0)
    NEXT_DEVELOPMENT_VERSION: ""  # 需手动输入:下一个开发版本(允许带SNAPSHOT,如1.0.1-SNAPSHOT)

# Publish tagged release to Artifactory (WildFly 10)
publish-release:wf10:
  stage: publish
  only:
    - /^v-.*$/
  script:
    - mvn clean deploy -B -U -P wildfly10 -Dmaven.test.skip=true
  tags:
    - test

# Manually deploy any build to WildFly 10 servergroup Masterdata-web
deploy-test:wf10:
  stage: manual
  environment:
    name: test
  script:
    - mvn clean package wildfly:undeploy wildfly:deploy -B -U -P wildfly10 -Dmaven.test.skip=true -Dwildfly10.servergroup=masterdata-web 
  tags:
    - test
  when: manual

# Manually deploy tagged release to WildFly 10 servergroup Masterdata-web
deploy-qa:wf10:
  stage: manual
  environment:
    name: qa
  script:
    - mvn clean package wildfly:undeploy wildfly:deploy -B -U -P wildfly10 -Dmaven.test.skip=true -Dwildfly10.servergroup=masterdata-web 
  tags:
    - qa
  when: manual

# Automatically deploy build staged for release to WildFly 10 servergroup Masterdata-web
deploy-release-qa:wf10:
  stage: deploy
  environment:
    name: qa
  only:
    - master
  except:
    - /^v-.*$/
  script:
    - mvn clean package wildfly:undeploy wildfly:deploy -B -U -P wildfly10 -Dmaven.test.skip=true -Dwildfly10.servergroup=masterdata-web 
  tags:
    - qa
  when: manual

# Automaticaly deploy tagged release to WildFly 10 servergroup Masterdata-web
deploy-release-prod:wf10:
  stage: deploy
  environment:
    name: prod
  only:
    - /^v-.*$/
  script:
    - mvn clean package wildfly:undeploy wildfly:deploy -B -U -P wildfly10 -Dmaven.test.skip=true -Dwildfly10.servergroup=terp
  tags:
    - prod

# Manually generate project report for WildFly 10, report is stored for 2 weeks
generate-report:wf10:
  stage: manual
  script:
    - mvn clean test site:site -B -U -P wildfly10
    - mv target/site ./
  artifacts:
    name: report-wf10
    expire_in: 2 weeks
    paths:
    - site
  tags:
    - test
  when: manual

# Manual deploy tagged release to WildFly 10 servergroup servicedesk in PROD
deploy-prod:wf10:
  stage: deploy
  environment:
    name: prod
  only:
    - /^v-.*$/  # 开启Tag触发校验
  script:
    - mvn clean package -B -U wildfly:undeploy wildfly:deploy -Dprofile.wildfly10 -Dmaven.test.skip=true -Dwildfly10.servergroup=terp
  tags:
    - prod
  when: manual 

二、手动触发流水线操作步骤

  • 进入GitLab项目的CI/CD > 流水线页面,点击运行流水线
  • 在变量输入区域填写两个必填值:
    • RELEASE_VERSION:无SNAPSHOT的发布版本号(需匹配现有Tag规则,例如v-1.0.0)
    • NEXT_DEVELOPMENT_VERSION:下一个开发阶段的版本号(允许带SNAPSHOT,例如1.0.1-SNAPSHOT)
  • 选择要触发的分支(通常选master分支),点击运行
  • 流水线会自动完成版本准备、Tag推送,后续自动触发对应环境的发布和部署任务

三、核心逻辑说明

  • 版本号校验:脚本内置SNAPSHOT检查,确保发布版本不会带快照标识
  • 自动触发后续流程:推送Tag后,GitLab会自动触发publish-release:wf10和对应环境的部署任务
  • 完全手动可控:版本准备阶段为手动触发,避免误操作导致的非预期发布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:36:20