#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: []