首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是纯Groovy中的Jenkinsfile吗?Jenkinsfile中的“used”中使用了什么Groovy语言结构?

是纯Groovy中的Jenkinsfile吗?Jenkinsfile中的“used”中使用了什么Groovy语言结构?
EN

Stack Overflow用户
提问于 2020-06-18 15:55:10
回答 2查看 3.1K关注 0票数 4

在Jenkinsfile中的以下代码片段中使用了什么Groovy语言构造、语法或控制结构?

代码语言:javascript
运行
复制
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使用预处理。

以上两种方法中的哪一种?

相关:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-18 21:01:44

在Jenkins (或Gradle)中使用了两个主要特性:

  1. Groovy (java)惯用结构,如循环、开关、命令链等基于Closure
  2. DSLBuilder工具,允许嵌套和调用特定域的方法,因为它们是Groovy本身的一部分。

所以,如果你写的东西

代码语言:javascript
运行
复制
stage('Stage 1') {
    steps {
        // One or more steps
    }
}

它将内在含义大致翻译为:

代码语言:javascript
运行
复制
jenkinsContext.stage('Stage 1') {
    jenkinsContext.steps {
        // One or more steps
    }
}

所以写和读要清楚得多。在这里,闭包-- {...}块--表示代码的嵌套或分组。

在这个块中,您还可以看到Groovy调用方法的方式,最后一个参数是闭包。上述代码可改写为:

代码语言:javascript
运行
复制
jenkinsContext.stage 'Stage 1', { // here no brackets around args
    jenkinsContext.steps( { // here with normal java-style brackets
        // One or more steps
    } )
}

在jenkins中,可以将DSL调用与Groovy结构混合和匹配:

代码语言:javascript
运行
复制
[ 'Stage 1', 'Stage 2' ].each{
  stage( it ) {}
}

甚至动态生成DSL名称:

代码语言:javascript
运行
复制
[ 'Stage 1':'stage', 'step 2':'steps' ].each{ value, name ->
  "$name"( value ) {}
}

将创建DSL (仅作为示例!):

代码语言:javascript
运行
复制
  stage( 'Stage 1') {}
  steps( 'Step 2' ) {}

所以,Jenkins管道语法是Groovy + Jenkins DSL

票数 3
EN

Stack Overflow用户

发布于 2021-06-14 16:44:27

看起来它主要是Groovy,所以如果您只需要简单的语法高举,添加如下内容就可以完成任务。

<!-- language: lang-groovy -->

但是,在线文档中有一些说明,所以这可能意味着它不是用纯groovy编写的,而是以某种专门/受限的形式编写的?

在声明管道中有效的基本语句和表达式遵循与Groovy语法相同的规则,但有以下异常

  • 管道的顶层必须是块,特别是:管道{ }.

  • 没有分号作为语句分隔符。每个语句都必须在自己的行上。

  • 块只能由节、指令、步骤或赋值语句组成。

属性引用语句被视为非参数方法调用。因此,例如,输入被视为input().

https://www.jenkins.io/doc/book/pipeline/syntax/#declarative-pipeline

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62454164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档