从脚本返回的值未分配给在 jenkins 声明性管道阶段中声明的变量
Value returned from a script does not assigned to a variable declared in jenkins declarative pipeline stage
我正在为自动化测试添加一个 jenkins 声明管道。在测试 运行 阶段,我想从日志中提取失败的测试。我正在使用 groovy 函数来提取测试结果。此功能不是詹金斯管道的一部分。这是另一个脚本文件。该函数运行良好,它构建了一个包含失败详细信息的字符串。在管道阶段内,我正在调用此函数并将 returned 字符串分配给另一个变量。但是当我回显变量值时它打印空字符串。
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()' return 是一个非空字符串。
我也无法在 post 部分使用环境变量 'failure_msg' 它 return 一个错误 'groovy.lang.MissingPropertyException: No such property: failure_msg for class: groovy.lang.Binding'
谁能帮我解决这个问题?
编辑:
Even after i fixed the string interpolation, i was getting the same
error. That was because jenkins does not allow using 'sh' inside
docker container. there is an open bug ticket in jenkins issue
board
我建议使用全局变量来保存错误消息。我的猜测是该变量不存在于您的范围内。
def FAILURE_MSG // Global Variable
pipeline {
...
stages {
stage(...
steps {
container('ansible') {
script {
...
if (result != "") {
FAILURE_MSG = FAILURE_MSG + result
}
}
}
}
}
post {
always {
script {
sh "${FAILURE_MSG}" // Hint: Use correct String Interpolation
}
}
}
}
(类似的SO问题可以找)
我正在为自动化测试添加一个 jenkins 声明管道。在测试 运行 阶段,我想从日志中提取失败的测试。我正在使用 groovy 函数来提取测试结果。此功能不是詹金斯管道的一部分。这是另一个脚本文件。该函数运行良好,它构建了一个包含失败详细信息的字符串。在管道阶段内,我正在调用此函数并将 returned 字符串分配给另一个变量。但是当我回显变量值时它打印空字符串。
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()' return 是一个非空字符串。
我也无法在 post 部分使用环境变量 'failure_msg' 它 return 一个错误 'groovy.lang.MissingPropertyException: No such property: failure_msg for class: groovy.lang.Binding'
谁能帮我解决这个问题?
编辑:
Even after i fixed the string interpolation, i was getting the same error. That was because jenkins does not allow using 'sh' inside docker container. there is an open bug ticket in jenkins issue board
我建议使用全局变量来保存错误消息。我的猜测是该变量不存在于您的范围内。
def FAILURE_MSG // Global Variable
pipeline {
...
stages {
stage(...
steps {
container('ansible') {
script {
...
if (result != "") {
FAILURE_MSG = FAILURE_MSG + result
}
}
}
}
}
post {
always {
script {
sh "${FAILURE_MSG}" // Hint: Use correct String Interpolation
}
}
}
}
(类似的SO问题可以找