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

Jenkins:为Jenkins流水线实现自动化通知

Jenkins流水线步骤状态推送Teams频道的最佳实现方案

下面是几个经过实践验证的最佳方案,你可以根据团队的技术栈和需求选择:

方案一:使用Jenkins Microsoft Teams官方插件

这是最直接的方案,利用Jenkins官方维护的插件实现通知,配置成本低。

步骤:

  1. 在Jenkins插件市场安装Microsoft Teams Notification插件
  2. 在Teams目标频道中创建传入Webhook,复制生成的Webhook URL
  3. 在Jenkins系统配置中,添加Teams服务端点,填入Webhook URL
  4. 在流水线中调用teamsSendNotification方法,在每个部署步骤的开始、成功、失败阶段发送通知

流水线示例:

pipeline {
    agent any
    stages {
        stage('部署环境准备') {
            steps {
                script {
                    // 发送步骤启动通知
                    teamsSendNotification(
                        title: "部署步骤启动: 环境准备",
                        text: "流水线 `${env.JOB_NAME}` 开始执行环境准备步骤,构建号: ${env.BUILD_NUMBER}",
                        color: "0078D7" // 蓝色标识进行中
                    )
                    // 实际部署操作
                    sh "echo 执行环境准备操作..."
                    // 发送步骤成功通知
                    teamsSendNotification(
                        title: "部署步骤完成: 环境准备",
                        text: "流水线 `${env.JOB_NAME}` 环境准备步骤执行成功,构建号: ${env.BUILD_NUMBER}",
                        color: "00CC66" // 绿色标识成功
                    )
                }
            }
            post {
                failure {
                    // 步骤失败时发送通知
                    teamsSendNotification(
                        title: "部署步骤失败: 环境准备",
                        text: "流水线 `${env.JOB_NAME}` 环境准备步骤执行失败,构建号: ${env.BUILD_NUMBER}\n失败原因: ${currentBuild.currentResult}",
                        color: "FF4444" // 红色标识失败
                    )
                }
            }
        }
        // 其他部署步骤可复用上述逻辑
    }
}

优缺点:

  • 优点:配置简单,官方维护稳定,无需自行处理HTTP请求
  • 缺点:消息格式定制化程度有限,复杂卡片(如带按钮、图片)需要额外配置

方案二:直接调用Teams Incoming Webhook API

如果需要高度自定义通知内容,或者不想依赖插件,可以直接通过HTTP请求调用Teams的Webhook API。

步骤:

  1. 在Teams目标频道创建传入Webhook,复制Webhook URL
  2. 在Jenkins中把Webhook URL存入凭据存储(避免硬编码)
  3. 在流水线中封装通知函数,通过curl或httpRequest步骤发送JSON格式的消息卡片

流水线示例:

pipeline {
    agent any
    environment {
        // 从Jenkins凭据中获取Webhook地址
        TEAMS_WEBHOOK_URL = credentials('teams-deploy-webhook')
    }
    stages {
        stage('应用部署') {
            steps {
                script {
                    // 发送启动通知
                    sendTeamsNotification("部署步骤启动: 应用部署", "流水线 `${env.JOB_NAME}` 开始部署应用,构建号: ${env.BUILD_NUMBER}", "0078D7")
                    // 实际部署操作
                    sh "echo 执行应用部署..."
                    // 发送成功通知
                    sendTeamsNotification("部署步骤完成: 应用部署", "流水线 `${env.JOB_NAME}` 应用部署成功,构建号: ${env.BUILD_NUMBER}", "00CC66")
                }
            }
            post {
                failure {
                    // 失败时发送通知
                    sendTeamsNotification("部署步骤失败: 应用部署", "流水线 `${env.JOB_NAME}` 应用部署失败,构建号: ${env.BUILD_NUMBER}\n失败原因: ${currentBuild.currentResult}", "FF4444")
                }
            }
        }
    }
}

// 封装通知函数
def sendTeamsNotification(String title, String text, String color) {
    def messageCard = """
    {
        "@type": "MessageCard",
        "@context": "http://schema.org/extensions",
        "themeColor": "${color}",
        "summary": "${title}",
        "sections": [
            {
                "activityTitle": "${title}",
                "activitySubtitle": "${text}",
                "markdown": true
            }
        ]
    }
    """
    // 用curl发送请求
    sh """
        curl -H "Content-Type: application/json" -d '${messageCard}' ${TEAMS_WEBHOOK_URL}
    """
}

优缺点:

  • 优点:完全自定义消息格式,支持复杂Teams卡片(如添加操作按钮、图片、多段落内容),无插件依赖
  • 缺点:需要自行处理HTTP请求逻辑,出错时排查成本略高

方案三:封装Jenkins共享库(适合多流水线场景)

如果团队有多个部署流水线,建议把Teams通知逻辑封装到Jenkins共享库中,实现代码复用,统一维护通知规则。

步骤:

  1. 搭建Jenkins共享库(将代码托管到Git仓库)
  2. 在共享库的vars目录下创建sendTeamsNotification.groovy文件,写入通知逻辑
  3. 在Jenkins系统配置中添加共享库
  4. 各个流水线中引入共享库,直接调用通知函数

共享库文件示例(vars/sendTeamsNotification.groovy):

def call(Map params) {
    def title = params.title
    def text = params.text
    def color = params.color ?: "0078D7"
    def webhookUrl = env.TEAMS_WEBHOOK_URL

    def messageCard = """
    {
        "@type": "MessageCard",
        "@context": "http://schema.org/extensions",
        "themeColor": "${color}",
        "summary": "${title}",
        "sections": [
            {
                "activityTitle": "${title}",
                "activitySubtitle": "${text}",
                "markdown": true
            }
        ]
    }
    """

    sh """
        curl -H "Content-Type: application/json" -d '${messageCard}' ${webhookUrl}
    """
}

流水线调用示例:

// 引入共享库
@Library('jenkins-shared-libs') _

pipeline {
    agent any
    environment {
        TEAMS_WEBHOOK_URL = credentials('teams-deploy-webhook')
    }
    stages {
        stage('数据库升级') {
            steps {
                script {
                    sendTeamsNotification(
                        title: "部署步骤启动: 数据库升级",
                        text: "流水线 `${env.JOB_NAME}` 开始数据库升级,构建号: ${env.BUILD_NUMBER}",
                        color: "0078D7"
                    )
                    sh "echo 执行数据库升级操作..."
                    sendTeamsNotification(
                        title: "部署步骤完成: 数据库升级",
                        text: "流水线 `${env.JOB_NAME}` 数据库升级成功,构建号: ${env.BUILD_NUMBER}",
                        color: "00CC66"
                    )
                }
            }
            post {
                failure {
                    sendTeamsNotification(
                        title: "部署步骤失败: 数据库升级",
                        text: "流水线 `${env.JOB_NAME}` 数据库升级失败,构建号: ${env.BUILD_NUMBER}\n失败原因: ${currentBuild.currentResult}",
                        color: "FF4444"
                    )
                }
            }
        }
    }
}

优缺点:

  • 优点:通知逻辑统一维护,多流水线复用,减少重复代码,便于后续扩展
  • 缺点:需要搭建和维护共享库,适合有一定Jenkins运维经验的团队

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:55:15