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

GitLab CI/CD如何将变量通过SSH传递至远程服务器并用于curl命令?

问题原因

你在CI环境中定义的start_build_message是本地变量,当通过SSH连接到远程服务器后,远程环境并不存在这个变量,因此执行curl时${start_build_message}会被解析为空值。

解决方法

提供三种可行的修复方式,按需选择:

方法1:直接在本地替换变量后传递完整命令

修改SSH执行的curl命令,让CI环境先把start_build_message的实际值替换进去,再将完整命令发送到远程执行:

script:
  - start_build_message="The project build has started! I will notify you when it's completed. Author $GITLAB_USER_NAME."
  - echo "$start_build_message"
  - ssh -o "StrictHostKeyChecking=no" "$SSH_USERNAME"@"$SSH_HOST" 
    "curl -s -X POST 'https://api.telegram.org/$TELEGRAM_BOT_TOKEN/sendMessage' \
    -d chat_id=$TELEGRAM_CHAT_ID \
    --data-urlencode text=\"$start_build_message\""

核心改动:把\${start_build_message}改为"$start_build_message",取消转义后本地CI会优先替换变量值。

方法2:在远程环境临时导出变量

先在远程会话中导出变量,再执行curl命令,注意对远程变量名的转义:

script:
  - start_build_message="The project build has started! I will notify you when it's completed. Author $GITLAB_USER_NAME."
  - echo "$start_build_message"
  - ssh -o "StrictHostKeyChecking=no" "$SSH_USERNAME"@"$SSH_HOST" 
    "export START_MSG=\"$start_build_message\"; \
    curl -s -X POST 'https://api.telegram.org/$TELEGRAM_BOT_TOKEN/sendMessage' \
    -d chat_id=$TELEGRAM_CHAT_ID \
    --data-urlencode text=\"\$START_MSG\""

这里\$START_MSG的转义是为了避免本地CI提前解析这个变量名。

方法3:使用Here Document简化复杂命令

如果命令较长或包含特殊字符,用Here Doc可以避免转义混乱,让代码更易读:

script:
  - start_build_message="The project build has started! I will notify you when it's completed. Author $GITLAB_USER_NAME."
  - echo "$start_build_message"
  - ssh -o "StrictHostKeyChecking=no" "$SSH_USERNAME"@"$SSH_HOST" << EOF
    curl -s -X POST 'https://api.telegram.org/$TELEGRAM_BOT_TOKEN/sendMessage' \
    -d chat_id=$TELEGRAM_CHAT_ID \
    --data-urlencode text="$start_build_message"
EOF

Here Doc中的本地变量会被CI环境提前替换,再将完整脚本发送到远程执行。

注意事项
  • 确保TELEGRAM_BOT_TOKEN、TELEGRAM_CHAT_ID等变量已在CI环境中正确配置。
  • 若消息包含引号、空格等特殊字符,用双引号包裹变量可保证内容完整传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:24:56