github操作工作流程 - ssh到服务器,通过curl下载单个文件,无法打开文件

问题描述 投票:0回答:1

我有一个 github 工作流程,应该通过 SSH 登录到远程服务器,然后从私有 github 存储库下载 docker-compose 文件。

我首先努力为工作流 yaml 文件中的运行部分获取正确的多行字符串语法,特别是curl命令,因为它需要标题的引号。我找到的解决方案是将curl命令拆分到环境变量中。

download-file:
    name: download file
    runs-on: ubuntu-latest

    steps:
      - name: install ssh keys
        # check this thread to understand why its needed:
        # <https://stackoverflow.com/a/70447517>
        run: |
          install -m 600 -D /dev/null ~/.ssh/id_rsa
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
          host='${{ secrets.SSH_HOST }}'
          hosts="$(dig +short "$host" | grep -v '\.$' | sed -z 's|\n|,|g')$host"
          ssh-keyscan -H "$hosts" > ~/.ssh/known_hosts

      - name: download docker compose file from private repo to server
        run: ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}
          "ls -la
          && cd test
          && ls -la
          && curl -v -H $CURL_H1 -H $CURL_H2 -H $CURL_H3 -o $CURL_O $CURL_URL
          && exit"

        env:
          CURL_H1: '"\"Authorization: Bearer ${{secrets.PULL_ACCESS_TOKEN}}\""'
          CURL_H2: '"\"Accept: application/vnd.github.v3.raw\""'
          CURL_H3: '"\"Content-Type: text/html; charset=UTF-8\""'
          CURL_O: "docker-compose.yml"
          CURL_URL: "https://raw.githubusercontent.com/<username>/<repository name>/refs/heads/main/docker-compose.prod.yml"

      - name: cleanup
        run: rm -rf ~/.ssh

问题:

当我手动登录服务器后执行curl命令时,文件被下载并且我可以打开它,没有问题。

在 github 工作流程中,curl 请求也执行时没有任何错误,但是当我手动 ssh 到服务器后尝试通过

docker-compose.yml
打开下载的文件
cat docker-compose.yml
时,无法打开文件并显示消息
found an invalid character in header name
而是显示。

我的猜测是变量的字符串格式存在某种问题。我已经花了几个小时尝试各种字符串格式,用反斜杠转义双引号以保留双引号。老实说,字符串语法对我来说看起来已经相当复杂了。

问题:

如何在 ssh 进入服务器后运行 curl 请求,从私有 github 存储库下载单个 docker-compose 文件而不损坏文件,以便实际上可以打开文件? 分别考虑到

run
变量的字符串格式,
env
中的curl命令语法格式是否存在问题,如果是这样,更好/正确的方法是什么?

感谢您的帮助!

curl yaml github-actions
1个回答
0
投票

出现此问题的原因是 $CURL_H1、$CURL_H2、$CURL_H3 等环境变量是在 GitHub Actions 运行器环境中定义的,但在远程 SSH 会话中不可用。

© www.soinside.com 2019 - 2024. All rights reserved.