我一直试图了解下面的管道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 "<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",
recipientProviders: [[$class: 'DevelopersRecipientProvider']]
)
1)班级($ class)之前的美元符号是否有一些特殊含义?我知道它引用类类型DevelopersRecipientProvider
但是$class
在groovy中是某种特殊的保留字来表示类类型?
2)在源代码中,recipientProviders
是List
,但在上面的代码中究竟分配给它的是什么?它是地图列表吗?
3)电子邮件ext插件源代码中定义了emailext的位置在哪里?我在插件源代码中的所有.groovy文件中搜索了emailext,但似乎找不到上面的emailext调用。
如果有人能够对上述内容有所了解,我将不胜感激,谢谢。
答案 0 :(得分:3)
1)2)关于同样的事情:
[$class: 'DevelopersRecipientProvider']
是一个带有键'$class'
的地图文字(注意它是一个字符串文字)和值'DevelopersRecipientProvider'
。没什么特别的。
关于recipientProviders: [[$class: 'DevelopersRecipientProvider']]
,
[[$class: 'DevelopersRecipientProvider']]
是地图列表,'recipientProviders'
与'subject'
或'body'
的关键字相同。
您可能认为emailext
是带签名的方法:void emailext(Map<String, Object> map)
答案 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 - 它是一个“同类”列表。 (在第一种语法中,同类列表不允许有这样的遗漏。)请注意,在给出单个参数且省略名称且该参数是地图的情况下,必须将其括在括号中以避免语法歧义。