You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Curl向Slack频道发送自定义Jenkins通知?

搞定Curl发送Slack版本通知的小问题

嘿,我看你在尝试用curl给团队Slack频道发版本和S3链接的通知,脚本里有几个容易踩的小坑,我帮你梳理并修正,还优化了消息的可读性,让团队成员看起来更舒服~

先说说你当前脚本的几个问题

  1. JSON引号嵌套混乱:你写的payload里引号混用,导致JSON格式不合法,Slack根本无法识别;
  2. curl参数冲突:同时用了--data-urlencode-d,这两个参数不能同时使用,选其一即可;
  3. 消息可读性差:直接把版本号和链接堆在一起,团队成员阅读费劲,不如用Slack支持的格式美化下。

修正后的完整脚本(推荐用这个,格式更专业)

# 定义版本变量
version=1.2.4
bundleversion=1.3.4.5
# 替换成你的实际S3链接
S3_LINK="https://your-bucket.s3.amazonaws.com/path/to/your-asset"

# 用Slack的Blocks组件构造结构化消息,可读性拉满
SLACK_MSG=$(cat <<EOF
{
  "text": "📢 新版本发布通知",
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*版本详情*\n> 应用版本: \`$version\`\n> Bundle版本: \`$bundleversion\`"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*下载地址*\n> S3直接访问: <$S3_LINK|点击跳转>"
      }
    }
  ]
}
EOF
)

# 发送到你的Slack Webhook地址(替换成团队频道的专属Webhook)
curl -H "Content-type: application/json" -X POST -d "$SLACK_MSG" "https://hooks.slack.com/services/XXX/XXX/XXX"

为啥这么写?给你拆解说清楚:

  • Slack Webhook URL:这个必须替换成你团队频道的专属地址,去Slack的「Incoming Webhooks」应用里创建就能拿到,还能提前测试连通性;
  • Blocks组件:Slack官方推荐的结构化消息方式,分块展示信息,比纯文本清爽太多,支持标题、分段、格式化文本;
  • here-doc写法:用<<EOF包裹JSON,避免了引号转义的麻烦,变量直接用$version就能嵌入,省心;
  • Markdown美化:用*加粗标题、`包裹版本号(像代码一样醒目)、<链接|显示文本>把S3地址转成可点击的按钮,团队成员一点就跳。

要是嫌复杂,给你个简化版

如果不需要这么规整的结构,纯文本版本也能用,只是可读性稍差:

version=1.2.4
bundleversion=1.3.4.5
S3_LINK="https://your-bucket.s3.amazonaws.com/path/to/your-asset"

SLACK_MSG='{
  "text": "📢 新版本发布啦!\n- 应用版本: *'"$version"'*\n- Bundle版本: *'"$bundleversion"'*\n- S3下载链接: <'"$S3_LINK"'|点击直接访问>"
}'

curl -H "Content-type: application/json" -X POST -d "$SLACK_MSG" "https://hooks.slack.com/services/XXX/XXX/XXX"

最后给你几个排查小技巧

  • 发送失败先查Webhook地址对不对,Slack的Webhook页面有测试按钮,先测通再写脚本;
  • 验证JSON格式:装个jq工具,用echo "$SLACK_MSG" | jq .检查,有语法错误会直接提示;
  • 看请求日志:curl加-v参数,比如curl -v -H ...,能看到请求的详细过程,方便找问题。

内容的提问来源于stack exchange,提问作者kalyan

火山引擎 最新活动