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