在Jenkinsfile中的以下代码片段中使用了什么Groovy语言构造、语法或控制结构?
stage('Stage 1') {
steps {
// One or more steps
}
}也就是说,在纯Groovy语言方面,Jenkinsfile中的块是什么?
什么是“台阶”?还是stage?它是在调用函数吗?还是定义?还是带有匿名(lambda)参数的函数调用?
这个问题所固有的另一个问题是:
问题2:
是一个Jenkinsfile,是groovy语言?中的一个代码片段。
换句话说,1. Jenkinsfile是否遵循纯Groovy的所有语法和控制结构?(可能是通过隐式库导入,或者在开始时默示地包含d),
与DSL: 2. Jenkinsfile相反,Jenkinsfile几乎是一个Groovy源文件,在groovy中添加了新的Jenkins特定的构造,例如Jenkins使用预处理。
以上两种方法中的哪一种?
相关:
发布于 2020-06-18 21:01:44
在Jenkins (或Gradle)中使用了两个主要特性:
Closure的所以,如果你写的东西
stage('Stage 1') {
steps {
// One or more steps
}
}它将内在含义大致翻译为:
jenkinsContext.stage('Stage 1') {
jenkinsContext.steps {
// One or more steps
}
}所以写和读要清楚得多。在这里,闭包-- {...}块--表示代码的嵌套或分组。
在这个块中,您还可以看到Groovy调用方法的方式,最后一个参数是闭包。上述代码可改写为:
jenkinsContext.stage 'Stage 1', { // here no brackets around args
jenkinsContext.steps( { // here with normal java-style brackets
// One or more steps
} )
}在jenkins中,可以将DSL调用与Groovy结构混合和匹配:
[ 'Stage 1', 'Stage 2' ].each{
stage( it ) {}
}甚至动态生成DSL名称:
[ 'Stage 1':'stage', 'step 2':'steps' ].each{ value, name ->
"$name"( value ) {}
}将创建DSL (仅作为示例!):
stage( 'Stage 1') {}
steps( 'Step 2' ) {}所以,Jenkins管道语法是Groovy + Jenkins DSL
发布于 2021-06-14 16:44:27
看起来它主要是Groovy,所以如果您只需要简单的语法高举,添加如下内容就可以完成任务。
<!-- language: lang-groovy -->
但是,在线文档中有一些说明,所以这可能意味着它不是用纯groovy编写的,而是以某种专门/受限的形式编写的?
在声明管道中有效的基本语句和表达式遵循与Groovy语法相同的规则,但有以下异常:
属性引用语句被视为非参数方法调用。因此,例如,输入被视为input().
https://www.jenkins.io/doc/book/pipeline/syntax/#declarative-pipeline
https://stackoverflow.com/questions/62454164
复制相似问题