一次改进部署静态文件的经历

起因

余鸿靖手册小站
这几天心血来潮想做一个手册网站,来记录一些系列类型的文章,于是一眼就相中了vuepress。
三下五除二就搞定了我的手册网站。正准备收尾的时候,却发现痛苦的事情才刚到来!

令人窒息的部署流程

本地库的大体流程如下:

1
2
3
4
5
6
7
远程github的库下有2个分支
master: 保存打包后的静态页面---用于展示page页
dev: 保存网页的源代码---换物理机也不影响代码丢失

本地库下也有2个分支
master: 保存打包后的静态页面---推送至远程master
dev: 网页的源代码---推送至远程的dev

于是乎我每次的部署流程如下:

  1. 在dev分支下编写文章,打包文件,推送源代码到dev
  2. 把打包的文件复制出来,然后切换到master(没错,切换还挺费时间的,文件比较多)
  3. 把打包的文件再复制到master分支下,并推送到远程master(现在一个完整的更新流程才完成了)
  4. 但是,如果文章有不满意的地方,我又需要切回dev分支重复以上操作一次

天呐!地狱般的效率,不能忍受了!

hexo的恩爱情仇

先不要吐槽我,本地为什么需要用两个分支,为什么不直接在打包后的文件夹直接推送master就行了。
因为我的博客是用hexo搭建,它的推送流程如下:

1
2
3
4
5
6
本地两个分支
master: 打包后的静态网站代码(你不能在此放你的源代码,因为它每次都会把分支下的所有文件清空,然后放置打包后的代码)
dev: 你的源代码(因为master放不了,所以新建立分支存放源代码)
远程两个分支
master: 打包后的静态代码---用于展示page页
dev: 源代码---保存源代码

没错,想必你已经知道了,我就是仿照这个来建立的分支。
所以,我忘了vuepress打包后,是不会删除其他的代码的,这意味着,我的源代码和打包后的代码可以放一起。
好吧,来改进一下吧。

尝试改进

所以,现在我可以不用来回切换分支,拖动文件来部署文件了。
目前的流程如下:

  1. 在dev分支下编写文章,打包文件,推送源代码到dev
  2. 进入打包的文件,推送到master

但是操作还是挺多的,毕竟还是需要add,commit,push三连。还是很难受,而且还要进入子文件夹。
想到hexo的hexo g -d一键部署我就觉得这还是太麻烦了!

再次改进

想到可以通过bash来帮我自动执行这一系列操作。
于是在目录下创建一个deploy.sh的文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env sh
set -e

npm run build

cd docs/.vuepress/dist

git init
git add -A
git commit -m "deploy"

git push -f git@github.com:yuhongjing/library.git master

cd -

这时我们就可以直接bash deploy.sh一句话就能够部署了!
如果需要一并提交源代码,我们也可以在这里面再多添加几句话就搞定了!

注意

如果系统不支持bash,可以下载一个git bash来使用bash命令。

如果你觉得打开bash还是太麻烦,你可以在项目的package.json添加如下:

1
2
3
4
5
{
"scripts": {
"deploy": "bash deploy.sh"
}
}

这样的话,你就可以直接npm run deploy即可。
emmmmmm,懒果然是人类进步的动力啊!