jenkins作业dsl插件问题,其中没有任何内部作业可以访问外部作业

jenkins作业dsl插件问题,其中没有任何内部作业可以访问外部作业,jenkins,groovy,jenkins-pipeline,jenkins-job-dsl,Jenkins,Groovy,Jenkins Pipeline,Jenkins Job Dsl,我正在使用jenkins jobDsl,如下所示: #!groovy node('master') { stage('Prepare') { deleteDir() checkout scm } stage('Provision Jobs') { jobDsl(targets: ['jenkins/commons.groovy', 'folderA/jenkins/jobA.groovy'].join('\n'), removedJobActi

我正在使用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:
  • common.groovy:
想法是能够从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创建作业。然后在运行时,您希望您的作业调用您的函数。该函数必须通过共享库导入

创建共享库

以下是一个示例: 最重要的一点是,您需要创建一个vars/文件夹,用于定义可以从管道调用的函数。将库托管在其自己的repo或孤立分支上

导入共享库

在Jenkins中导入库。从“管理”页面,转到“配置系统”部分的“全局管道库”,添加一个新库,其名称由您选择,即库名称、默认版本主控、现代scm git 第一次运行jobDSL作业,然后转到进程内脚本批准页面并批准所有内容

使用共享库

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

还有一个类似的语句,“library'name of your lib'”。这一个对于“调试和修复”共享库很有用,因为当您点击重播按钮时,您将看到管道中使用的共享库文件


最后,如果您只想创建作业模板,我建议您尝试获取我共享的这个共享库的功能,它有助于创建声明性模板,并解决您在使用jobdsl和共享管道时遇到的问题和限制,您需要导入它。该语句的显示方式取决于您的代码组织。@MattSchuchard代码组织如上所述,但我的问题是,我认为一个模块与另一个模块之间不存在可见性,因为它们是使用
jobDsl
加载的,这就是为什么我不知道如何使用
导入
。如果您有一个类似的例子,我可以检查一下,我真的很有兴趣看看它这里有一个在jenkins dsl中加载共享库的标准方法:
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")
          }
        }
      }
    }
  }
}
ERROR: (jobA.groovy, line 9) No signature of method: test_job() is applicable for argument types: (java.lang.String, java.lang.String)