我在这里看一个Jenkins脚本管道教程https://www.jenkins.io/blog/2019/12/02/matrix-building-with-scripted-pipeline/,发现我需要学习一些Groovy来理解这一点。
我已经阅读了Groovy文档,但仍然不能理解所有这些代码。我将列出有问题的地方。
1个
List getMatrixAxes(Map matrix_axes) {
List axes = []
matrix_axes.each { axis, values ->
List axisList = []
values.each { value ->
axisList << [(axis): value]
}
axes << axisList
}
// calculate cartesian product
axes.combinations()*.sum()
}
在我看过的大多数Groovy文档中,它都定义了列表,比如List axes = []
。上面的语法看起来更像是一个返回List的函数。如果这是什么,我在花括号里看不到任何return语句,这让我很困惑。
2
node(nodeLabel) {
withEnv(axisEnv) {
stage("Build") {
echo nodeLabel
sh 'echo Do Build for ${PLATFORM} - ${BROWSER}'
}
stage("Test") {
echo nodeLabel
sh 'echo Do Build for ${PLATFORM} - ${BROWSER}'
}
}
}
我以前在Groovy脚本中看到过node
的概念,其中有些是参数部分,即:node(nodelabel) {...}
,有时不带,即:node {...}
。这个核心是Groovy还是Jenkins特有的东西?它是什么意思?我在哪里可以找到关于它的文档?
1条答案
按热度按时间aiqt4smr1#
getMatrixAxes
是一个函数。在Groovy中,return语句是可选的。如果您没有显式返回函数中的内容,则返回方法或闭包主体中最后一个求值的表达式。在您的示例中,将返回由axes.combinations()*.sum()
生成的输出。在本示例中,它将生成一个List
。您可以从此处阅读更多内容。1.这些结构是Jenkins特有的。特别提到的语法来自Jenkins Scripted Pipeline Syntax。
node {...}
简单地表示在任何代理上运行。node(nodelabel) {...}
表示在标签为nodelabel
的代理上运行。Jenkins有一个新的作业DSL,称为声明性语法,它比脚本语法更受欢迎。您可以阅读更多关于here和here的信息。