Jenkins自动发送飞书消息

本文介绍了如何通过飞书开发者平台的接口,使用shell脚本实现Jenkins构建任务完成后向飞书用户发送消息的过程,包括获取飞书token和用户ID,以及发送消息的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

公司办公软件用的是飞书套壳,本文主要介绍如何通过飞书机器人发送Jenkins构建的进度和消息。

方法

前置条件

  1. 创建一个飞书机器人
  2. 搭建好Jenkins
  3. 创建好构建任务

过程

  1. 根据飞书开发者平台的接口文档,用shell脚本封装一套调用飞书机器人发送消息接口的函数。
  2. 在需要的时候调用即可

Code

这里贴一下代码,如果需要自己使用的话请修改你的app_idapp_secret

#!/bin/bash
###
 # @Author: qile qile.ref@haier.com
 # @Date: 2023-07-27 15:03:41
 # @LastEditors: qile qile.ref@haier.com
 # @LastEditTime: 2023-08-17 11:05:49
 # @FilePath: /linux_build_system/test.sh
 # @Description: 通过飞书机器人发送消息
### 

# 获取飞书 token
function get_feishu_token() {
    url='https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal'
    headers='Content-Type: application/json; charset=utf-8'
    payload='{"app_id": "cli_a226XXXXXXXXXXXX", "app_secret": "xXgQ4GmjEJx7BXXXXXXXXXXXXXXXXXXXXXX"}'

    response=$(curl -s -X POST -H "$headers" -d "$payload" $url)
    status_code=$(echo $response | jq -r '.code')
    if [ $status_code -eq 0 ]; then
        token=$(echo $response | jq -r '.tenant_access_token')
        echo $token
    else
        msg=$(echo $response | jq -r '.msg')
        echo "获取 token 失败: $msg"
        exit 1
    fi
}

# 获取用户 ID
function get_user_id() {
    url='https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id?user_id_type=open_id'
    token=$1
    headers='Content-Type: application/json; charset=utf-8'
    headers2="Authorization: Bearer $token"
    payload="{\"emails\": [\"$2\"]}"
    # echo $payload
    response=$(curl -s -X POST -H "$headers" -H "$headers2" -d "$payload" $url)

    status_code=$(echo $response | jq -r '.code')
    if [ $status_code -eq 0 ]; then
        user_id=$(echo $response | jq -r '.data.user_list[0].user_id')
        echo $user_id
    else
        msg=$(echo $response | jq -r '.msg')
        echo "获取用户ID失败: $msg"
        exit 1
    fi
}

# 发送消息
function send_message() {
    url='https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id'
    token=$1
    headers='Content-Type: application/json; charset=utf-8'
    headers2="Authorization: Bearer $token"
    echo $2
    response=$(curl -s -X POST -H "$headers" -H "$headers2" -d "$2" $url)
    status_code=$(echo $response | jq -r '.code')
    if [ $status_code -eq 0 ]; then
        echo "消息发送成功"
    else
        msg=$(echo $response | jq -r '.msg')
        echo "消息发送失败: $msg"
        exit 1
    fi
}




# 使用方法如下:
# 1. 获取飞书 token
token=$(get_feishu_token)
echo $token
# 2. 获取用户 ID
userId=$(get_user_id $token qil.ref@haier.com)
echo $userId
# 3. 发送消息
payload="{\"msg_type\":\"text\",\"receive_id\":\"$userId\",\"content\":\"{\\\"text\\\":\\\"您提交的构建已完成[点击下载](https://www.baidu.com)\\\"}\"}"
send_message $token $payload

总结

本文给出了详细的shell脚本代码,实现了将Jenkins构建消息发送到飞书的功能。欢迎白嫖!!!

### 使用 Jenkins HTTP Request 插件发送飞书通知 为了在 Jenkins 中使用 HTTP Request 插件来发送飞书通知消息,需先确保已安装并配置好该插件[^1]。 #### 安装与配置 HTTP Request 插件 进入 Jenkins 的“系统管理” -> “插件管理”,于“可选插件”标签页内查找名为“HTTP Request”的插件完成其安装过程。这一步骤为后续操作奠定基础。 #### 编写 Groovy 脚本来调用飞书 Webhook API 发送消息 利用 Jenkins Pipeline 或者自由风格项目中的构建步骤执行 Groovy 脚本,此脚本负责构造请求体并向指定 URL 发起 POST 请求以触发飞书机器人的响应: ```groovy // 构建 JSON 格式的 payload 数据结构用于传递给 webhook 接口 def jsonPayload = JsonOutput.toJson([ msg_type : "text", content : [ text: "${env.JOB_NAME}#${env.BUILD_NUMBER}\n状态:${currentBuild.result}" ] ]) // 执行 httpPost 方法向目标地址提交数据包 httpRequest( url : 'https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-id', contentType : 'APPLICATION_JSON', customHeaders: [[name:'Content-Type', value:'application/json']], httpMode : 'POST', requestBody : jsonPayload, validResponseCodes: '200' ) ``` 上述代码片段展示了如何创建一个简单的文本类型的飞书消息,并将其作为 JSON 对象序列化后通过 `httpRequest` 函数发出。注意替换 `'https://open.feishu.cn/open-apis/bot/v2/hook/your-webbook-id'` 为你自己的飞书机器人 WebHook 地址[^2]。 #### 将发送逻辑集成至 Jenkins Job 可以将以上定义好的 Groovy 脚本放置在一个独立的任务阶段里,在整个 CI/CD 流程结束时运行;也可以直接嵌入到现有的 pipeline script 当中去。这样每当有新的 build 结束之后就会自动触发改部分从而实现自动化的通知机制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值