我正在努力添加用于自动化测试的詹金斯声明式管道。在测试运行阶段,我想从日志中提取失败的测试。我正在使用常规函数来提取测试结果。该函数不是詹金斯管道的一部分。这是另一个脚本文件。该函数工作正常,它构建了一个包含失败详细信息的字符串。在管道阶段内,我调用此函数并将返回的字符串分配给另一个变量。但是当我回显变量值时,它会打印空字符串。
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'
谁能帮我解决这个问题吗?
EDIT:
即使在我修复了字符串插值之后,我也得到了相同的结果
错误。那是因为 jenkins 不允许在内部使用 'sh'
码头集装箱。有一个开放的错误票詹金斯问题
木板 https://issues.jenkins-ci.org/browse/JENKINS-58657
我建议使用全局变量来保存错误消息。我的猜测是该变量不存在于您的范围内。
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问题可以找到here https://stackoverflow.com/questions/52063864/using-global-variables-in-jenkins-pipeline)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)