使用Maven Release Plugin进行版本发布
文章目录
当工程上线时,需要发布正式版本,如果是多模块结构,如果一个个工程手工去修改,费时费力,本文主要介绍如何使用maven-release-plugin插件,结合git进行版本发布。
配置
pom.xml
<project>
<repositories>
<repository>
<id>maven-public</id> (1)
<url>https://repo.liming.pub/nexus/repository/maven-public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-public</id> (1)
<url>https://repo.liming.pub/nexus/repository/maven-public/</url>
</pluginRepository>
</pluginRepositories>
<distributionManagement>
<repository>
<id>maven-releases</id> (2)
<url>https://repo.liming.pub/nexus/repository/maven-public-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<url>https://repo.liming.pub/nexus/repository/maven-public-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<!-- ... -->
<scm>
<developerConnection>scm:git:http://code.liming.pub/test.git</developerConnection>
<tag>HEAD</tag>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<autoVersionSubmodules>true</autoVersionSubmodules>
<arguments>-DskipTests -Pmaven-public</arguments> (3)
<scmCommentPrefix>「版本发布」</scmCommentPrefix>
</configuration>
</plugin>
</plugins>
</build>
<!-- ... -->
</project
-
下载仓库ID
-
发布仓库ID
-
maven命令额外参数
settings.xml
<settings>
<servers>
<server>
<id>maven-releases</id> (1)
<username></username>
<password></password>
</server>
</servers>
</settings>
-
仓库ID,对应pom.xml中的
执行
准备
命令: mvn release:prepare
-
检测是否有未提交的代码。
-
测是否有snapshot依赖。
-
修改工程的版本号为release版本(提示输入)。
-
为当前代码打上一个git的tag(提示输入),提交代码至远程仓库。
-
修改pom为下一个snapshot版本(输入提示),提交至远程仓库。
--batch-mode
命令行非互动模式。 ` -Dresume=false` 忽略上一次prepare留下的backUp文件。
回滚
命令: mvn release:rollback
Note
|
本地tag不会删除,需要执行“git tag -d <你的tag名称>” 来删除本地tag |
-
发布
mvn perform
与Gitlab-CI整合
因为Gitlab-CI是基于提交自动触发,而prepare阶段会有两次push提交,如果有提交触发的Job,如快照发布:mvn:deploy,那么perform阶段时就会失败(nexus不允许重复发布release)。所以gitlab发布时需要特殊处理:
-
配置手动触发模式
gitlab-ci.ymlrelease: stage: release script: - repo_public_release when: manual tags: - deploy
repo_public_releaseset -e set -x cd /home/gitlab-runner/releases mkdir -p ${CI_PROJECT_NAMESPACE} cd ${CI_PROJECT_NAMESPACE} if [[ ! -e ${CI_PROJECT_NAME} ]];then echo "克隆${CI_PROJECT_NAME}工程" git clone git@code.liming.pub:${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}.git fi cd ${CI_PROJECT_NAME} set +x if [[ -e release.properties ]];then echo "上次发布未成功,需要手工处理!" exit 1 fi set -x git checkout ${CI_COMMIT_REF_NAME} git reset --hard origin/${CI_COMMIT_REF_NAME} git pull set +x commit_message=$(git log --pretty=format:'%cn#%cd#%s' -1|cut -d# -f3|awk '{print $1}') if [[ "${commit_message}" == "「版本发布」prepare" || "${commit_message}" == "「版本发布」rollback" ]];then echo "当前分支不具备发布条件!" exit 1 fi echo "开始发布版本" mvn release:prepare --batch-mode mvn release:perform --batch-mode
-
自动触发的剔除CI提交
commit_message=$(git log --pretty=format:'%cn#%cd#%s' -1|cut -d# -f3|awk '{print $1}') if [[ "${commit_message}" == "「版本发布」prepare" || "${commit_message}" == "「版本发布」rollback" ]];then echo "版本发布自动提交,忽略..." exit 0 fi
问题
-
maven-release-plugin默认都是基于同一个分支,即master分支,如果结合gitflow多分支策略时,如何操作?