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
相关产品推荐
相关产品推荐

