gpt4 book ai didi

groovy - Jenkinsfile 是纯 Groovy 中的吗?在 Jenkinsfile 的 `steps` 中使用了什么 Groovy 语言构造?

转载 作者:行者123 更新时间:2023-12-04 15:25:06 25 4
gpt4 key购买 nike

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

stage('Stage 1') {
steps {
// One or more steps
}
}

即,就纯 Groovy 语言而言,Jenkinsfile 中的块是什么?

什么是“步骤”?或 stage ?
是调用函数吗?或定义?还是带有匿名(lambda)参数的函数调用?

这个问题的内在是另一个问题:

问题2:

Jenkinsfile 是 groovy 语言的代码片段吗?

换句话说, 1. Jenkinsfile 是否遵循纯 Groovy 的所有语法和控制结构? (可能是通过隐式库 import-ed 或 #include d 在开始时默默地),

与 DSL 不同: 2. Jenkinsfile 几乎是一个 groovy 源文件,增加了新的 Jenkins 特定结构,而不是最初在 Groovy 中,例如 Jenkins 使用预处理。

以上两个哪个成立?

相关:
  • https://www.jenkins.io/doc/book/pipeline/syntax/
  • https://www.jenkins.io/doc/book/pipeline/getting-started/#directive-generator
  • What is a Jenkins Stage in terms of Groovy? (尽管标题相似,但问题不同。相关评论尚无定论)。
  • 最佳答案

    在 Jenkins(或 Gradle)中使用了 2 个主要功能:

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

  • 所以,如果你写这样的东西
    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

    关于groovy - Jenkinsfile 是纯 Groovy 中的吗?在 Jenkinsfile 的 `steps` 中使用了什么 Groovy 语言构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62454164/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com