在Jenkinsfile中设置可重用属性的最佳方法

时间:2018-06-21 07:21:12

标签: groovy jenkins-pipeline

我的Jenkins管道共享库可以按需发送通知。用户基本上必须为他要通知的每个阶段发送通知信道详细信息,例如松弛的信道名称或电子邮件ID。

我不希望用户在每个阶段都重复此属性,而只是在Jenkinsfile中定义一次即可,我可以使用它。设置此变量的最佳方法是什么?

示例:

// this properties needs to be accessed by my groovy files
def properties = "channelNm,token"
node('myNode'){

stage('checkout'){
   slackNotify = "yes"
   .....
 }
 stage('compile'){
   slackNotify = "yes"
   .....
 }
}

1 个答案:

答案 0 :(得分:0)

使用Jenkins共享库时,可以创建配置类,还可以公开DSL脚本,该脚本允许您修改配置对象。看下面的例子。假设您在NotificationConfig文件夹中有一个名为src的类:

src / NotificationConfig.groovy

@Singleton
class NotificationConfig {
    String slackChannelName
    String email
    String otherStuff
}

此类是一个单例,这意味着您可以使用NotificationConfig.instance获得该实例(单个)。现在,假设您在notificationConfig.groovy文件夹中有一个名为vars的DSL脚本:

vars / notificationConfig.groovy

#!groovy

def call(Closure body) {
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = NotificationConfig.instance
    body()
}

这是一个非常简单的脚本,委托闭包主体在NotificationConfig对象的上下文中执行。现在,让我们看一下使用notificationConfig DSL设置一些配置值的非常简单的脚本化管道:

Jenkinsfile

notificationConfig {
    email = 'test@test.com'
    slackChannelName = 'test'
}

node {
    stage('Test') {
        echo NotificationConfig.instance.email
    }
}

当我运行这个简单的管道时,我看到:

[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/test-pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] echo
test@test.com
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

如您所见,您可以使用此类DSL NotificationConfig对象进行公开,并让管道定义自己的值,然后使用NotificationConfig.instance对象在共享库中访问这些值。

  

注意:您始终可以在NotificationConfig对象中设置一些默认值,以便库用户可以在其管道中覆盖它们或根据需要依赖默认值。

这是Jenkins Pipeline共享库中非常流行的模式。您可以在此Jenkins博客文章-https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/

中了解更多相关信息