GitLab CI无Python/jq环境下生成Telegram sendMediaGroup的bash请求
在无Python/jq的GitLab CI环境中生成Telegram sendMediaGroup的curl命令
核心思路
用Shell原生工具(无Python/jq依赖)生成sendMediaGroup接口所需的附件绑定参数,结合已有的media JSON片段,构建完整的curl调用命令。
步骤实现
配置核心变量
在GitLab CI的Job中,先定义Telegram相关的敏感信息(建议通过CI/CD变量管理,不要硬编码):TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN}" TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID}" # 你已经生成好的media参数JSON片段 MEDIA_JSON='[{"type":"video","media":"attach://media0"},{"type":"video","media":"attach://media1"}]'生成附件绑定参数
针对当前目录下的视频文件(示例匹配*.mp4,可根据实际后缀调整),循环生成-F "mediaN=@文件名"格式的参数:# 获取视频文件列表(兼容POSIX Shell的写法) VIDEO_FILES=$(ls *.mp4) ATTACH_PARAMS="" count=0 for file in $VIDEO_FILES; do ATTACH_PARAMS+="-F \"media$count=@$file\" " count=$((count+1)) done构建并执行curl命令
拼接所有参数,调用Telegram的sendMediaGroup接口:curl -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMediaGroup" \ -F "chat_id=${TELEGRAM_CHAT_ID}" \ -F "media=${MEDIA_JSON}" \ ${ATTACH_PARAMS}
额外补充:动态生成media JSON片段
如果还未生成MEDIA_JSON,也可以用纯Shell完成(无需外部工具):
VIDEO_FILES=$(ls *.mp4) count=0 MEDIA_JSON="[" for file in $VIDEO_FILES; do if [ $count -gt 0 ]; then MEDIA_JSON+="," fi MEDIA_JSON+="{\"type\":\"video\",\"media\":\"attach://media$count\"}" ATTACH_PARAMS+="-F \"media$count=@$file\" " count=$((count+1)) done MEDIA_JSON+="]"
GitLab CI Job完整示例
将上述逻辑整合到CI Job中:
send_videos_to_telegram: stage: deploy image: alpine:latest # 确保镜像包含curl(alpine默认自带) variables: TELEGRAM_BOT_TOKEN: $TELEGRAM_BOT_TOKEN # 在项目CI/CD变量中配置 TELEGRAM_CHAT_ID: $TELEGRAM_CHAT_ID script: - | VIDEO_FILES=$(ls *.mp4) count=0 ATTACH_PARAMS="" MEDIA_JSON="[" for file in $VIDEO_FILES; do if [ $count -gt 0 ]; then MEDIA_JSON+="," fi MEDIA_JSON+="{\"type\":\"video\",\"media\":\"attach://media$count\"}" ATTACH_PARAMS+="-F \"media$count=@$file\" " count=$((count+1)) done MEDIA_JSON+="]" - | curl -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMediaGroup" \ -F "chat_id=${TELEGRAM_CHAT_ID}" \ -F "media=${MEDIA_JSON}" \ ${ATTACH_PARAMS} only: - main
内容的提问来源于stack exchange,提问作者Dem0n3D
相关产品推荐
相关产品推荐

