jenkinsjobdsl插件问题,其中没有一个内部作业可以访问外部作业



我使用的是jenkins jobDsl,如下所示:

#!groovy

node('master') {
stage('Prepare') {
deleteDir()
checkout scm
}

stage('Provision Jobs') {
jobDsl(targets: ['jenkins/commons.groovy', 'folderA/jenkins/jobA.groovy'].join('n'),
removedJobAction: 'DELETE',
removedViewAction: 'DELETE',
sandbox: false)
}
}

我想从jobA.groovy使用在commons.groovy上定义的函数。

目前,jobA.groovy无法访问commons.groovy上定义的函数,我如何允许这种行为?

附:

  • jobA.groovy:
test_job("param1", "param2")
  • common.groovy:
def test_job(String team, String submodule) {
pipelineJob("${team}/${submodule}/test_job") {
displayName("Test Job")
description("This is a Continuous Integration job for testing")
properties {
githubProjectUrl("githubUrl")
}
definition {
cpsScm {
scm {
git {
remote {
url('githubUrl')
credentials('credentials')
refspec('+refs/pull/*:refs/remotes/origin/pr/*')
}
branch('${sha1}')
scriptPath("scriptPath")
}
}
}
}
}
}

我们的想法是能够从jobA.groovy调用这个方法test_job("param1", "param2"),而不会出现任何问题,我目前得到的是:

ERROR: (jobA.groovy, line 9) No signature of method: test_job() is applicable for argument types: (java.lang.String, java.lang.String)

JobDSL创建作业。然后在运行时,您希望作业调用您的函数。函数必须通过共享库导入。

创建共享库

以下是一个示例:https://github.com/sap-archive/jenkins-pipelayer最重要的一点是,您需要创建一个vars/文件夹,该文件夹将定义您可以从管道中调用的函数。在自己的repo或孤立分支上托管lib

导入共享库

导入Jenkins中的库。从"管理"页面,转到"全局管道库"部分的"配置系统",添加一个具有您选择的名称的新库,即库的名称、默认版本主、现代scm githttps://urlofyoursharedlib.git第一次运行jobDSL作业,然后转到In-Process Script Approval页面并批准所有内容。

使用共享库

要在工作中导入库,必须在文件顶部,在shebang之后包含语句@library('name-of-your-lib'(_

也存在类似的说法,";库"库的名称";。这个对";调试&"修复";共享库,因为当你点击重放按钮时,你会看到管道中使用的共享库文件

最后,如果你正在尝试创建作业模板,我建议你尝试了解我共享的这个共享库正在做什么,它有助于创建声明性模板,并解决你在使用jobdsl&共享管道

最新更新