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

GitLab CI无Python/jq环境下生成Telegram sendMediaGroup的bash请求

在无Python/jq的GitLab CI环境中生成Telegram sendMediaGroup的curl命令

核心思路

用Shell原生工具(无Python/jq依赖)生成sendMediaGroup接口所需的附件绑定参数,结合已有的media JSON片段,构建完整的curl调用命令。

步骤实现

  1. 配置核心变量
    在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"}]'
    
  2. 生成附件绑定参数
    针对当前目录下的视频文件(示例匹配*.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
    
  3. 构建并执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:07:04