author: jwensh & gpt
date: 2024.10.08
要使用 Telegram 机器人发送 Jenkins 任务告警,步骤可以分为以下几个部分:创建 Telegram 机器人、配置 Jenkins 插件或者使用自定义脚本,将 Jenkins 任务的状态通过 Telegram 机器人通知给你。具体流程如下:
1. 创建 Telegram 机器人
1.1 与 BotFather 创建机器人
-
打开 Telegram,搜索
BotFather
,这个是 Telegram 官方的机器人创建和管理工具。 -
向 BotFather 发送
/start
,然后发送/newbot
创建新机器人。 -
按照 BotFather 的指示,设置机器人的名称和用户名。完成后,BotFather 会生成一个 Token,这是后续连接机器人所需要的。
- 例如,BotFather 会提供类似
123456789:ABCDEF1234567890abcdef1234567890
这样的 Token。请记录这个 Token。
- 例如,BotFather 会提供类似
1.2 获取你的 Telegram 用户 ID
- 打开 Telegram,搜索
userinfobot
或IDBot
。 - 向该机器人发送
/start
,它会返回你的用户 ID,格式类似123456789
。
2. Jenkins 中配置 Telegram 通知
2.1 使用 Jenkins 插件
Jenkins 提供了专门的插件,可以方便地集成 Telegram 机器人来发送通知。
1. 安装 Jenkins 的 Telegram Notification 插件
- 在 Jenkins 主界面,点击 Manage Jenkins(管理 Jenkins)。
- 点击 Manage Plugins(插件管理)。
- 选择 Available 选项卡,搜索 Telegram Notifications 插件,安装该插件。
2. 配置 Telegram 插件
- 安装完成后,回到 Jenkins 主界面,点击 Manage Jenkins。
- 点击 Configure System。
- 滚动页面,找到 Telegram Notifier 配置部分。
- 在 Bot Token 中输入之前从 BotFather 获得的 Token。
- 在 Chat ID 中输入你从
userinfobot
获得的用户 ID。
3. 配置 Jenkins Job 的通知
- 进入你想要配置告警的 Jenkins Job。
- 点击 Configure。
- 在 Post-build Actions 部分,点击 Add post-build action ,选择 Telegram Notifications。
- 配置什么时候发送通知,比如 on failure (任务失败时通知)或 on success(任务成功时通知)。
你可以自定义消息内容,也可以保持默认配置。
2.2 使用自定义脚本(Shell + Python)
如果你不想使用插件,可以使用一个简单的脚本来通过 Telegram 发送 Jenkins 任务告警。你可以在 Jenkins 中配置这个脚本,在任务执行结束后,自动发送告警。
1. 编写 Python 脚本
创建一个 Python 脚本,用于发送消息到 Telegram。
python
import requests
def send_telegram_message(token, chat_id, message):
url = f"https://api.telegram.org/bot{token}/sendMessage"
payload = {
"chat_id": chat_id,
"text": message,
"parse_mode": "HTML"
}
response = requests.post(url, data=payload)
if response.status_code == 200:
print("Message sent successfully")
else:
print(f"Failed to send message: {response.status_code}, {response.text}")
if __name__ == "__main__":
# 在这里填写你的 Bot Token 和 Chat ID
bot_token = "123456789:ABCDEF1234567890abcdef1234567890"
chat_id = "123456789"
# Jenkins 通知消息
message = "Jenkins 任务状态告警: 构建成功/失败"
send_telegram_message(bot_token, chat_id, message)
2. Jenkins 中调用 Python 脚本
- 将上面的脚本保存为
send_telegram_alert.py
。 - 在 Jenkins Job 中的 Post-build Actions ,选择 Execute shell,添加以下内容:
bash
python3 /path/to/send_telegram_alert.py
其中,/path/to/send_telegram_alert.py
是你刚刚保存 Python 脚本的完整路径。
3. 动态发送告警
你可以根据构建结果动态修改发送的消息。比如,使用环境变量来判断构建状态:
bash
if [ "$BUILD_STATUS" == "SUCCESS" ]; then
python3 /path/to/send_telegram_alert.py "Build successful"
else
python3 /path/to/send_telegram_alert.py "Build failed"
fi
3. 总结
你可以通过以下两种方式将 Jenkins 任务的状态发送到 Telegram:
- 使用插件:安装 Telegram Notifications 插件,配置 Bot Token 和 Chat ID,然后在每个 Job 中设置通知条件,非常方便。
- 使用脚本:通过 Python 脚本结合 Jenkins Shell,灵活定制通知的内容和条件。