Jenkins 将触发器块传递给共享库管道



我有一个共享库,其中包含一个声明性管道,许多作业正在使用该管道进行构建。 但是,我希望能够将触发器块从 Jenkinsfile 传递到共享库,因为我想通过 Cron,一些我想通过 SNS 触发的作业,而另一些则使用上游作业触发器。

有没有办法做到这一点?我尝试过的一切都失败了

我试过了

#Jenkinsfile
@Library('build') _
buildAmi{
OS = "amazonlinux"
owners = "amazon"
filters = ""Name=name,Values=amzn-ami-hvm-*-x86_64-gp2""
template = "linux_build_template.json"
trigger = triggers {
cron('0 H(06-07) * * *')
}
#Shared Lib
pipeline {
$buildArgs.trigger

失败

Not a valid section definition

还尝试仅将 cron 时间表传递到共享库中,例如

triggers {
cron("${buildArgs.cron}")
}

但这给出了错误

Method calls on objects not allowed outside "script" blocks

尝试了其他各种事情,但似乎声明式风格需要一个触发器块,里面只有触发器。

有谁知道实现我想要做的事情的方法吗?

注释代码太多:

我们想将一些预设属性与 jenkinsfile 属性合并。 这是使其工作的方法,因为属性方法只能调用一次。

我们在触发器信息中使用了额外的管道参数:

詹金斯文件:

mypipeline (
pipelineTriggers:   [pollSCM(scmpoll_spec: '0 5,11,15,22 * * 1-5')],
)

然后在共享库中

@Field def pipelineProperties = [
disableConcurrentBuilds(abortPrevious: true),
buildDiscarder(logRotator(numToKeepStr: '10', artifactNumToKeepStr: '0'))
]
def pipelineTriggersArgs = args.pipelineTriggers
def setJobProperties() {
def props = pipelineProperties
def str = ""
pipelineProperties.each { str += (blue + it.getClass().toString() + it.toString() + "n") }
if (pipelineTriggersArgs) {
if (debugLevel > 29) {
def plTrig = pipelineTriggers(pipelineTriggersArgs)
str += (mag + "args: " + pipelineTriggersArgs.getClass().toString() + "tt" + pipelineTriggersArgs.toString() + "n" + off)
str += (red + "expr: " + plTrig.getClass().toString() + "tt" + plTrig.toString() + "n" + off)
echo str
}
props?.add(pipelineTriggers(pipelineTriggersArgs))      // pass param with list as the arg
}
properties(props)
}

这是合并预设和参数的唯一方法,因为属性无法覆盖。 不完全是答案,但我认为是一种解决它的方法。

相关内容

  • 没有找到相关文章

最新更新