使用jenkins管道,当在构建日志中找到一个单词(例如“ FATAL”)时,我想使构建失败。
有一个Text Finder插件可以在自由式作业中执行此操作,但不能在管道中使用它。
答案 0 :(得分:1)
您可以使用Log Parser Plugin,它也支持Jenkins Pipeline作业。它为我们工作。
我们在Manage Jenkins->Configure System->Console Output Parsing
中配置了一些全局规则。在那里配置的文件放置在Jenkins Master可访问的位置,例如
# /home/jenkins/default.rules (on the jenkins master machine)
error /ERROR/
例如具有称为“默认”的规则集,该规则集引用了/home/jenkins/default.rules' you could use the following (the
parsingRulesPath you can get using the snippet generator selecting
默认`规则):
echo "ERROR: Some error"
node {
step([$class: 'LogParserPublisher',
failBuildOnError: true,
parsingRulesPath: '/home/jenkins/default.rules',
useProjectRule: false])
}
结果表明,不需要全局配置条目。您还可以使用工作区中的规则,例如:
echo "ERROR: Some error"
node {
// Usually I assume a project rules file will be stored in
// some repository and are not generated on the fly
writeFile(file: 'project.rules', text:
'''
error /ERROR/
''')
step([$class: 'LogParserPublisher',
failBuildOnError: true,
projectRulePath: 'project.rules',
useProjectRule: true])
}
尽管上面的示例是针对脚本化管道的,但也应该很容易将它们应用于声明性管道。
答案 1 :(得分:0)
这有效
pipeline {
agent any
stages {
stage('Build') {
steps {
sh '''
echo Blabla
echo FATAL error
'''
}
}
stage('Results') {
steps {
script {
def logz = currentBuild.rawBuild.getLog(10000);
def result = logz.find { it.contains('FATAL') }
if (result) {
error ('Failing due to ' + result)
}
}
}
}
}
}
但是需要获得Jenkins管理员的一些脚本批准。
并且有一个批准请求,其中指出“批准此签名可能会引入安全漏洞!建议您拒绝它。”