Jenkins-作业A设置作业B的内部版本号,而无需从磁盘重新加载项目配置

Jenkins-作业A设置作业B的内部版本号,而无需从磁盘重新加载项目配置,jenkins,Jenkins,我想让一个Jenkins作业控制另一个作业的构建编号,但不需要从磁盘重新加载整个项目配置。我已经看到,直接更新目标作业的nextBuildNumber文件是很容易的(我可以将此作为作业a的构建步骤来执行),但这不会立即生效。重新启动Jenkins,甚至从磁盘重新加载Jenkins配置需要的时间太长,只能在没有正在进行的构建时进行 我在Manage Jenkins>脚本控制台上运行了下面文章中提到的groovy脚本。同一篇文章还建议将脚本保存为文件并从CLI运行。它可以从构建步骤运行吗 我希望作业

我想让一个Jenkins作业控制另一个作业的构建编号,但不需要从磁盘重新加载整个项目配置。我已经看到,直接更新目标作业的nextBuildNumber文件是很容易的(我可以将此作为作业a的构建步骤来执行),但这不会立即生效。重新启动Jenkins,甚至从磁盘重新加载Jenkins配置需要的时间太长,只能在没有正在进行的构建时进行

我在Manage Jenkins>脚本控制台上运行了下面文章中提到的groovy脚本。同一篇文章还建议将脚本保存为文件并从CLI运行。它可以从构建步骤运行吗

我希望作业A确定作业B的下一个版本号,并将其设置为作业B可以使用所需的版本号运行(当天晚些时候)

也许我应该澄清一下。我不熟悉Groovy,所以我正在研究各种构建步骤选项,如“执行Windows批处理命令”,我对这些选项有很多经验。我可以看到一个“调用Gradle脚本”选项,所以我想知道是否有一个插件可以运行Groovy脚本

出现此要求的原因是,我们正在为两个不同的平台编译一个产品。我们希望几乎同时为两个平台编译代码库,使用两个作业(A和B),这两个作业都将更新构建中包含的JIRA案例。我们认为,让这两个作业以相同的版本号运行会更容易混淆,这样,当我们讨论版本75中要解决的特定问题时,我们就不必通过声明完整的作业名称来限定该问题。如果JOB-A build#75和JOB-B build#75都是在同一天从同一个代码库编译的,那么我们可以测试和比较这两个版本的结果,比版本号不同步时的混乱程度要小得多


显然,短期内,我们将使用Set Next Build Number插件手动保持版本号同步,但如果可能,我们希望自动执行此操作。

取决于您是否正在使用:

假设您不是,这将可以:

你需要这样做。将其放在“执行系统Groovy脚本”步骤中。确保选择系统groovy。这将在主服务器上执行,在主服务器上存储作业配置和元数据,这样您就可以访问Jenkins内部结构和数据

我建议您应该真正使用上述选项,而不是依赖于通过脚本或手动“保持两个作业同步”。然后,可以将要使用的标签作为参数从第一个作业传递到第二个作业。这也需要插件

您甚至可以使用
${BUILD\u DATE\u FORMATTED}
${BUILD\u TIMESTAMP}


Postdate:从另一个角度考虑问题空间,即在不同平台上(同时)运行2+构建,有一个插件:。您可以在多个节点上以freeatyle作业的形式运行它,或者很好地将其描述为。不确定这将如何与JIRA结合。

我将更改脚本以使用readFile和writeFile步骤,而不是Java流,但否则它应该在管道中工作(然后可以从cli触发)。我很好奇,你为什么需要这种行为?谢谢你的回答,斯梅姆。我在文章中加入了更多的上下文。你有没有看过并行构建步骤?这比设置一个作业的构建编号要容易得多(因为该编号通常应该是递增的)。此外,jenkins管道(尤其是脚本化管道)只是groovy脚本。Jenkins提供了一些功能,它有一些限制(有利于可重启),但最后它只是groovyThank,smelm。我们的生产系统中没有使用管道。我收到的建议已经引起了我的一些思考。我需要留出一点时间在我的test Jenkins实例上尝试一些。我会回来的。谢谢你的评论。我没有使用版本号插件。我对从链接帖子上读到的groovy脚本相当满意。我很乐意尝试您建议的groovy代码片段,但是我可以在构建步骤中运行它吗?也许我得单独研究一下。伊恩,谢谢你最新的详细建议。我们在生产系统中不使用管道,所以我将在测试实例上进行尝试。添加了另一个选项。在你评估之前,a+1怎么样?我需要提高我的声誉!由于我的“分数”低于15,我的+1显然无法公开获取。我非常感谢你的关注和反馈。回答得很好,伊恩。非常感谢你。正如您所建议的,我安装了Groovy插件,并将Groovy代码放在“执行系统Groovy脚本”中作业A的步骤:在此之前是执行Windows批处理命令步骤:echo%BUILD\u NUMBER%>C:\Users\davidb\.jenkins\jobs\JOB\nextBuildNumber,之后我有一个BUILD other projects操作来运行作业B。结果是,只要作业A的生成编号最初高于作业B的下一个生成编号,JOB_A将在JOB_B之后运行,两个JOB将具有相同的生成编号。
[ X ] Create a formatted version number
Build Display Name [ X ] Use the formatted version number for build display name.
def NextNumber=42
job=Jenkins.instance.getItemByFullName('path/to/jobName')
job.nextBuildNumber = NextNumber
job.save();