使用GitHub Actions自动从远程仓库拉取代码

9
我在 GitHub 上有一个私有存储库,我的目标是每当有新的提交时,该存储库就会更新到 VPS。
我目前正在使用 SSH 操作登录服务器,找到存储库并从源中提取。 但问题是存储库是私有的,需要认证。 我尝试在全局 git config 中设置用户名和密码,但即使这样仍然需要认证。
5个回答

9

我自己想出了解决方案。我进行的各种操作存在以下问题:我试图执行类似于 git pull https://${{ secrets.TOKEN }}@github.com/repo 的操作。

解决方案是将整个命令 git pull https://token@github.com/repo 作为一个密码,并通过SSH运行脚本:${{ secrets.SCRIPT }}

最终我的操作如下:

name: Remote SSH
on: [push]
jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
    - name: executing remote ssh commands using password
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.IP }}
        username: ${{ secrets.USER }}
        password: ${{ secrets.PRIVATE_KEY }}
        port: ${{ secrets.PORT }}
        script: |
          cd Repository
          ${{ secrets.SCRIPT}}
          pm2 restart 0

1
根据文档,您可以像这样使用 env。
  - name: pass environment
    uses: appleboy/ssh-action@master
    env:
      FOO: "BAR"
      BAR: "FOO"
      SHA: ${{ github.sha }}
    with:
      host: ${{ secrets.HOST }}
      username: ${{ secrets.USERNAME }}
      key: ${{ secrets.KEY }}
      port: ${{ secrets.PORT }}
      envs: FOO,BAR
      script: |
        echo "I am $FOO"
        echo "I am $BAR"
        echo "sha: $SHA"

2
你能把文档的链接放上吗? - pltc
https://github.com/appleboy/ssh-action#pass-environment-variable-to-shell-script - Florian

1

太好了,你的解决方案解决了我的问题!

我只是更改了命令,指定了我想要更新的分支,因为它没有很好地更新分支,所以我的解决方案是:

git pull https://${{secrets.PAT}}@github.com/repo.git branch_name

0
如果你不清楚该使用哪个令牌,举个例子他使用了secrets.PAT。
PAT指的是个人访问令牌。
这个名字听起来很合理,但我花了一些时间才明白。我尝试了OAuth令牌,但由于权限不够,使用这种类型的令牌无法在私有存储库上进行git pull操作。

0
如果您在使用拉取脚本时遇到问题,也许添加几行代码来重置和清理可以有所帮助。请确保远程目录位于正确的分支上。
name: Remote SSH
on: [push]
jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
    - name: executing remote ssh commands using password
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.IP }}
        username: ${{ secrets.USER }}
        password: ${{ secrets.PRIVATE_KEY }}
        port: ${{ secrets.PORT }}
        script: |
          cd Repository
          git fetch origin
          git clean -df
          ${{ secrets.SCRIPT}}
          pm2 restart 0

这帮助我在每个动作上都能够干净利落地完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接