我有一个返回非零退出代码的nodeJS脚本,并且正在管道作业的Jenkins中使用Powershell插件运行此脚本。我想在管道中使用这些退出代码来设置构建状态。我可以看到非零退出代码,例如在Powershell中使用echo,但是使用exit $ LastExitCode始终以代码1退出。
这是我目前拥有的:
def status = powershell(returnStatus: true, script: '''
try{
node foo.js
echo $LastExitCode
exit $LastExitCode
} catch {
exit 0
}
''')
println status
if(status == 666) {
currentBuild.result = 'UNSTABLE'
return
} else if(status == 1) {
currentBuild.result = 'FAILURE'
return
} else {
currentBuild.result = 'SUCCESS'
return
}
那里的“ foo.js”文件非常简单:
console.log("Hello from a js file!");
process.exit(666);
上面的代码将构建状态设置为失败,因为println status
会显示“ 1”。因此,我的问题是,是否有可能通过Powershell插件冒泡要在管道代码中使用的非零自定义退出代码?还是有其他方法可以实现这一目标,而这与我在这里试图做的完全不同?
更新: 最终,我暂时放弃了退出代码的想法,并采用了一种更加丑陋,更加骇俗的方式:-(
import org.apache.commons.lang.StringUtils
def filterLogs(String filter_string, int occurrence) {
def logs = currentBuild.rawBuild.getLog(10000).join('\n')
int count = StringUtils.countMatches(logs, filter_string);
if (count > occurrence -1) {
currentBuild.result='UNSTABLE'
}
}
然后在运行nodeJS脚本之后的管道中:
stage ('Check logs') {
steps {
filterLogs ('Some specific string I console.log from NodeJS', 1)
}
}
我在Jenkins Text finder Plugin, How can I use this plugin with jenkinsfile?处找到了该解决方案,作为对该问题的解答。
如果那是唯一的方法,那我就不得不忍受了。