1

我的项目有许多其他项目的公共变量,所以我使用 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, var2vars 传输配置映射时)。

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
    }
}

问题是,为了将这些变量声明为环境变量,我使用了这种方式:

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

但是这样buildMeta vars(var1,var2)还没有定义,所以我无法正确初始化my_vars.loadVars()调用。另一方面,我无法复制这些buildMeta.groovy功能,my_vars.loadVars()因为前者有sh用法,而对后者的调用未在阶段(脚本)下定义。

我可以通过将所有这些函数调用放在一个单独的阶段(比如说“加载变量”阶段)来解决所有这些问题,但我真的想避免那个虚拟阶段。最好的做法是什么?

谢谢!

4

0 回答 0