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'),
    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/文件夹来定义您可以从管道调用的函数。将库托管在自己的存储库或孤立分支上

导入共享库

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

使用共享库

要在作业中导入库,您必须在文件顶部的 shebang 之后添加语句 @Library('name-of-your-lib')_

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

最后,如果您想要创建作业模板,我建议尝试获取我共享的这个共享库正在做什么,它有助于创建声明性模板并解决您在 jobdsl 和共享管道中遇到的问题和限制

关于jenkins job dsl 插件问题,内部作业都无法访问外部作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64606842/

相关文章:

groovy - 从 lib 目录构建的准系统 Gradle

shell - Jenkins Slave 打印消息 Cannot contact Slave-host : java. io.IOException : Remote call on Channel to/10. 0.2.2 failed

jenkins-pipeline - 在 curl 调用时在 Jenkinsfile 中获取 SerializedException

java - 使用自动安装 JDK 在 Windows 7 上安装和配置 Jenkins

java - 无法从 jenkins 作为后台进程运行 nohup 命令

hibernate - 为什么 gradle 不会从 jenkins 工作中运行

Grails 应用程序根上下文

grails - 在GrailsParameterMap groovy中使用数组重定向的绝妙方法

docker - Jenkinsfile未使用完整的docker-compose命令,丢失了build-arg

java - Jenkins CI - SSL 握手失败