通过Jenkins / Maven从Nexus登台存储库发布

时间:2015-04-01 19:03:00

标签: maven jenkins nexus

我有一个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,或者其他什么。环境在这里更像是一个锁定状态。)

我想要的工作流程是:

  1. 有人决定将Build 1.0.1357提升为QA
  2. 他们进入詹金斯,去“促进QA”工作
  3. 在下拉列表中向他们显示Nexus Staging Repository中所有可能构建的列表。他们选择一个,然后单击“运行”按钮。
  4. 该工件从Nexus Staging“发布”到Nexus版本,并进一步部署到QA环境。 (我并不关心“并且部署到QA”部分 - 我知道如何做到这一点。为了完整我的故事,这里包括它。)
  5. 我已经知道我可以从命令行执行此操作,并且它正在运行:

    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。我怎么能完成这个?

2 个答案:

答案 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版本号,而是可以通过发布插件管理增量版本号。

总结一下:

  1. 假设您正在使用1.0版本。
  2. 所以你把pom版本的初始分支作为1.0-0-SNAPSHOT。这里1.0代表发行号,' -0'表示我们计划部署的下一个标签构建号。
  3. 现在,您已准备好部署或希望您的QA团队进行测试。您使用maven发布插件运行作业或脚本来创建标记。将使用版本1.0-0创建标记构建[删除快照以便将其发布到存储库]并上传到存储库,分支中的版本也将增加到1.0-1-SNAPSHOT [所以现在分支中的更改将被更改为如果需要进行任何更改,则发布并部署1.0-1]
  4. 以上所有步骤均使用Maven发布插件自动执行,并通过jenkins作业运行。

    我的工作有以上设置。


    OP表示' SNAPSHOT'不在图片中。 在这种情况下,这篇文章回答了这个问题:automate deployment to sonatype's oss maven repository [看第二个答案]