我的Jenkins文件能否只包含属性而不包含piepeline代码
我遇到的所有关于编写声明性管道的教程都建议在Jenkinsfile中包含阶段和步骤 但我注意到我的一个大四学生写的是相反的方式。他使用Jenkins文件只是为了定义所有属性,也就是说,他的Jenkins文件只是一个属性文件,仅此而已 在定义管道时,他利用了共享库的概念,将管道代码写到vars文件夹中的一个文件中。我猜不出这种方法背后的智慧 在互联网上,我从未遇到过类似的事情。我的Jenkins文件能否只包含属性而不包含piepeline代码,jenkins,jenkins-pipeline,devops,Jenkins,Jenkins Pipeline,Devops,我遇到的所有关于编写声明性管道的教程都建议在Jenkinsfile中包含阶段和步骤 但我注意到我的一个大四学生写的是相反的方式。他使用Jenkins文件只是为了定义所有属性,也就是说,他的Jenkins文件只是一个属性文件,仅此而已 在定义管道时,他利用了共享库的概念,将管道代码写到vars文件夹中的一个文件中。我猜不出这种方法背后的智慧 在互联网上,我从未遇到过类似的事情。 我们高度赞赏这方面的任何指导。我是詹金斯世界的初学者。如中所示,这种方法(我也在使用)允许: 将文件内容保持在最低限度
我们高度赞赏这方面的任何指导。我是詹金斯世界的初学者。如中所示,这种方法(我也在使用)允许:
- 将文件内容保持在最低限度
- 执行执行特定作业的标准方式(如共享库中的编码)
Closure.DELEGATE_FIRST
还有一个“构建器模式”技巧,它允许Jenkinsfile看起来更像一个配置文件而不是一个程序,但这更复杂,更容易出错,因此不推荐使用
他接着问:
为什么博主更喜欢这种方式,而在官方文件中它实际上是令人沮丧的
我检查过了,我们也在使用闭包。先委派
原因在于“允许Jenkins文件看起来更像配置文件而不是程序”部分 这避免了我们必须定义JSON块,并将参数保留为一系列易于阅读的
key=value
行
对共享库的调用是:
#!/usr/bin/env groovy
@Library("MyLibraries") _
MyLibrary {
config1 = 'value1'
config2 = 'value2'
...
}
{
anotherConfigA = 'valueA'
anotherConfigB = 'valueB'...
astep(
...
)
}
然后,MyLibraries/vars/MyLibrary.yml
中的jenkins管道模板可以使用这些闭包块:
def call(Closure configBlock, Closure body) {
def config = [:]
configBlock.resolveStrategy = Closure.DELEGATE_FIRST
configBlock.delegate = config
configBlock()
astep(
...
){
if (body) { body() }
}
}
非常感谢你。浏览了您提供的文档。据我所知,文件建议反对使用这种模式。我的理解是基于这样一句话:还有一个“构建器模式”技巧,首先使用Groovy的Closure.DELEGATE_,它允许Jenkinsfile看起来更像一个配置文件而不是一个程序,但这更复杂,更容易出错,因此不推荐使用。让我知道我的理解是否正确。@AsifKamranMalick我明天必须检查一下,但我不相信我们会使用Groovy的闭包。委托\u第一个技巧。没有问题。仅供参考:My senior首先在共享库中使用Closure.DELEGATE_,完全如中所示,并通过配置读取属性。但问题又一次出现了:为什么博主更喜欢这种方式,而官方文件却不鼓励这样做。这些是我心中的疑问。再次感谢您的时间。@AsifKamranMalick我已编辑了答案以解决您的问题。是的,但请尝试在您的Jenkins文件中使用json部分,然后很快选择首选项;)