You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gitlab.ci.yml中用Slack POST CURL传变量时出现invalid_payload报错

问题根因

你的配置存在三个核心错误导致Slack返回invalid_payload报错:

  • 变量PASSED_COUNT转义冗余,外层多套了一层单引号,实际展开后会变成'{"passed":1}',多余的单引号直接破坏了JSON结构
  • 第一次调用curl时直接把{"passed":1}作为payload提交,不符合Slack webhook的入参要求,Slack要求payload必须包含text、blocks等必填字段
  • 直接在JSON字符串内拼接未转义的变量值,特殊字符、引号会直接导致JSON格式非法

修复后配置

send_email:
  stage: notify
  when: always
  variables:
    PASSED_COUNT: '{"passed":1}'
  script: 
    - echo "Testing Platform"
    # 用多行字符串避免转义符混乱,--data-raw可以直接处理内嵌变量的JSON
    - |
      curl -X POST -H "Content-type: application/json" \
      --data-raw "{\"text\":\"测试通过数:$PASSED_COUNT\"}" \
      https://hooks.slack.com/services/xxxxx/xxxxxxx/..

额外优化建议

如果需要传更复杂的变量内容,建议先把完整payload写入临时文件再调用curl,彻底避免转义错误:

# 生成payload临时文件
cat > payload.json << EOF
{
  "text": "部署结果:$PASSED_COUNT"
}
EOF
# 直接传入文件作为请求体
curl -X POST -H "Content-type: application/json" --data @payload.json https://hooks.slack.com/services/xxxxx/xxxxxxx/..

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:54:05