Общие библиотеки Jenkins - загрузка переменных - PullRequest
1 голос
/ 21 ноября 2019

В моем проекте есть много общих переменных для многих других проектов, поэтому я использую общую библиотеку 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

Я решил экспортировать varA, varB в общий vars/my_vars.groovy и использовать их оттуда (когда мне нужно перенести карту конфигурации с var1, var2 vars).

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 (var1,var2) еще не определены, поэтому я не могу правильно инициализировать вызов my_vars.loadVars(). С другой стороны, я не могу продублировать функции buildMeta.groovy на my_vars.loadVars(), поскольку в первом случае используется sh, а вызов второго не определен на этапе (сценарии).

Я мог бы решить все это, поместив все эти вызовы функций на отдельную стадию (скажем, на этапе «Загрузка переменных»), но я действительно хочу избежать этой фиктивной стадии. Какая лучшая практика для этого?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...