如何在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
相关产品推荐
相关产品推荐

