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

如何从Jenkins向Mattermost发送附件(如日志文件)?附件发送报错问题求助

解决Jenkins向Mattermost发送附件的问题

我来帮你搞定这个麻烦!你遇到的WARNING: Unknown parameter(s) found for class type 'jenkins.plugins.mattermost.workflow.MattermostSendStep': attachments错误,本质是当前使用的Jenkins Mattermost插件版本不支持attachments参数,或者你混淆了插件参数的用法(插件的attachments其实是富文本消息卡片,不是直接传文件附件)。下面是几种可行的解决思路:


方法一:升级Mattermost插件到支持附件的版本

旧版本的Mattermost Jenkins插件(比如v2.x及更早)确实没有attachments这个参数,需要升级到v3.x及以上版本:

  1. 进入Jenkins后台 → 「插件管理」→ 「已安装插件」
  2. 找到「Mattermost Notification」插件,点击「升级」,完成后重启Jenkins
  3. 升级后,你可以使用插件的attachments参数发送富文本消息卡片(如果需要传实际文件,还是得结合API,往下看),示例Pipeline代码:
mattermostSend(
    channel: 'your-build-alerts',
    message: '构建任务已完成',
    attachments: [
        [
            title: '构建详情',
            text: '点击查看完整构建日志',
            color: currentBuild.currentResult == 'SUCCESS' ? '#00FF00' : '#FF0000',
            fields: [
                [title: '构建编号', value: env.BUILD_NUMBER, short: true],
                [title: '状态', value: currentBuild.currentResult, short: true],
                [title: '日志链接', value: env.BUILD_URL + 'console', short: false]
            ]
        ]
    ]
)

方法二:直接调用Mattermost API上传文件附件

如果不想升级插件,或者需要发送实际的日志文件,直接用Mattermost的官方API配合Jenkins的curl命令是最可靠的方式:

  1. 先在Mattermost中创建一个机器人账号,获取它的访问令牌(在Mattermost后台 → 集成 → 机器人账号)
  2. 找到目标频道的channel_id(可以通过Mattermost API的/api/v4/channels/name/{channel_name}接口查询)
  3. 在Jenkins Pipeline中添加如下步骤:
stage('发送Mattermost日志附件') {
    steps {
        script {
            // 第一步:上传日志文件到Mattermost
            def uploadResult = sh(
                script: '''
                curl -s -X POST -H "Authorization: Bearer YOUR_MATTERMOST_BOT_TOKEN" \
                -F "files=@./build/logs/console.log" \
                https://your-mattermost-domain.com/api/v4/files
                ''',
                returnStdout: true
            ).trim()
            
            // 解析上传后的文件ID
            def fileId = new groovy.json.JsonSlurper().parseText(uploadResult).id[0]
            
            // 第二步:发送消息并关联上传的文件
            sh """
            curl -s -X POST -H "Authorization: Bearer YOUR_MATTERMOST_BOT_TOKEN" \
            -H "Content-Type: application/json" \
            -d '{
                "channel_id": "YOUR_CHANNEL_ID",
                "message": "本次构建的日志文件已附上",
                "file_ids": ["${fileId}"]
            }' https://your-mattermost-domain.com/api/v4/posts
            """
        }
    }
}
  • 记得替换代码中的YOUR_MATTERMOST_BOT_TOKEN、your-mattermost-domain.com、YOUR_CHANNEL_ID和日志文件路径
  • 这种方法不依赖Jenkins插件版本,灵活性更高

方法三:直接在消息中嵌入小日志内容

如果日志文件不大(比如几百行以内),可以直接把日志内容作为代码块嵌入到消息里:

mattermostSend(
    channel: 'your-build-alerts',
    message: "本次构建日志:\n```\n${readFile('./build/logs/console.log')}\n```"
)
  • 用三个反引号包裹日志内容,Mattermost会自动格式化显示为代码块,可读性不错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:19:05