使用github Action自动部署博客
背景提要
为什么需要它?最开始我使用的是本地编译,然后手动上传的方式,后来发现过于麻烦。尤其是nuxt编译后,产生一大堆ouput文件,手动上传耗时费力。
再后来我在服务器上,设置了一个定时任务。每晚从github拉取最新的代码,然后在服务器上编译。实行了一段时间,感觉还行。但是,随着服务上的服务越来越多,资源占有越来越大,我发现偶尔会出现编译nuxt时内存溢出的情况(请原谅我1核2G的服务,它已经尽力了)。
然后便产生了,使用githu action编译目标产物ouput文件,通知服务器自动拉取的想法。那么,说干就干,试试吧!
创建GitHub Action
使用node.js模板,该模板会自动使用预装node.js的环境。模板中有三种node.js版本,如果保持预留配置,则会三个环境都执行一次。这里我只使用16.x版本(因为跟我服务器版本一致)
大致流程可分为
- 拉取代码
- 安装依赖
- 编译output
- 归档到特定分支(gh-pages)
- web-hook通知服务器
- 服务接收事件,拉取编译后的文件,并重启
拉取代码
该步骤由github完成,只需声明使用的分支名称即可
安装依赖
编译output
- run: yarn run build
归档到特定分支(gh-page)
我这儿随便在maket place选一个开源Action(GitHub Pages v3),配置对应的参数,如下:
- name: GitHub Pages v3
uses: peaceiris/[email protected]
with:
personal_token: ${{ secrets.ACCESS_TOKEN }}
publish_dir: .output
请注意:关于这个personal_token,github有个坑。我也是折腾了两个多小时才总结出来的。生成的personal_token是不能明文存储在yaml文件中的,必须使用变量传递。否则一旦提交的时候,github出于安全考虑会自动静默删除对应person_token。
完整配置
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
name: Node.js CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
- run: yarn
- run: yarn run build
- name: GitHub Pages v3
uses: peaceiris/[email protected]
with:
personal_token: ${{ secrets.ACCESS_TOKEN }}
publish_dir: .output
触发Action
提交代码,等待流水线执行。
webhook推送归档成功事件
绑定对应的webhook,监听gh-pages部署事件。
服务器拉取代码并执行重启
这里为了方便起见,我使用的是宝塔面板的webhook插件
执行的脚本如下
echo "[$(date "+%Y-%m-%d %H:%M:%S")]: 开始同步"
cd /www/wwwroot/www.thinkmoon.cn/.output
git pull
kill -9 $(lsof -i:3000 |awk '{print $2}' | tail -n 1)
bash /www/server/nodejs/vhost/scripts/blogSSR.sh
echo "[$(date "+%Y-%m-%d %H:%M:%S")]: 同步完成"
各步骤成功截图
Action执行效果
webhook通知记录
宝塔面板执行日志
搞定收工!大功告成。
版权声明: (https://www.thinkmoon.cn/post/950)
本文首发于指尖魔法屋-使用github Action自动部署博客
转载或引用必须申明原指尖魔法屋来源及源地址!