github 操作:拉取私有存储库并将其部署到 VPS

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

每当我将更改推送到主分支时,我想在我的 VPS 上自动部署我的私有存储库。我的 yaml 文件如下所示:

name: push-and-deploy-to-server

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: checkout repo
        uses: actions/checkout@v2
      - name: ssh and deploy
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: 22
          script: |
            git pull origin main
            git status
            npm install --only=prod
            pm2 restart index.js

这不起作用,我收到以下错误:

err: fatal: could not read Username for 'https://github.com': No such device or address

当通过 ssh 进入我的服务器并自己克隆存储库时,它会要求我提供用户名和密码(访问令牌)。当我提供它时,它可以工作,但使用 yaml 文件时,它不起作用。

如何克隆和部署私有存储库?顺便说一句,这是一个 Nodejs 项目。

node.js git github-actions
3个回答
2
投票

考虑您的设置

  1. 私有 GitHub 存储库,对该存储库进行给定操作。
  2. VPS

您当前的配置和 github 机密设置有何作用?

  1. 您将代码推送到您的私人存储库
  2. 操作运行并使用
    appleboy/ssh-action@master
    ssh 进入您的 VPS
  3. 然后在您的 VPS 中执行您的命令,如
    git pull origin main

您遇到的问题是您的 VPS 未经过身份验证,无法访问您的存储库。

您有多种选择。

  1. 以用户身份 ssh 到您的 VPS
    ${{ secrets.SSH_USERNAME }}
    ,并使用您的 Github 个人访问令牌针对 github 验证该用户,您可以在 https://github.com/settings/tokens 下生成该令牌,并赋予其读取存储库权限。然后测试您是否可以将您的存储库克隆到 VPS 中,如果可以,那么您的下一个构建将会成功。
  2. 第二个选项在 VPS 内为
    ${{ secrets.SSH_USERNAME }}
    生成新的 ssh 密钥,并将其添加到存储库设置部署密钥下。使用部署密钥时,您需要确保 vps 中的远程存储库使用的是
    [email protected]:<username>/<repository>.git
    git url 而不是
    https
    url。
  3. 第三个选项:在
    appleboy/scp-action
    之前使用
    step
    appleboy/ssh-action
    并将所有内容从当前目录复制到您的VPS,然后使用
    npm install
    运行您的
    appleboy/ssh-action
    等。

0
投票

如果您的服务器上安装了 git,您可以继续操作。但是scp项目也可以将代码直接部署到您的服务器。

name: push-and-deploy-to-server

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: checkout repo
        uses: actions/checkout@v2
      - name: ssh and deploy
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          source: "."
          target: "the/server/path"

我使用了 IP 地址而不是域名,因为我感觉我的托管服务正在搞砸我。 查看此网址了解更多详情


0
投票

@Sam Leurs 你找到解决方案了吗?

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