Не получить значение переменной в jenkinsfile - PullRequest
0 голосов
/ 16 марта 2020

Я использую ниже Jenkinsfile. Он печатает значение upload_id, когда оно выполняется с помощью команды jq, но при печати оно показывает null.

Пожалуйста, помогите мне исправить эту проблему.

sh label: '', script: 'upload_id=$(cat output_file.json | jq -r \'.upload_id\')'
sh "echo \"$upload_id\""**

Вывод:

[конвейер] sh cat output_file. json jq -r .upload_id upload_id = 8f304c6d-804b-440a-xxxx ** [конвейер] sh echo upload_id: null upload_id: null
[Pipeline]}

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Вы можете легко сделать это по своей сути в Jenkins Pipeline, чтобы избежать всех проблем с выполнением подпроцесса. Сначала прочитайте и проанализируйте файл JSON:

upload_info = readJSON(file: 'output_file.json')

Затем вы можете получить доступ к возвращенным значениям в назначенной upload_info карте обычно:

upload_id = upload_info['upload_id']
0 голосов
/ 16 марта 2020

Я бы настоятельно рекомендовал go с ответом Мэтта , потому что это самый чистый способ.

В любом случае, существуют ситуации, когда нет другого выбора, кроме как использовать оболочку Итак, вот способ оболочки:

script {
    def upload_id = sh label: '', 
                       script: 'echo $(cat output_file.json | jq -r \'.upload_id\')', 
                       returnStdout: true
    upload_id = upload_id.trim()  // remove extraneous whitespace
    sh "echo \"$upload_id\""
}

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

...