Jenkins Pipeline为receiveProviders提供emailext $ class参数

时间:2017-08-19 15:17:08

标签: jenkins groovy

我一直试图了解下面的管道groovy代码:

emailext (
        subject: "STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
        body: """<p>STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
          <p>Check console output at &QUOT;<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>&QUOT;</p>""",
        recipientProviders: [[$class: 'DevelopersRecipientProvider']]
      )

1)班级($ class)之前的美元符号是否有一些特殊含义?我知道它引用类类型DevelopersRecipientProvider但是$class在groovy中是某种特殊的保留字来表示类类型?

2)在源代码中,recipientProvidersList,但在上面的代码中究竟分配给它的是什么?它是地图列表吗?

3)电子邮件ext插件源代码中定义了emailext的位置在哪里?我在插件源代码中的所有.groovy文件中搜索了emailext,但似乎找不到上面的emailext调用。

如果有人能够对上述内容有所了解,我将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:3)

1)2)关于同样的事情:

[$class: 'DevelopersRecipientProvider']是一个带有键'$class'的地图文字(注意它是一个字符串文字)和值'DevelopersRecipientProvider'。没什么特别的。

关于recipientProviders: [[$class: 'DevelopersRecipientProvider']]

[[$class: 'DevelopersRecipientProvider']]是地图列表,'recipientProviders''subject''body'的关键字相同。

您可能认为emailext是带签名的方法:void emailext(Map<String, Object> map)

3)emailext是用Java实现的方法。您可以找到源代码herehere

答案 1 :(得分:2)

要添加,$class文字 Jenkins管道使用的特殊密钥。编辑管道作业时,将脚本源设置为内联(而不是SCM),并且有一个指向语法参考的链接。在该部分中,有一个“步骤参考”小节,位于https://<jenkins url>/job/<job name>/pipeline-syntax/html

  

作为参数的映射。可以省略默认值。 (请注意,[1, 2, 3]是Groovy中的列表,而[a: 1, b: 2, c: 3]是地图。)

     

特殊映射键$class用于表示所请求对象的简单或(必要时)完全限定类名。如果contains参数只允许一种嵌套对象(或它们的列表),则可以省略$class

     

checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'git://…'], extensions: [[$class: 'CleanBeforeCheckout']]])

     

在此示例中,必须指定GitSCM以区分SCM delegate使用的checkout的类型(可以省略单个必需参数名称委托) ,并且必须指定CleanBeforeCheckout以区分GitSCMExtension extensions使用的GitSCM - “异构”列表;但$class: 'UserRemoteConfig'可能会被省略,因为userRemoteConfigs的{​​{1}}被定义为仅包含GitSCM s - 它是一个“同类”列表。 (在第一种语法中,同类列表不允许有这样的遗漏。)

     

请注意,在给出单个参数且省略名称且该参数是地图的情况下,必须将其括在括号中以避免语法歧义。