Github Action 的使用

进击的学霸...大约 2 分钟

最近花了一点时间,终于把 Github Action 配置好了,过上了自动构建的生活,因为过程没有记录,可能不会太细致,主要记录下问题

首先将自己的需求罗列出来

1. 接收到 main 分支的 push 请求后,开始自动构建
2. 拉取代码,运行 yarn install 和 yarn build
3. 通过 scp 和目标服务器进行连接,用户名、密码和 ip 使用 github secrets 存放
4. 先将 .vuepress/dist/ 目录下的文件压缩为 dist.tar
5. 清除目标服务器下 /service/nginx/html/blog/ 内的文件
6. 将 dist.tar 发送到目标服务器的 /service/nginx/html/blog/ 目录下并解压

直接在 Github 上搜索 scp ,高 star 的有一个 scp-action ,听起来就很符合我的需求,而且自带了把文件压缩为 tar 传输的功能,很不错。

主要对于 scp 这个不太懂,所以可能遇到了一些瓜皮才会遇到的问题,tar 压缩的时候是带着 .vuepress/dist 这个路径压缩的,并不是我想象中的只把 dist 中的全部内容提取出来再压缩,但是人给提供了解决方案就是添加参数 strip_components: 2 ,主要这个参数介绍,我实在看不懂啥意思,自己试了下才算是意会了。

这个 Action 配置上之后,问题基本就解决了,新的问题是,我部署时用的是新建的 Linux 用户,没有目标目录下的文件增删权限,这个好办,问下 gpt ,得到答案是

sudo chown -R username /service/nginx/html/blog
sudo chmod -R 755 /service/nginx/html/blog

设置完成后就可以了。后面发现有的时候简单的方式其实最麻烦,最开始的时候我为了偷懒,让 gpt 给我写解决方案,因为我不熟悉这块的知识,他给我写的方案我无法判断对错,只能相信然后去试,然后在调试它的方案的过程中耗费了不少时间。其实明确自己的需求,拆解之后,现有的库就很容易可以解决需要,像权限这种问一下无可厚非。最后附上我的配置供参考:

name: VuePress Auto Build and Deploy

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 16.x

    - name: Install dependencies
      run: yarn install

    - name: Build VuePress
      run: yarn build
      
    - name: copy file via ssh password
      uses: appleboy/scp-action@v0.1.3
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: ${{ secrets.SERVER_USERNAME }}
        password: ${{ secrets.SERVER_PASSWORD }}
        strip_components: 2
        source: ".vuepress/dist/*"
        target: /service/nginx/html/blog
评论
  • 按正序
  • 按倒序
  • 按热度