Files
jenkins-shell-scripts/feishu_notify.sh
2026-02-09 11:05:32 +08:00

70 lines
1.8 KiB
Bash

#!/bin/bash
set -e
# ===== 参数校验 =====
: "${FEISHU_WEBHOOK:?FEISHU_WEBHOOK not set}"
: "${JENKINS_API_CREDENTIAL:?JENKINS_API_CREDENTIAL not set}"
# ===== 获取构建状态 =====
getBuildState() {
local buildNr=$1
curl -s -u "${JENKINS_API_CREDENTIAL}" \
"${BUILD_URL}api/json" \
| grep -Po '"result":\s*"\K\w+'
}
BUILD_STATUS=$(getBuildState "$BUILD_NUMBER")
# ===== 状态标签 =====
case "$BUILD_STATUS" in
SUCCESS)
STATUS_TAG="<text_tag color='turquoise'>通过</text_tag>"
;;
FAILURE)
STATUS_TAG="<text_tag color='red'>失败</text_tag>"
;;
UNSTABLE)
STATUS_TAG="<text_tag color='orange'>不稳定</text_tag>"
;;
ABORTED)
STATUS_TAG="<text_tag color='neutral'>已中止</text_tag>"
;;
*)
STATUS_TAG="<text_tag color='neutral'>未知状态</text_tag>"
;;
esac
# ===== 变量整理 =====
COMMIT_DIFF_URL="${BUILD_URL}changes"
COMMIT_DIFF="[查看变更记录](${COMMIT_DIFF_URL})"
BUILD_TITLE="${JOB_NAME}"
PUBLISH_ENVS="${PUBLISH_ENVS:-production}"
BUILD_BRANCH="${BRANCH_NAME:-unknown}"
TRIGGER_BY="${BUILD_USER:-unknown}"
# ===== 发送飞书通知 =====
curl -s -X POST -H "Content-Type: application/json" \
-d '{
"msg_type": "interactive",
"card": {
"type": "template",
"data": {
"template_id": "AAq2iv39m3lv5",
"template_version_name": "1.0.5",
"template_variable": {
"build_title": "'"${BUILD_TITLE}"'",
"status_tag": "'"${STATUS_TAG}"'",
"build_number": "'"${BUILD_NUMBER}"'",
"publish_envs": "'"${PUBLISH_ENVS}"'",
"commit_diff": "'"${COMMIT_DIFF}"'",
"build_branch": "'"${BUILD_BRANCH}"'",
"trigger_by": "'"${TRIGGER_BY}"'",
"build_url": {
"url": "'"${BUILD_URL}"'"
}
}
}
}
}' "${FEISHU_WEBHOOK}"