我想使用一个函数来构建我的Jenkinsfile的某些阶段。这将是一个具有许多重复阶段/步骤的构建-我不想手动生成所有内容。

我想知道是否可以做这样的事情:

_make_stage() {
    stage("xx") {
        step("A") {
            echo "A"
        }

        step("B") {
            echo "B"
        }
    }
}

_make_stages() {
    stages {
        _make_stage()
    }
}

// pipeline starts here!
pipeline {
    agent any
    _make_stages()
}

不幸的是, Jenkins (Jenkins)不喜欢这样-当我运行时出现错误:
WorkflowScript: 24: Undefined section "_make_stages" @ line 24, column 5.
       _make_stages()
       ^

WorkflowScript: 22: Missing required section "stages" @ line 22, column 1.
   pipeline {
   ^

那么,这里出了什么问题?函数_make_stages()确实看起来像返回的是stages对象返回的内容。我将其放在函数调用中还是直接将其内联到管道定义中,为什么很重要?

最佳答案

正如here所解释的那样,管道“脚本”不是简单的Groovy脚本,它们在运行之前经过了重大转换,某些部分在主服务器上,某些部分在从属服务器上,其状态(变量值)已序列化并传递到下一步。因此,不支持每个Groovy功能,实际上不支持简单功能。

这并不意味着您想要实现的目标是不可能的。您可以以编程方式创建阶段,但显然不能使用声明性语法。另请参阅this question以获取好的建议。

关于jenkins - 我可以在Jenkinsfile中使用函数构建阶段吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43881484/

10-11 02:21
查看更多