如何使用GitHub Actions传输仓库文件?

10

我正在尝试实现一个GitHub动作,可以在推送到主分支时将我的repo文件SCP到服务器上。我已经在Bitbucket Pipelines上设置了类似的环境,但现在我学习如何使用GitHub动作时,没有任何进展。

我的项目是一个简单的Node.js应用程序,我想简单地将所有文件复制到服务器上,然后运行一个post-scp脚本,在服务器上复制新文件后执行npm i。只是希望在学习过程中保持简单。

我正在使用scp-files GitHub动作。这是我的文件:

name: Deploy to production

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  deploy:
    name: SCP files to server
    runs-on: ubuntu-latest
    steps:
      - name: SCP files via ssh key
        uses: appleboy/scp-action@master
        env:
          USERNAME: ${{ secrets.USERNAME }}
          HOST: ${{ secrets.HOST }}
          KEY: ${{ secrets.SSH_DEPLOYMENT_KEY }}
        with:
          source: './*'
          target: '/home/ubuntu/flatbread/'

这个操作可以完成设置作业构建appleboy/scp-action@master。但是当运行appleboy/scp-action@master时,它会出现错误。我收到的错误信息如下:

tar: empty archive
exit status 1
tar all files into /tmp/320558105/i2yG360Zje.tar
##[error]Docker run failed with exit code 1

我不太确定我做错了什么。即使我将“source:'./*'”更改为样本文件夹(即“source:app”),它仍然会给我相同的错误。
更新

如果我将“source:'./*'”更改为“source:'.'”,那么在没有更多的GitHub操作错误方面似乎行得通:

tar all files into /tmp/719605837/1uYygkf4Vn.tar
scp file to server.
create folder /home/***/flatbread/
untar file 1uYygkf4Vn.tar
remove file 1uYygkf4Vn.tar
================================================
Successfully executed transfer data to all host.
================================================

很遗憾,服务器上验证文件后并未进行任何更改。有任何想法为什么会这样?


根据您的更新,看起来更像是与appleboy/scp-action@master操作有关的问题。您可以在该存储库中提交问题以获得更多关注。 - Patrick Quirk
嗯,你可能是对的。虽然我尝试了许多来自不同提供商的类似scp操作,但它们都有相同的效果。我会尝试联系一下。 - Sam Sverko
有没有办法仅scp推送的文件?就像git pull一样? - Vandit Goel
1个回答

20

希望这有所帮助!

  • 首先,您需要在存储库之外创建一个文件夹
  • 然后将存储库内的所有内容复制到该文件夹中
  • 接着进行打包
  • 上传到服务器
name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
    - uses: actions/checkout@v2

    # Runs a set of commands using the runners shell
    - name: Run a multi-line script
      run: |
        mkdir ../build
        cp -TR . ../build
        tar -cvf deploy.tar ../build/

    - name: copy file via ssh password
      uses: appleboy/scp-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.KEY }}
        port: ${{ secrets.PORT }}
        source: "deploy.tar"
        target: "destination/folder"

太好了!那正是我在寻找的,谢谢你! - user3765649
请说明您是如何运行发布后脚本的。 - Mani Kumar Reddy Kancharla
@ManiKumarReddyKancharla,你只是添加额外的步骤,但我总是在运行下一步之前加入一个大约15秒钟的小延迟步骤。 - Nenad
我该如何在GitHub Actions中通过代理主机进行SCP传输? - AATHITH RAJENDRAN

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