From 863da17ee088e9e50434313694da0ab65333f725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Sat, 28 Mar 2026 20:47:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8heredoc=E6=9E=84?= =?UTF-8?q?=E5=BB=BAJSON=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E9=80=9A=E7=9F=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 heredoc 构建 JSON 数据,避免复杂的转义 - 为环境变量添加默认值,避免空值问题 - 简化 MESSAGE_CLEAN 处理,移除换行符和引号 - 本地测试验证成功 --- .woodpecker.yml | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index d2a4e4e..257c549 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -420,13 +420,14 @@ steps: from_secret: wechat_webhook commands: - | - STATUS="${CI_PIPELINE_STATUS}" - BRANCH="${CI_COMMIT_BRANCH}" - COMMIT="${CI_COMMIT_SHA:0:7}" - MESSAGE="${CI_COMMIT_MESSAGE}" - AUTHOR="${CI_COMMIT_AUTHOR}" - PIPELINE_NUMBER="${CI_PIPELINE_NUMBER}" - PIPELINE_URL="https://ci.f.novalon.cn/repos/${CI_REPO_ID}/pipeline/${PIPELINE_NUMBER}" + STATUS="${CI_PIPELINE_STATUS:-unknown}" + BRANCH="${CI_COMMIT_BRANCH:-unknown}" + COMMIT="${CI_COMMIT_SHA:0:7:-unknown}" + MESSAGE="${CI_COMMIT_MESSAGE:-no message}" + AUTHOR="${CI_COMMIT_AUTHOR:-unknown}" + PIPELINE_NUMBER="${CI_PIPELINE_NUMBER:-0}" + REPO_ID="${CI_REPO_ID:-1}" + PIPELINE_URL="https://ci.f.novalon.cn/repos/${REPO_ID}/pipeline/${PIPELINE_NUMBER}" if [ "$STATUS" = "success" ]; then STATUS_TEXT="成功" @@ -438,17 +439,23 @@ steps: TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") - # 转义特殊字符(简化处理) - MESSAGE_ESCAPED=$(echo "$MESSAGE" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | tr '\n' ' ') + # 简化处理:移除换行符和引号 + MESSAGE_CLEAN=$(echo "$MESSAGE" | tr '\n' ' ' | tr '"' "'") + + # 使用 heredoc 构建 JSON,避免复杂的转义 + JSON_DATA=$(cat < **构建状态**: ${STATUS_TEXT}\n\n**项目信息**\n> 分支: \`${BRANCH}\`\n> 提交: \`${COMMIT}\`\n> 作者: ${AUTHOR}\n\n**提交信息**\n> ${MESSAGE_CLEAN}\n\n**操作**\n> [查看构建详情](${PIPELINE_URL})\n\n---\n> 时间: ${TIMESTAMP}\n> Pipeline #${PIPELINE_NUMBER}" + } + } + EOF + ) curl -X POST "$WECHAT_WEBHOOK" \ -H 'Content-Type: application/json' \ - -d "{ - \"msgtype\": \"markdown\", - \"markdown\": { - \"content\": \"## 🚀 Novalon Website 部署通知\\n\\n> **构建状态**: ${STATUS_TEXT}\\n\\n**项目信息**\\n> 分支: \`${BRANCH}\`\\n> 提交: \`${COMMIT}\`\\n> 作者: ${AUTHOR}\\n\\n**提交信息**\\n> ${MESSAGE_ESCAPED}\\n\\n**操作**\\n> [查看构建详情](${PIPELINE_URL})\\n\\n---\\n> 时间: ${TIMESTAMP}\\n> Pipeline #${PIPELINE_NUMBER}\" - } - }" + -d "$JSON_DATA" when: event: - push