先前在 windows 阵营的时候,我写了一个 python 的脚本,编译成了 exe,来自动执行 git 三板斧的命令,push 我的 hexo 博客修改到远端仓库,由 vercel 和 netlify 的 cicd 自动执行 hexo 部署操作。

在 mac 这边,由于终端本身是一个 zsh,也有 bash,所以我们可以直接编写一个 bash 脚本来处理这些事。

win 那边虽然也有 bat 脚本,但当时我的测试中发现 bat 脚本没有办法执行 hexo g 的操作,会在弹出终端之后立马停止执行,不清楚为何。

在这里分享一下这个脚本,功能非常简单,就是本地先执行 hexo cl && hexo g 的操作,再判断是否有新的变动,如果有,则提交到远端。

这里执行 hexo g 是因为我的博客使用了固定 URL 的插件,需要本地生成一个固定的 URL 的 ID 到 MD 文件的 front-matter 里面,再 push 到远端。如果直接 push 到远端,那么同一个 MD 文件在 vercel 或 netlify 可能会被生成出不同的固定 ID,到时候博文链接就不一样了,不符合我们博客的使用预期。

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
dir="/Users/yangkeliu/data/hexo/blog"
# 进入目标目录
cd $dir
echo "[run] cd $dir"
# 生成id
hexo cl && hexo g --d;
sleep 1;
# 提交git仓库
echo "[run] begin git push";
# 检查是否有内容需要提交
if [[ -n $(git status --porcelain) ]]; then
# 获取当前日期时间
current_time=$(date "+%Y-%m-%d %H:%M:%S")
commit_msg="auto update at ${current_time}"
echo "[run] $current_time"
echo "[run] $commit_msg"
git add --all;
git commit -m "$commit_msg";
git push;
echo "[run] success push to remote"
else
echo "[run] nothing to commit"
fi
echo "[run] end git push";

当没有可提交信息的时候,脚本不会执行 git add 等操作,只有有提交信息的时候才会自动提交。

image.png

关于此脚本,有任何问题,欢迎在评论区提出。