我想使用一个函数来构建我的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/