我有一个独特的设置,需要能够动态加载位于我正在构建的src之外的Jenkinsfiles。JenkinsFile本身通常调用node(),然后调用一些构建步骤。这会导致不必要地消耗多个执行器,因为我需要已经调用node(),以便使用加载步骤来运行Jenkinsfile,或者如果我将Jenkinsfile读取为字符串并执行它,则执行groovy。
我今天在工作UI中拥有的内容:
@Library(value='myGlobalLib@head', changelog=fase) _
node{
load "${JENKINSFILES_ROOT}/${PROJECT_NAME}/Jenkinsfile"
}
加载的Jenkinsfile通常也调用node()。例如:
node('agent-type-foo'){
someBuildFlavor{
buildProperty = "some value unique to this build"
someConfig = ["VALUE1", "VALUE2", "VALUE3"]
runTestTarget = true
}
}
这将导致在管道运行期间消耗2个执行器。理想情况下,我加载Jenkinsfiles时不首先调用node(),但每当我尝试时,都会收到一条错误消息,说明:
"Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node"
有没有办法在没有hudson的情况下加载Jenkinsfile或执行groovy。文件路径上下文?我似乎在医生身上找不到任何东西。我现在要对Jenkins文件进行预处理,以删除它们对node()的初始调用,并使用Jenkins文件使用的值调用node(),然后加载文件的其余部分,但这对我来说太脆弱了。
使用load
步骤时Jenkins评估文件。您可以将Jenkinsfile的逻辑包装到一个函数中(在我的示例中名为run()
),以便它会加载但不会自动运行。
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
从工作脚本中调用它,如下所示:
def jenkinsfile
node{
jenkinsfile = load "${JENKINSFILES_ROOT}/${PROJECT_NAME}/Jenkinsfile"
}
jenkinsfile.run()
这样,就不再有嵌套的节点块,因为第一个块在调用函数之前被关闭。
问题内容: 我需要在Jenkins Pipeline中解析一些JSON并在循环中调用一些常规方法,但是脚本始终在第一个函数调用后退出。这该怎么做? 在上面的示例中,即使使用json对象,例如: …管道总是在第一次迭代后退出。据推测这是由于混合了同步和异步功能。有什么办法吗? 问题答案: 我已经通过执行以下操作基本上解决了此问题: 使用完JsonSlurper实例后,立即销毁它,删除@NonCPS批
我目前正在尝试从jenkins管道中的文件加载一个自定义groovy类。我尝试了这里提出的解决方案: 如何在Jenkins管道中导入类文件? 作为... JenkinsPipelineUtilityClass.groovy 詹金斯档案 并尝试同样使用GroovyClassLoader(再次使用上述类) 詹金斯档案 我在这两方面都遇到了同样的错误: 我已经检查了正在进行的脚本批准,里面什么都没有,我
问题内容: 使用Selenium WebDriver for Java,是否可以在给定URL的情况下获取网页的HTML? 我知道,一旦在浏览器中加载了网页,就可以使用WebDriver.getPageSource()获得HTML。但是,为了提高效率,是否可以在不先将页面加载到浏览器中的情况下获取HTML? 问题答案: 您可以使用无头浏览器来实现。 无头浏览器是没有图形用户界面的Web浏览器。 该程
我正在尝试创建一个定制的Jenkins管道,它将多个Jenkins作业生成的工件绑定在一起。每个作业都在不同的存储库上运行(基于它们自己的文件)。这些Jenkins文件的阶段完成了创建档案、编译代码等任务。 有人可能会说,我可以使用单个作业中的工件,然后将它们绑定在一起,但问题是这个高级管道将在特定的 ,因此它无法凭空创建存档。 由于我是詹金斯管道公司的新手,您对如何解决这个问题有什么建议吗? 最
当我在Jenkins从属上运行以下代码段时,它可以工作。但是当它在没有BASH的docker容器中执行时,就不会设置“$test”。 https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-withenv-code-set-environment-variables
问题内容: 我有一个包含类的文件。范例: 我想将文件导入到我的Jenkins管道脚本中,因此可以创建我的一个类的对象。例如 : 如何在Jenkins Pipeline中导入文件?谢谢。 问题答案: 您可以这样: Classs.groovy 管道: