deploy script 自动部署blog

post on 2019-05-20 Mon 17:10

用了vuepress之后,感觉还是不错的,就是写东西涉及到的部分比较多,导航也需要配置,侧边栏也是,相反没有wp那么快捷方便了,不过挺好玩的。

用了这个之后,不再像wp或者其他的一些写作应用一般,打开浏览器写完保存即可,它还需要编译,上传部署。虽然也不复杂,但是如果每次写都需要手工的那不是要哭?自动上传发布那肯定必须得有。

一切从简,要么服务器也装git要么用npm包要么用shell都挺简单的。只是目前的机器也不方便装git,所以我选择了shell,简单快捷expect + sftp,几句话,毫无负担。老的文件我也不删除,反正也不是源代码,都是最终的资源,久而久之,有需求的登录一下机器 rm -rf 把老的删掉,再部署一下即可。要删除也很简单 rm www/* 这个目录下的所有文件(不包括文件夹)都会被删掉。

再配合上npm的脚本,整个过程很舒服,写东西也愉快了。这样的部署方式也是有点弊端,每次都是全量上传,效率自然就低了,特别是后期有很多静态大文件之后。git是肯定最好的选择。

tips:
这里在刚开始使用vuepress的时候踩了一个坑,文档真的不清楚
就是当你使用全局的vuepress的时候,无法实现全量hot-reload,啥意思呢?就是markdown的内容会刷新,但是你修改了如YAML format或者config.js之类的,虽然重编译了,但是根本没有更新任何东西
看了官方github issus中描述: 当你使用全局vuepress时,插件无法监控到文件的刷新,所以无法热加载。

"scripts": {
    "dev": "npx vuepress dev .",
    "build": "npx vuepress build .",
    "sftp": "./deploy.sh",
    "deploy": "npm-run-all build sftp"
}
# 这里依赖的一个包npm-run-all 它可以依次执行后面申明的所有任务 build & sftp
"devDependencies": {
    "npm-run-all": "^4.1.5"
}

#!/usr/bin/expect -f
#!/bin/zsh

spawn sftp username@yourip
expect "*password*"
send "youpassword\r"

expect "*sftp*"
send "cd /www\r"

expect "*sftp*"
send "pwd\r"

expect "*www*" # 这里简单判断一下,是否在自己期望的目录结构中,不然就不上传了
send "put -r ./.vuepress/dist/.\r" # 符合期望,就上传(默认会覆盖内容)

expect "*sftp*"
send "pwd\r"

expect "*sftp*"
send "exit\r"