首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jenkins pipeline -如何在不首先调用node()的情况下加载Jenkinsfile?

Jenkins pipeline -如何在不首先调用node()的情况下加载Jenkinsfile?
EN

Stack Overflow用户
提问于 2018-12-28 03:46:40
回答 1查看 5.3K关注 0票数 3

我有一个有点独特的设置,我需要能够动态加载位于我正在构建的src之外的Jenkinsfile。Jenkinsfiles文件本身通常调用node(),然后调用一些构建步骤。这会导致多个执行器不必要地被占用,因为我需要已经调用node()来使用load步骤来运行Jenkinsfile,或者如果我将Jenkinsfile作为字符串读取并执行它,则需要执行groovy。

我今天在作业UI中的内容:

代码语言:javascript
运行
复制
@Library(value='myGlobalLib@head', changelog=fase) _

node{
    load "${JENKINSFILES_ROOT}/${PROJECT_NAME}/Jenkinsfile"
}

加载的Jenkinsfile通常也会调用node()。例如:

代码语言:javascript
运行
复制
node('agent-type-foo'){
    someBuildFlavor{
        buildProperty = "some value unique to this build"
        someConfig = ["VALUE1", "VALUE2", "VALUE3"]
        runTestTarget = true
    }
}

这会导致在流水线运行期间消耗2个执行器。理想情况下,我不需要首先调用node()就可以加载Jenkinsfiles文件,但无论何时尝试,我都会收到一条错误消息,指出:

代码语言:javascript
运行
复制
"Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node"

有没有办法在没有hudson.FilePath上下文的情况下加载Jenkinsfile或执行groovy?我好像在文件里找不到任何东西。我准备对Jenkinsfile进行预处理,删除它们对node()的初始调用,并使用Jenkinsfile使用的值调用node(),然后加载文件的其余部分,但是,这有点太脆弱了,我不会满意的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-02 03:10:41

在使用load步骤时,Jenkins会评估文件。您可以将Jenkinsfile的逻辑封装到一个函数中(在我的示例中名为run() ),这样它将加载但不会自动运行。

代码语言:javascript
运行
复制
def run() {
    node('agent-type-foo'){
        someBuildFlavor{
            buildProperty = "some value unique to this build"
            someConfig = ["VALUE1", "VALUE2", "VALUE3"]
            runTestTarget = true
        }
    }
}

// This return statement is important in the end of Jenkinsfile
return this 

从您的工作脚本中调用它,如下所示:

代码语言:javascript
运行
复制
def jenkinsfile
node{
    jenkinsfile = load "${JENKINSFILES_ROOT}/${PROJECT_NAME}/Jenkinsfile"
}
jenkinsfile.run()

这样就不会再有嵌套的node块了,因为第一个块在调用run()函数之前就被关闭了。

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

https://stackoverflow.com/questions/53950119

复制
相关文章

相似问题

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