我的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"
.....
}
}
答案 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/
中了解更多相关信息