【问题标题】:Releasing from Nexus staging repository via Jenkins/Maven通过 Jenkins/Maven 从 Nexus 暂存存储库发布
【发布时间】:2015-06-06 13:41:14
【问题描述】:

我有一个 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 暂存存储库。

由于我们在 CI 类型的环境中工作,我们可能有一百个(或更多)暂存版本。时机成熟时,QA 团队希望将某个构建提升到“以后”的环境(想想 QA、SIT 或其他什么。这里的环境更像是一种锁定状态。)

我想要的工作流程是这样的:

  1. 有人决定将 Build 1.0.1357 升级为 QA
  2. 他们进入 Jenkins,进入“提升为 QA”的工作
  3. 他们会在下拉列表中看到 Nexus Staging Repository 中所有可能构建的列表。他们选择一个,然后点击“运行”按钮。
  4. 该工件从 Nexus Staging “发布”到 Nexus Releases,并进一步部署到 QA 环境。 (我并不关心“并部署到 QA”部分——我已经知道如何做到这一点。为了我的故事的完整性,将其包含在此处。)

我已经知道我可以从命令行执行此操作,并且它正在工作:

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。我该怎么做呢?

【问题讨论】:

  • 请注意:我不想使用 SNAPSHOT。

标签: maven jenkins nexus


【解决方案1】:

我正在做的是解析

的输出
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."

【讨论】:

  • 我重新设计了这个答案,在可扩展选择参数(来自可扩展选择插件)中使用“Groovy 系统脚本”来获得我想要的下拉菜单,并推广我的暂存存储库发布。
【解决方案2】:

我认为使用 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]

上述所有步骤都是使用 Maven 发布插件自动执行的,并通过 jenkins 作业运行。

我的工作有上述设置。


OP 声明“SNAPSHOT”不在图片中。 在这种情况下,这篇文章回答了查询:automate deployment to sonatype's oss maven repository [查看第二个答案]

【讨论】:

  • 我没有提到 SNAPSHOT,因为我不想使用它们。我想使用 Nexus Staging 存储库,并将编号构建提升到 Releases 存储库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2022-01-23
  • 2017-09-18
  • 1970-01-01
  • 2019-01-14
  • 2018-01-12
相关资源
最近更新 更多