Использование переменной в качестве текста входного сообщения Дженкинса

#shell #jenkins #input #jenkins-pipeline

Вопрос:

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

 stage("Manual Approval"){
        sh """
        ls -la
        versionNumber=`grep -wE -A 2 '"package": "example0"'`
        ancestorVersion=`grep -wE -A 2 '"package": "example"'`
        """
        timeout(time: 120, unit: 'MINUTES') {
            input message: "Do you want to build ver. ${versionNumber} having ver. ${ancestorVersion} as an ancestor?", submitter: 'user1'
        }
    }
 

Ответ №1:

В последней версии sh шаг конвейера позволяет сохранить выходные данные в переменной, следуя:

 script {
    INFO_SYSTEM = sh (
        script: 'uname -a',
        returnStdout: true
    ).trim()
    echo "Value: ${INFO_SYSTEM}"
}
 

Выход:

 Running on Jenkins in /var/jenkins_home/workspace/testing
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Testing)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
  uname -a
[Pipeline] echo
Value: Linux d7d184735414 4.14.225-121.357.amzn1.x86_64 #1 SMP Mon Mar 15 23:52:05 UTC 2021 x86_64 GNU/Linux
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
 

Итак, возможно, вы можете изменить подход к выполнению этой задачи, выполнив каждую переменную в одной команде, и получить выходные данные, как это:

 stage("Manual Approval"){
    VERSION_NUMBER = sh (
            script: 'grep -wE -A 2 '"package": "example0"'',
            returnStdout: true
        ).trim()

    ANCESTOR_VERSION = sh (
            script: 'grep -wE -A 2 '"package": "example"'',
            returnStdout: true
        ).trim()

    timeout(time: 120, unit: 'MINUTES') {
            input message: "Do you want to build ver. ${VERSION_NUMBER} having ver. ${ANCESTOR_VERSION} as an ancestor?", submitter: 'user1'
        }
}