AHK自动化hugo博客的流程

警告
本文最后更新于 2023-12-24,文中内容可能已过时。

AutoHotKey是一款免费的、Windows平台下开放源代码的热键脚本语言。它可以通过发送键盘或鼠标的键击动作命令来实现几乎所有操作的自动化,因此常被用于创建热键和宏。我在使用hugo生成博客的时候为了节省时间,同时让自己更加专注于写作,而不是运维的流程,于是使用windows系统中的AHK脚本工具生成自动化脚本,🔰帮助新建模板文章以及部署静态网站到阿里云服务器。

◼️前言

🎏AutoHotkey的强大之处在于,几乎任何按键、按钮或组合键都可以被设置为热键,同时也可以创建自定义的数据输入表格、用户界面、菜单等标准控件以及ActiveX组件。此外,AutoHotkey还支持对Windows各类型窗口进行匹配以及相关属性调整,例如透明、隐藏、置顶、改变大小等。

总的来说,AutoHotkey是一款功能强大的自动化工具,能够极大地提高用户的生产力和便利性。如需下载或了解更多关于AutoHotKey的信息,可以查看AutoHotKey官网

AutoHotKey我是在三年前接触到的,当时刚开始⚗️读研,为了节省时间在网上找到了这个家伙,在windows系统中可以说是非常好用,不管是直接选中文字百度搜索,还是快速新建/打开某个文件/文件夹,它都能轻松胜任,不需要我有什么🐵编程基础。

上面都是些简单的脚本,但是自己有🤒个性化的需求时,就要了解下AHK能够提供的具体功能了。

在使用hugo博客时,我有以下两个🖱️自动化脚本需求:

  1. **自动化根据hugo的posts模板新建一个文章。**我只需要指定📚文章的名称,其他全部自动去做。
  2. 自动化生成静态网站目录../public/并通过git hooks远程部署到nginx服务器。我只需要指定📝commit的备注信息,其他由AHK来做。

💠自动化新建文章

思路

🧪自动化新建文章的流程在指定文章名称后都可以在cmd中进行。

  1. 🟠使用InputBox方法接收文章名称输入;
  2. 🟡判断文章名称是否为空,不为空则继续;
  3. 🟢打开hugo博客的文件目录,我这里是myBlog
  4. 🔵执行hugo new posts\%Input%\%Input%.md以根据posts模板新建文章,%Input%是刚才输入的文章名称变量;
  5. 🟣打开刚才新建的文章.md文件,这个可以交给start命令来做;
  6. 🔴关闭cmd,扫尾。

代码

流程和操作都有了之后,直接在.ahk文件中写入以下代码然后启动该脚本即可✔️。

1
2
3
4
5
6
7
8
; 自动新建文章 
:://post::
InputBox, Input, 输入, 文章名称:,
if ErrorLevel || Input == ""
    MsgBox, 任务已取消。
else
    Run, cmd /k "cd D:\...\myBlog\ & D:\...\hugo.exe new posts\%Input%\%Input%.md & start /MAX D:\...\myBlog\content\posts\%Input%\%Input%.md & exit"
return

🎉Tips:cmd中可以一次顺序执行多条命令,这些命令用&符号隔开即可。

💠自动化部署

思路

🧪自动化生成静态网站和部署的流程在指定commit消息内容后都可以在cmd中进行。

  1. 🟠使用InputBox方法接收表示commit消息的输入;

  2. 🟡打开hugo博客的文件目录,我这里是myBlog

  3. 🟢执行hugo命令以生成静态网站内容至./public/目录;

  4. 🟣提交public/目录中的内容到本地git仓库;

  5. 🔴提交public/下的commit到远程仓库,远程裸库(bare)通过git hooks钩子post-receive去自动化地将内容copy到nginx的网站目录下。

代码

流程和操作都有了之后,直接在.ahk文件中写入以下代码然后启动该脚本即可✔️。

1
2
3
4
5
6
7
8
9
; 部署博客并提交博客代码到服务器 
:://push::
InputBox, Input, 提交时的备注:, 请输入..., 240, 120
if ErrorLevel || Input == ""
    MsgBox, 任务已取消。
else
    MsgBox, 你输入的提交消息是: "%Input%"
    Run, cmd /k "cd D:\...\myBlog\ & D:\...\hugo.exe & cd D:\...\myBlog\public\ & git add . &  git commit -m "%Input%" --no-verify & git push -u origin master & start https://www.yourWebsite.com/"
return

git hooks钩子post-receive的内容如下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/bin/bash
TARGET="/home/www/***" # 服务器网站根目录
GIT_DIR="/home/**/**.git" # 服务器git仓库路径
BRANCH="master"
while read oldrev newrev ref
do
 # only checking out the master (or whatever branch you would like to deploy)
 if [ "$ref" = "refs/heads/$BRANCH" ];
 then
  echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
  git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
 else

  # perform more tasks like migrate and run test, the output of these commands will be shown on the push screen
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
 fi
done

◻️尾巴

✴️以上就是AHK自动化hugo流程的全部内容。

0%