У меня есть скрипт nodeJS, который возвращает ненулевые коды выхода, и я запускаю этот скрипт с плагином Powershell в Jenkins в конвейерном задании. Я хотел бы использовать эти коды выхода в конвейере для установки статусов сборки. Я вижу ненулевые коды выхода, например с echo в powershell, но с использованием 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? Или есть какой-то другой способ добиться этого, полностью отличающийся от того, что я пытаюсь сделать здесь?
UPDATE:
В конце концов я отказался от идеи кодов выхода на данный момент и пошел еще более уродливым, хакерским путем: - (
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, Как я могу использовать этот плагин с jenkinsfile? в качестве ответа на этот вопрос.
Если это единственный способ, я думаю, мне придется с этим жить.