4

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

唉,文档太糟糕了,不可能弄清楚如何做到这一点......假设我们必须使用全局变量,G1并且G2这是我们在 groovy 文件中定义它们的方式吗?

#!Groovy

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

假设 Groovy 文件被调用XYZ.Groovy,我如何在文件夹中定义它以便它可用于文件夹的脚本?

假设我克服了这一点,并且那LIBXYZ是文件夹与/vars目录中的东西相关联的名称,那么假设当我打电话时是否正确

@Library("LIBXYZ") _

它会XYZ提供吗?

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

谢谢。

4

1 回答 1

3

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

以下与 中的信息类似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!'
    }
}

詹金斯设置:文件夹

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

Jenkins 设置:流水线作业

  • 在上面创建的文件夹中创建一个新的管道作业
  • 虽然有点令人困惑(和自我参照),但我创建了一个管道作业,它使用相同的this repo
  • 指定 JenkinsfileBasic.Folder.Jenkinsfile
  • 作业应该运行并使用库
于 2018-06-14T00:02:11.187 回答