当前位置: 首页 > 知识库问答 >
问题:

可以使用Jenkins和Groovy循环遍历构建列表(每个构建都有参数)并启动它们吗?

班建义
2023-03-14

可以使用Jenkins和Groovy循环浏览Visual Build Pro构建列表(每个构建具有不同的参数)并启动指定的构建作业吗?每个构建需要2个不同的VBP脚本,一个用于标记,另一个用于构建。

没有必要让这些构建并行运行,让它们按顺序运行就可以了。每个构建作业都将在处理如下所示的输入文件时启动,每个构建作业都被赋予正确的Visual Build Pro bld脚本名称,以及所有其他所需的参数。

一个假设的输入文件,包含有关所需构建集的信息,将是:

BLD_SCRIPT_NAMEPLAT_NAMENUM_MAJORNUM_MINORNUM_MAINTBLD_LABELBLD_TYPE

Labeling.bld水星US 14 2 0 v10000 Dev
ScriptMer.bld水星US 14 2 0 v10000 Dev
Labeling.bld海王星GB 14 2 1 v10001 Rel
ScriptNep.bld海王星GB 14 2 1 v10001 Rel
Labeling.bldMinerva AU 14 4 0 v10002 Test
ScriptMin.bldMinerva AU 14 4 0 v10002 Test

我在互联网上看到了讨论Jenkins /Groovy迭代的页面,但没有一个适用于我上面描述的构建作业的迭代(每个作业都有参数)问题。

如果您有时间,请提供链接/Jenkins示例/Groovy代码片段,我将不胜感激。

共有3个答案

谷星文
2023-03-14

注:这个问题在CodeRanch上交叉发布。以下是我在那里看到它时的回答:

Groovy插件可以做到这一点。例如:

import hudson.model.*

def csv = "job-1,a\njob-2,b"

csv.eachLine { row ->
    def cols = row.split(',')
    def jobName = cols[0]
    def paramValue = cols[1]

    def params = [new StringParameterValue('paramName', paramValue) ]

    def job = Hudson.instance.getJob(jobName)
    println "Launching ${job.fullName}"
    def future = job.scheduleBuild2(0, new Cause.UpstreamCause(build), new ParametersAction(params))
    future.get()
} 

对于有实际依赖关系的工作,我建议使用上游/下游依赖关系来强制订单。

裴存
2023-03-14

我们在建造过程中会这样做,但我怀疑不是以你的思维方式

我们有一个用groovy编写的build manager框架(这是在内部编写的,我不能分享),它有一个build对象,它本身就是一个配置对象列表。我们创建一个对象,为构建中的每个步骤提供构建信息(相关构建文件、参数等),并将这些对象添加到列表的末尾。然后在这个配置脚本的末尾,我们遍历列表,调用一个build manager对象,并将其传递给每个build config对象。它解析对象并使用相关信息启动每个构建(使用MSBuild)。

我们仍然需要做一些跑腿的工作,在配置文件中定义要单独构建的每个项目,但是一旦框架到位,这就很简单了。添加配置的块如下所示(名称和地点已更改以保护无辜者):

buildObject.addConfiguration(
targets:["project\build\target"],
configs:["Release", "Debug"],
platforms:platform you're building on
filepaths:[],
solutions:["path\to\solution\file"],
buildphases:["1"]
)

我们有多个构建阶段,构建阶段编号控制它在哪个阶段运行。

据我所知,jenkins中没有一种内置的方法来实现这一点,除非你想使用参数化插件,为每个构建定义一个作业,并让某种顶级作业触发所有这些作业。如果你想把它保留在一个构建工作中,你必须找到一个别人做的,或者滚动你自己的groovy框架并定义每个构建。

梁泰
2023-03-14

在我的项目中,我使用groovy从JobA触发JobB(参数化)。

JobA有类似的脚本,用于生成用于调试和发布的构建。

value=Debug,D1,D2;Release,R1,R2;Prod,P1,P2

String[] env=value.split(';')

for (int i=0;i < env.length;i++){
     String[] data=env[i].split(',')
     build("JobB", Param1:data[0], Param2:data[1], param3:data[2])
}
 类似资料:
  • 问题内容: 我们将擦除Mac Mini并从头开始重新安装新的XCode和Jenkins。我们最近才开始使用Slack,我们希望使用它来接收Jenkins构建通知并启动Jenkins构建。 因此,Slack通知没有问题。一切正常。 当我尝试使用Slack开始构建时,出现了我的问题。 本教程(http://sonnguyen.ws/how-to-trigger-a-jenkins-build-from

  • 问题内容: 我有一个使用Perforce插件的参数化作业,想检索构建参数/属性以及由Perforce插件设置的p4.change属性。 如何使用Jenkins Groovy API检索这些属性? 问题答案: 关于参数: 首先看这个答案要获取项目的所有构建的列表(根据该答案获得): 当你发现你特别的身材,你需要得到类型的所有行动ParametersAction用。然后,您查询返回的对象以获取您的特定

  • 问题内容: 情况:我有一个包含多个子对象和子子对象的大对象,其属性包含多个数据类型。为了我们的目的,该对象看起来像这样: 我需要遍历此对象并构建一个显示层次结构的键的列表,因此该列表最终看起来像这样: 我有这个函数,它确实遍历对象并吐出键,但不是按层次排列: 问题答案: 如果属性为原始类型,则我将存储一个字符串,然后将其输出:

  • 问题内容: 以下是提供输出的代码段:。由于访问列表中的数字3,我期望获得输出。在线给出的解释是“每次迭代中更改的价值”,但我不太了解如何或为什么。任何解释都很好! 问题答案: 这里发生的是一个列表在循环过程中发生了变异。 让我们考虑以下代码片段: 输出为: 每次迭代: 从内部指针当前指向的位置读取值 立即将其分配给列表中的最后一个元素 在最后一个元素打印在标准输出上之后 就像这样: 内部指针指向第

  • 问题内容: 我已将dsl作业配置为删除未引用的作业,并且我想保留以下内容: 我试图做到这一点: Jenkins创建job1,但是在创建job2时将其删除。如何遍历列表以创建多个作业? 也许我可以构建multibranchPipelineJob objs和listView.jobs的映射/闭合,然后以某种方式将其传递给dsl? 问题答案: 我愚蠢的工作本身实际上已经创建好,只是列表视图代替了他们。之

  • 问题内容: 我想创建一个循环/循环链接列表,其中列表的尾部将指向列表的头部。那么,在创建列表之后,是否可以使用和修改尾节点以使其具有循环/循环性?如果是这样,您能告诉我一些代码如何发生吗? 如果无法使用,应如何创建自己的循环/循环链表实现?您能否向我展示此实现的外观框架? 如果您需要更多详细信息,请让我知道,我将消除任何混乱。 问题答案: