Jenkins父任务获取子任务日志遇ErrorAction错误及权限问题
Jenkins父任务提取子任务日志并触发邮件的问题解决
1. 解决子任务失败/不稳定时父流水线终止的问题
得在build步骤里加propagate: false,这样不管子任务是成功、失败还是不稳定,父流水线都能继续执行,顺利拿到子任务的构建对象。修改后的代码片段:
def triggeredJob = build job: 'Pipeline1', propagate: false
2. 搞定脚本权限被拦截的问题
出现Scripts not permitted to use method hudson.model.Run getLog int是因为Jenkins的脚本安全机制限制了getLog方法的调用,需要手动授权:
- 登录Jenkins,进入Manage Jenkins > In-process Script Approval
- 在待审批的签名列表里找到
method hudson.model.Run getLog int,点击Approve完成授权
如果没看到这个签名,先触发一次父流水线触发权限检查,再回来审批即可。
3. 完整父流水线脚本(含日志检查与邮件触发)
pipeline { agent any stages { stage('验证子任务') { steps { script { echo "触发子任务构建" // 禁用异常传播,保证子任务状态不中断父流水线 def triggeredJob = build job: 'Pipeline1', propagate: false // 获取子任务最后100行日志 def logs = triggeredJob.rawBuild.getLog(100) echo "子任务日志:$logs" // 检查目标字符串,示例为"Hello World" def targetStr = "Hello World" if (logs.contains(targetStr)) { echo "检测到目标字符串:$targetStr" // 发送邮件(基于Email Extension插件,根据实际配置调整) emailext( subject: "子任务日志检测到目标内容", body: "子任务构建状态:${triggeredJob.result}\n日志片段:\n${logs.join('\n')}", to: "你的邮箱@xxx.com" ) } else { echo "未检测到目标字符串:$targetStr" } } } } } // 可选:无论父流水线结果如何,执行全局逻辑(比如统一通知) post { always { // 可添加全局邮件通知,例如告知父流水线执行完成 } } }
4. 修正子任务测试脚本
原脚本里的steps1是拼写错误,应改为steps;若要测试失败/不稳定状态,可按以下方式修改:
pipeline { agent any stages { stage('Hello') { steps { echo 'Hello World' // 模拟构建失败 error "测试构建失败" // 或者模拟不稳定状态: // unstable "测试构建不稳定" } } } }
关键注意点
- 确保Jenkins已安装Email Extension Plugin(使用
emailext发送邮件时需要) - 脚本审批完成后,后续流水线执行不会再触发权限错误
triggeredJob.result可获取子任务的构建状态(SUCCESS/FAILURE/UNSTABLE等),可用于丰富邮件内容或添加额外逻辑判断
内容的提问来源于stack exchange,提问作者QualityMatters
相关产品推荐
相关产品推荐

