如何从 Java 程序调用 Jenkins 中的“执行 Maven 发布”?

Posted

技术标签:

【中文标题】如何从 Java 程序调用 Jenkins 中的“执行 Maven 发布”?【英文标题】:How to call "Perform Maven release" in Jenkins from a Java program? 【发布时间】:2013-11-06 14:46:00 【问题描述】:

我正在编写一个小 java 程序来执行复杂代码组织的完整发布。 简而言之,我的程序需要发布(“执行 Maven 发布”)一个项目“ProjectA”THROUGH Jenkins。然后,一旦此发布过程完成并成功,程序将检测生成的新版本号。然后它将这个新版本号更新到其他项目的 pom 文件的属性中(比如依赖于该 ProjectA 的“ProjectB”和“ProjectC”,并在 SVN 中提交这些修改过的文件。然后我的程序将触发“在项目 B 和 C 上执行 Maven 发布工作。

我确切地说我希望发布过程在 Jenkins 内部/由 Jenkins 执行,因为我想在历史中拥有这些操作的痕迹......我不想直接使用“maven-release-plugin "(在 Jenkins 之外),因为在 Jenkins 构建的历史中不会有任何痕迹......

为此我需要从这个 Java 程序调用 Jenkins 中可用的“执行 Maven 发布”操作。我该怎么做?(我已经编写了所有其他步骤)。

在我的测试期间,我设法将“构建”作业称为“纯”Jenkins,如下所示:

WindowsCommandLineExecutor windowsCommandLineExecutor = new WindowsCommandLineExecutor();
int exitCode = windowsCommandLineExecutor.execCmd("java -jar lib/jenkins-cli.jar -s http://MyJenkinsUrl.com:1234/ build \"MyProjectName\" -s --username MyJenkinsUserName --password MyJenkinsPassword", true);

但“执行 Maven 发布”工作(如果我没记错的话)仅在 Jenkins 中可用,因为我们集成了插件“Maven-release-plugin”,它不是“纯粹的”Jenkins 工作(超出-盒子)...这解释了为什么在这个 JenkinsCLI 工具中没有任何命令,例如“performRelease”:http://javadoc.jenkins-ci.org/?hudson/cli/CLICommand.html

有什么想法,有什么建议吗?

【问题讨论】:

您可以创建一个特殊的发布作业,只需调用相应的 maven 目标 release:prepare release:perform 并使用所需的属性。 谢谢伦纳德。这不是我在 Jenkins 中已经拥有的,我已经在“配置”、“模块”和“颠覆轮询日志”链接下看到了“执行 Maven 发布”吗?让我检查一下...无论如何,我将不胜感激任何其他真正直接调用现有 Jenkins“执行 Maven 发布”的解决方案,因为我没有真正授权也不热衷于在这个企业范围的詹金斯中创建新闻工作... 【参考方案1】:

一种选择是使用 HTTP Post 到 Jenkins 作业,如此处所述Trigger Maven Release Remotely

我刚刚记录了如何从一个 Jenkins 工作到另一个工作,因此您也可以参考这篇文章了解更多详细信息 Trigger "perform maven release" of a jenkins job from another job

【讨论】:

以上是关于如何从 Java 程序调用 Jenkins 中的“执行 Maven 发布”?的主要内容,如果未能解决你的问题,请参考以下文章

如何从ubuntu删除jenkins

jenkins干嘛用的

如何从 Java 中的 C# dll 调用函数?

如何将 json 参数从 Postman 发送到 Jenkins?

我如何更改.properties文件中的值并在jenkins中使用此命令运行构建

bat脚本如何调用JAVA程序