Я работаю над добавлением декларативного конвейера jenkins для автоматического тестирования. На этапе тестового запуска я хочу извлечь неудачные тесты из журнала. я использую groovy функцию для извлечения результата теста. эта функция не является частью конвейера jenkins. Это другой файл сценария. Функция работает нормально и создает строку, содержащую сведения об ошибке. Внутри этапа конвейера я вызываю эту функцию и присваиваю возвращаемую строку другой переменной. Но когда я повторяю значение переменной, он печатает пустую строку.
pipeline {
agent {
kubernetes {
yamlFile 'kubernetesPod.yml'
}
}
environment{
failure_msg = ""
}
stages {
stage('Run Test') {
steps {
container('ansible') {
script {
def notify = load('src/TestResult.groovy')
def result = notify.extractTestResult("${WORKSPACE}/testreport.xml")
sh "${result}"
if (result != "") {
failure_msg = failure_msg + result
}
}
}
}
}
post {
always {
script {
sh 'echo Failure message.............${failure_msg}'
}
}
}
}
здесь 'sh 'echo ${result}'' напечатайте пустую строку. Но 'extractTestResult()' возвращает непустую строку.
Также я не могу использовать переменную окружения 'failure_msg' в разделе сообщения, она возвращает ошибку 'groovy.lang.MissingPropertyException: нет такого свойства: failure_msg для класса: groovy.lang.Binding'
может ли кто-нибудь помочь мне с этим?
РЕДАКТИРОВАТЬ:
Даже после того, как я исправил интерполяцию строк, я получал ту же ошибку. Это произошло потому, что jenkins не позволяет использовать «sh» внутри контейнера докеров. на доске вопросов jenkins есть открытый тикет об ошибке
failure_msg
здесь устанавливается не как переменная среды, а как глобальная переменная Groovy. Разница в том, что переменные среды (env.failure_msg
) доступны для вложенных оболочек, вызываемых сценарием конвейера, тогда как глобальные переменные Groovy недоступны. При использовании двойных кавычек сsh
именно Groovy интерполирует переменную, а не оболочка. - person Dibakar Aditya   schedule 21.11.2019