我的Jenkins文件能否只包含属性而不包含piepeline代码

我的Jenkins文件能否只包含属性而不包含piepeline代码,jenkins,jenkins-pipeline,devops,Jenkins,Jenkins Pipeline,Devops,我遇到的所有关于编写声明性管道的教程都建议在Jenkinsfile中包含阶段和步骤 但我注意到我的一个大四学生写的是相反的方式。他使用Jenkins文件只是为了定义所有属性,也就是说,他的Jenkins文件只是一个属性文件,仅此而已 在定义管道时,他利用了共享库的概念,将管道代码写到vars文件夹中的一个文件中。我猜不出这种方法背后的智慧 在互联网上,我从未遇到过类似的事情。 我们高度赞赏这方面的任何指导。我是詹金斯世界的初学者。如中所示,这种方法(我也在使用)允许: 将文件内容保持在最低限度

我遇到的所有关于编写声明性管道的教程都建议在Jenkinsfile中包含阶段和步骤

但我注意到我的一个大四学生写的是相反的方式。他使用Jenkins文件只是为了定义所有属性,也就是说,他的Jenkins文件只是一个属性文件,仅此而已

在定义管道时,他利用了共享库的概念,将管道代码写到vars文件夹中的一个文件中。我猜不出这种方法背后的智慧

在互联网上,我从未遇到过类似的事情。
我们高度赞赏这方面的任何指导。我是詹金斯世界的初学者。

如中所示,这种方法(我也在使用)允许:

  • 将文件内容保持在最低限度
  • 执行执行特定作业的标准方式(如共享库中的编码)
该共享库成为流程的模板,在将实际执行委托给预定义库之前,您只在Jenkins文件中为其提供值

委员会注意到:

使用Groovy的
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部分,然后很快选择首选项;)