新年快要到了,换了一个新的实习工作,也顺带给自己的博客换一个引擎和主题。不过美中不足的是这个新引擎 Hugo 不能像之前用的 Hexo 一样通过指令一键部署,不过不碍事,我们写一个脚本就好。

前期准备 链接到标题

我的博客是部署到自己的云服务器上的,但之前吃了没有及时备份到 GitHub 上的亏,因此在这个脚本里我也需要一个自动同步 GitHub 云端仓库的功能。

那么简单梳理一下这脚本的步骤如下:

  1. 通过指令编译博客
  2. 同步到 GitHub 的远程仓库
  3. 压缩编译出来的文件夹
  4. 通过 sftp 将压缩包上传到服务器
  5. 删除本地压缩包
  6. 通过 ssh 链接到服务器
  7. 删除原本部署路径下的文件
  8. 解压缩
  9. 将解压后的文件已到到部署的路径下
  10. 删除云端压缩包

因此我们需要准备好本地仓库与 GitHub 远程仓库的链接,服务器 ssh 的公钥配置(最好还有 config 配置)。

脚本示例 链接到标题

下面是我最后写出来的脚本:

#!/bin/bash

# 本地需要压缩的文件夹路径,也是云端解压后的文件夹路径
source_folder="./public"

# 压缩后的压缩包路径
zip_file="./public.zip"

# 部署到云端的文件夹路径
target_folder="/www/blog"

# 服务器信息(使用公钥登陆,且已在 ~/.ssh/config 中配好对应的配置)
server_alias="txy"

# 传入参数,用于 commit 日志
commit_argument="$1"

# 编译博客
hugo

# 同步到 GitHub
git add .
git commit -m "$commit_argument"
git push

# 压缩目标文件夹
zip -r "$zip_file" "$source_folder"

# 使用sftp上传压缩包到服务器
sftp "txy" <<EOF
put "$zip_file"
EOF

# 删除本地的打包文件
rm -f "$zip_file"

# 使用ssh连接到服务器并执行命令
ssh "txy" <<EOF

# 删除原有的文件夹
sudo rm -rf $target_folder

# 解压上传的文件
unzip -o "$zip_file"

# 移动文件夹到目标文件夹
sudo mv "$source_folder" $target_folder

# 删除压缩包
sudo rm -f "$zip_file"

EOF