Jenkins共享库-加载变量

时间:2019-11-21 06:34:42

标签: jenkins groovy jenkins-pipeline jenkins-shared-libraries

我的项目在许多其他项目中都有许多公共变量,因此我使用Jenkins共享库并创建了一个vars/buildMeta.groovy文件,在其中定义了变量(一些sh解析函数),并在环境阶段(var1,var2):

pipeline {
    environment {
        // initialize common vars
        var1 = buildMeta.getVar1()
        var2 = buildMeta.getVar2()
        varA = var1 + "some_string"
        varB = var2 + "some_other_string"
    } // environment
    stages {
        stage('Some Stage') {
            // ...
        }
    }
    post {
        always { 
            script {
                // Print environment variables
                sh "env"
            } // script
        } // always
    } // post
} // pipeline

我决定将varAvarB导出到共享的vars/my_vars.groovy并从那里使用它们(当我必须使用var1,{ {1}}变量)。

var2

问题是,为了将那些var声明为我使用过的环境var:

class my_vars {
    static Map varMap = [:]
    static def loadVars (Map config) {
        varMap.varA = config.var1 + "some_string"
        varMap.varB = config.var2 + "some_other_string"
        // Many more variables ...

        return varMap
    }
}

但是那样还没有定义buildMeta变量(var1,var2),所以我无法正确初始化pipeline { my_vars.loadVars().each { key, value -> env[key] = value } environment { // initialize common vars var1 = buildMeta.getVar1() var2 = buildMeta.getVar2() } // environment stages { stage('Some Stage') { // ... } } // ... } // pipeline 调用。 另一方面,我不能将my_vars.loadVars()函数复制到buildMeta.groovy,因为前者有my_vars.loadVars()的用法,而后者的调用未在一个阶段中定义(脚本)。

我可以通过将所有这些函数调用放在单独的阶段(让我们说“加载变量”阶段)来解决所有这些问题,但是我真的想避免该假的阶段。 最佳做法是什么?

谢谢!

0 个答案:

没有答案