You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产环境Jenkins获取无编码可读构建日志方法咨询

解决方案:获取Jenkins干净构建日志并作为附件发送

由于生产环境无法安装插件,我们可以通过Jenkins API获取原始日志 + 命令行过滤清理 + 邮件发送的流程实现需求,具体步骤如下:

1. 通过Jenkins API获取构建原始日志

使用Jenkins的consoleText端点可直接获取纯文本格式的构建日志,无需处理分页。请求需带上认证信息(用户名+API Token,可在Jenkins个人设置中生成)。

基础命令(无CSRF保护):

# 替换为你的Jenkins地址、任务名、构建编号、用户名和API Token
curl -u "your-username:your-api-token" "http://your-jenkins-url/job/your-job-name/your-build-number/consoleText" > raw-build-log.txt

若Jenkins启用CSRF保护:

先获取crumb,再发起请求:

# 获取CSRF crumb
CRUMB=$(curl -u "your-username:your-api-token" "http://your-jenkins-url/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)")

# 获取日志
curl -u "your-username:your-api-token" -H "$CRUMB" "http://your-jenkins-url/job/your-job-name/your-build-number/consoleText" > raw-build-log.txt

2. 清理日志中的乱码和Base64内容

日志中的[8m...[0m属于ANSI控制序列(用于终端颜色/格式),内部包含的长串Base64内容可通过命令行工具过滤:

组合过滤命令:

# 步骤1:移除所有ANSI控制序列(包括颜色、格式代码)
# 步骤2:移除长串Base64字符(匹配长度≥80的Base64特征字符串)
sed -e 's/\x1b\[[0-9;]*m//g' raw-build-log.txt | sed -E 's/[A-Za-z0-9+/=]{80,}//g' > clean-build-log.txt

说明:

  • 第一个sed命令移除所有\x1b[xxm格式的ANSI控制码,解决终端格式干扰问题
  • 第二个sed命令匹配并删除长度超过80的Base64特征字符串(由字母、数字、+、/、=组成),过滤掉日志中的编码垃圾内容

3. 将干净日志作为附件发送邮件

使用系统自带的mailx(或sendmail)工具发送带附件的邮件,无需额外依赖:

# 替换收件人、邮件主题和内容
mailx -s "Build #your-build-number 执行完成日志" -a clean-build-log.txt recipient@example.com << EOF
构建#your-build-number已完成,附件为清理后的可读日志。
EOF

4. 整合到Jenkins构建后步骤

将上述命令整合成Shell脚本,添加到Jenkins构建的Post-build Actions → Execute shell中(建议使用Jenkins凭据管理存储API Token,避免明文泄露):

示例脚本(使用Jenkins内置变量):

#!/bin/bash
JENKINS_URL="http://your-jenkins-url"
USERNAME="your-username"
API_TOKEN="${JENKINS_API_TOKEN}" # 从Jenkins凭据中引用

# 获取CSRF crumb(若启用)
CRUMB=$(curl -u "${USERNAME}:${API_TOKEN}" "${JENKINS_URL}/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)")

# 获取原始日志
curl -u "${USERNAME}:${API_TOKEN}" -H "$CRUMB" "${JENKINS_URL}/job/${JOB_NAME}/${BUILD_NUMBER}/consoleText" > raw-log.txt

# 清理日志
sed -e 's/\x1b\[[0-9;]*m//g' raw-log.txt | sed -E 's/[A-Za-z0-9+/=]{80,}//g' > clean-log.txt

# 发送邮件
mailx -s "Build #${BUILD_NUMBER} 完成日志" -a clean-log.txt dev-team@example.com << EOF
构建#${BUILD_NUMBER}已执行完成,附件为清理后的可读日志。
EOF

# 清理临时文件
rm raw-log.txt clean-log.txt

这样就能在构建完成后自动生成并发送干净的可读日志附件,完全无需安装任何Jenkins插件。

内容的提问来源于stack exchange,提问作者HelpNeeder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:45:08