#!/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="通过" ;; FAILURE) STATUS_TAG="失败" ;; UNSTABLE) STATUS_TAG="不稳定" ;; *) STATUS_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}"