Как прочитать переменные среды, введенные jenkins старой сборкой

#jenkins-groovy

#дженкинс-groovy

Вопрос:

Я пытаюсь прочитать старые переменные среды jenkins build (для извлечения последующих заданий), используя groovy script. В настоящее время я использую

build.getEnvVars()

Но получаю устаревшее предупреждение. Может кто-нибудь сказать мне, какой лучший метод для чтения этих старых переменных среды сборки?

Ответ №1:

Используя конвейер, вот способ распространения всех переменных среды из нисходящего потока, чтобы вы могли использовать getBuildVariables() метод, включая любые изменения, сделанные до вызова makeEnvAvailable в нисходящем задании.

Примечание: Требуется утверждение скрипта для method org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment

 // Downstream job 'down' Jenkinsfile
@NonCPS
def makeEnvAvailable() {
    // Goes through every environment variable and sets it again
    // This will populate 'downstreamBuild.getBuildVariables()'
    env.getEnvironment().each { k,v -> env.setProperty(k, v)  }
}

pipeline {
    agent any
    parameters {
        booleanParam(name: 'QUICK_BUILD', defaultValue: false,
            description: 'Skip running git clean and perform a quick build' )
    }
    environment {
        TEST_VER="${TEST_VER}"
        VIVARIUM="/tools/pancake"
    }
    stages {
        stage("Env set") {
            steps { 
                script {
                    // Will be visible upstream regardless
                    env.THIS_IS_A_TEST = "test_env_set"

                    // Not set on env. Not available
                    ANOTHER_TEST = "not_env_set"

                    // Does not modify the param or env. Not available
                    QUICK_BUILD = "not_actually_modifying_params"

                    // Set to the same value, but now available upstream
                    env.GIT_COMMIT = env.GIT_COMMIT

                    // Makes every other environment variable available
                    makeEnvAvailable()
                }
            }
        }
    }
}

  
 // Upstream job 'Up' Jenkinsfile
pipeline {
    agent any
    stages {
        stage ("Downstream") {
            steps {
                script {
                    def down = build job: "down"
                    echo down.getBuildVariables().toString()
                    echo down.buildVariables
                }
            }
        }
    }
}

  

Теперь ваша вышестоящая работа должна иметь доступ ко всем переменным среды из вашей нижестоящей работы.

Ответ №2:

Это то, что вам нужно в соответствии с javadoc. https://javadoc.jenkins-ci.org/hudson/model/Run.html#getEnvVars—

 def listener = Jenkins.get()
    .getItemByFullName(env.JOB_NAME)
    .getBuildByNumber(Integer.parseInt(env.BUILD_NUMBER))
    .getListener()

build.getEnvironment(listener)
  

Комментарии:

1. Спасибо @Traycho. Как мне использовать этот tasklistener? Не могли бы вы, пожалуйста, предоставить синтаксис?

2. @VishnuM обновлен примером, надеюсь, это поможет

3. Спасибо @Traycho. Когда я попробовал этот синтаксис, он вернул эту ошибку groovy.lang.MissingMethodException: No signature of method: com.tikal.jenkins.plugins.multijob.MultiJobBuild.getListener() is applicable for argument types: () values: []