我有一个Java项目。某些部分是jar
个文件,有些是war
个文件。我还有Jenkins和Nexus Pro,当团队中的开发人员提交SVN时,Jenkins构建会自动启动。
使用Maven版本插件,我可以mvn versions:set -DnewVersion=1.0.$SVN_REVISION
作为预构建步骤,然后mvn clean test deploy
。在此过程结束时,我已将my-artifact-1.0.1234.jar
上传到我的Nexus Pro Staging存储库。
由于我们在CI类型的环境中工作,我们可能会有一百个(或更多)分段构建。当时机成熟时,QA团队希望将某个构建推广到“后期”环境(想想QA,或SIT,或者其他什么。环境在这里更像是一个锁定状态。)
我想要的工作流程是:
我已经知道我可以从命令行执行此操作,并且它正在运行:
mvn nexus-staging:rc-list -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus
mvn nexus-staging:rc-release -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus -DstagingRepositoryId=abcd-1000 -Ddescription="Release from CLI."
我遇到的问题是你必须在命令行中指定stagingRepositoryId
。我怎么能完成这个?
答案 0 :(得分:3)
我正在做的是解析
的输出mvn nexus-staging:rc-list -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus
然后只需将您需要的存储库与您的特定逻辑匹配。对我来说使用python是最好的解决方案(但你可以用任何语言自己完成):
output = subprocess.check_output("mvn nexus-staging:rc-list -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus")
for line in output.split('\n'):
if "repo" in line:
stagingRepositoryId = "repo-" + line[8:23]
将输出视为
[INFO] repo_qa-3514 OPEN Implicitly created (auto staging).
[INFO] repo_qa-3518 Implicitly created (auto staging).
[INFO] repo_qa-3521 OPEN Implicitly created (auto staging).
[INFO] repo-2011 OPEN Implicitly created (auto staging).
解析后,您将运行第二个命令:
mvn nexus-staging:rc-release -DserverId=nexus -DnexusUrl=http://my.nexus.ip:8081/nexus -DstagingRepositoryId=repo-2011 -Ddescription="Release from CLI."
答案 1 :(得分:0)
我认为通过使用SNAPSHOT和发布存储库可以轻松实现您要做的事情。 因此,您在SNAPSHOT构建中进行正常开发,一旦准备好进行测试,就可以创建一个标记构建,从POM中的版本中删除SNAPSHOT。所有这些都可以通过jenkins和Nexus来实现。
此外,您的版本中不需要SVN版本号,而是可以通过发布插件管理增量版本号。
总结一下:
以上所有步骤均使用Maven发布插件自动执行,并通过jenkins作业运行。
我的工作有以上设置。