是否可以在jenkins powershell中冒充nodejs退出代码并使用该退出代码设置构建状态?

时间:2019-05-09 11:15:15

标签: node.js powershell jenkins jenkins-pipeline jenkins-groovy

我有一个返回非零退出代码的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?处找到了该解决方案,作为对该问题的解答。

如果那是唯一的方法,那我就不得不忍受了。

0 个答案:

没有答案