使用shared \ vars库

时间:2018-06-13 21:54:42

标签: jenkins groovy jenkins-pipeline jenkins-groovy

所以我试图通过将它们放在\vars目录中的groovy文件中来定义文件夹级别变量。

唉,文档非常糟糕,以至于无法弄清楚如何做到这一点...... 假设我们必须使用全局G1G2,这是我们在groovy文件中定义它们的方式吗?

#!Groovy

static string G1 = "G1"
static string G2 = "G2"

假设Groovy文件名为XYZ.Groovy,我如何在文件夹中定义它以使其可用于文件夹的脚本?

假设我克服了这一点,并且LIBXYZ是该文件夹与/vars目录中的内容相关联的名称,假设我打电话时是正确的

@Library("LIBXYZ") _

它会使XYZ可用吗?

在这种情况下,访问全局变量的方式是XYZ.G1吗?

谢谢,a。

1 个答案:

答案 0 :(得分:0)

我有一个工作示例here,因为我最近对此感到好奇。我同意文档很糟糕。

以下内容与README.md中的信息类似。

准备:请注意,此处的文件夹是指CloudBees文件夹插件中的Jenkins文件夹。这是一种组织工作的方式。

代码布局

要注意的第一部分是src/net/codetojoy/shared/Bar.groovy

package net.codetojoy.shared

class Bar {
    static def G1 = "G1"
    static def G2 = "G2"

    def id

    def emitLog() { 
        println "TRACER hello from Bar. id: ${id}"
    }
}

第二部分是vars/folderFoo.groovy

def emitLog(message) {
    println "TRACER folderFoo. message: ${message}"
    def bar = new net.codetojoy.shared.Bar(id: 5150)
    bar.emitLog()

    println "TRACER test : " + net.codetojoy.shared.Bar.G1
}

修改:使用静态/"全局" vars文件夹中的变量,请考虑以下vars/Keys.groovy

class Keys {
    static def MY_GLOBAL_VAR3 = "beethoven"
}

folderFoo.groovy脚本可以使用Keys.MY_GLOBAL_VAR3

然后使用(在我的例子中:Basic.Folder.Jenkinsfile):

@Library('folderFoo') _ 

stage "use shared library"
node {
    script {
        folderFoo.emitLog 'pipeline test!'
    }
}

Jenkins设置:文件夹

  • 转到新项目并创建新文件夹
  • 使用新的Pipeline库配置文件夹:
    • 名称folderFoo
    • 默认版本master
    • 检索方法Modern SCM
    • 我的示例中的
    • 源代码管理this repo

Jenkins设置:管道作业

  • 在上面创建的文件夹中创建一个新的管道作业
  • 虽然有点令人困惑(并且自我引用),但我创建了一个使用相同this repo
  • 的管道作业
  • 指定Jenkinsfile Basic.Folder.Jenkinsfile
  • 作业应该运行并使用库