我正在尝试编写一个Jenkins作业(例如CopyJob),该作业将复制另一个作业(在此作业中使用Multijob插件),并且还将其所有下游作业复制到新作业中。想法是要有一个Multijob作为模板,以便可以将其复制到新的Multijobs中(例如,用于特定的分支或功能)。
看到:
MultiJob_Template
|
+-- Sub1_Template
+-- Sub2_Template
+-- Sub3_Template
CopyJob (Parameters: NewSuffix)
当手动触发“ CopyJob”时,它将使用新的SubJobs创建一个新的MultiJob:
MultiJob_BranchXYZ
|
+-- Sub1_BranchXYZ
+-- Sub2_BranchXYZ
+-- Sub3_BranchXYZ
到目前为止,我已经成功复制了Multijob和Copying
Subjobs,但是我找不到找到使新的Multijob真正依赖于新的Subjobs的方法。到目前为止,我的代码(用于CopyJob groovy脚本)是:
import jenkins.model.*
import com.tikal.jenkins.plugins.multijob.*
def templateJobName = "MultiJob_Template"
// Retrieve parameters
def newSfx = build.buildVariableResolver.resolve("NewSuffix")
def templateJob = Jenkins.instance.getJob(templateJobName)
// copy Multijob
def newJob = Jenkins.instance.copy(templateJob, 'Multijob_' + newSfx)
newJob.save()
// copy all downstreamjobs
def subs = newJob.getDownstreamProjects()
for (s in subs) {
def oldSubJob = Jenkins.instance.getJob(s.getDisplayName())
def newSubJob = Jenkins.instance.copy(oldSubJob, s.getDisplayName().replaceFirst(/Template/, newSfx))
newSubJob.save()
// how to update the MultiJob_newSfx DownstreamJoblist to use the newSubJob?
// ????
}
我实际上设法自己解决了。也许还有其他方法,但是最好逐步浏览构建器列表,然后逐步浏览MultiJob模板的PhaseJobs列表。
MultiJob插件本身的代码为该解决方案提供了帮助。
import jenkins.model.*
import com.tikal.jenkins.plugins.multijob.*
def jenkinsInstance = jenkins.model.Jenkins.instance
def templateJobName = "Multijob_Template"
// Retrieve parameters
def newSfx = build.buildVariableResolver.resolve("NewSuffix")
// create new MultiJob
def templateJob = Jenkins.instance.getJob(templateJobName)
def newJob = Jenkins.instance.copy(templateJob, 'Multijob_' + newSfx)
newJob.save()
// get MultiJob BuildPhases and clone each PhaseJob
def builders = newJob.getBuilders()
builders.each { builder ->
builder.getPhaseJobs().each() { pj ->
println "cloning phasejob: " + pj.getJobName()
def subTemplate = Jenkins.instance.getJob(pj.getJobName())
def newSubJob = Jenkins.instance.copy(subTemplate, pj.getJobName().replaceFirst(/Template/, newSfx))
newSubJob.save()
pj.setJobName(newSubJob.getDisplayName())
}
}
// update dependencies
jenkinsInstance.rebuildDependencyGraph()
问题内容: 我正在使用詹金斯。 詹金斯(Jenkins)有上游工作:A 詹金斯(Jenkins)有下游工作:B A的控制台日志输出为: B的控制台日志输出为: 我想要得到的是: 有什么办法,我可以在作业A的控制台日志中获取作业B的控制台输出,然后确定作业“ A”是否成功(使用日志解析/ grep表示故障/错误等关键字)。 问题答案: 不确定您要达到的目标,但是看起来有些人为。查看以下方法是否满足您
我不太确定该怎么写,但我有一个名为的工作,它使用CloudConvert将上传的文件(例如PDF)转换为JPG。 单独使用,效果很好。我可以上传一个文件,它将被保存到S3,然后CloudConvert获取S3文件,转换它并上传它。完美。 有人知道我可以尝试什么吗?我甚至不确定从哪里开始调试它。
Jenkins场景详细信息: ====================== -Jenkins中构建执行器的数量(在主/从上):3 -UpStream作业:USJobs,此作业可以在任何构建执行器上运行 -DownStream作业:DSJobs USJob在构建步骤中有这个:回声“生日快乐詹姆斯”,完成这项工作需要5秒钟 DSJob在构建步骤中有这个:回显“詹姆斯邦德死了”,完成这项工作 需要5秒钟
问题内容: 我要完成的工作是从分支中签出代码,将其合并到分支,构建,运行测试,如果测试成功则推送到分支。 测试应在需要的单独工作中运行。 我当前的设置如下: Job 从中检出,将其合并并构建 作业会在“ 后期制作”步骤中 触发作业(需要预先创建) 如果成功,则在 发布构建操作中推送到分支 __ 我尝试使用 Copy Artifact Plugin, 但是问题在于,在 Post构建步骤中 触发时,我
问题内容: 我有一个名为 buildall 的管道作业,如下所示: 该 buildall 作业有25个参数。我想将所有 buildall 的参数传递给 job1 。有没有一种简单的方法可以代替手动指定每个参数呢? 在此问题中:向下游作业传递管道参数是一个子问题,但从未得到回答: 甚至更好的是,有没有一种麻烦的方法可以将所有管道参数传递给下游作业。 我有同样的问题。 问题答案: 以下似乎有效(尽管我
问题内容: 我正在使用Jenkins DSL插件自动为git项目的所有分支创建构建作业。DSL插件由Web挂钩触发,以便在创建新分支后立即运行。每个分支生成的生成作业也被配置为由Web挂钩触发。 当前设置的问题是,仅在第二次提交后才执行构建。第一次提交将触发Jenkins DSL插件来创建相应的Jenkins作业,然后第二次提交将触发新创建的作业。 有什么方法可以通过DSL插件创建Jenkins作