Github Actions Hexo 自動(dòng)部署
最近重裝了電腦,近幾年內(nèi)每次重裝也好,裝備新電腦也好,越來越覺得這個(gè)博客是令我比較頭疼的事
因?yàn)榍皫啄陱?WordPress?遷移到了?Hexo,雖然變成了純靜態(tài),訪問速度上提高了。但本地文件的維護(hù)、文章的發(fā)布就變得很繁瑣
比如
-
重裝必須備份
-
多臺(tái)電腦必須同步最新的
-
發(fā)布文章需要在本地跑三條命令
多臺(tái)電腦同步的問題,我在家里樹莓派上建了個(gè)?git?倉庫,專門同步文章。不過大部分時(shí)間都會(huì)忘記,并且配置文件、主題的配置文件都不在文章目錄,所以沒法同步
最近一次重裝我依然是手動(dòng)備份,重裝后看著這個(gè)備份,覺得這樣下去不行,得趕緊拿出個(gè)更完美(懶)的方案
想起之前在一個(gè)瀏覽器插件的倉庫看到了自動(dòng)發(fā)布腳本,我有個(gè)瀏覽器插件每次發(fā)布都很繁瑣,因此早就想研究一下自動(dòng)化
所以這次第一個(gè)念頭也是自動(dòng)化:Github Actions
按照之前手動(dòng)擋的流程是這樣的
-
清除緩存?
hexo clean -
生成靜態(tài)文件?
hexo g -
部署?
hexo d(執(zhí)行一次?git?推送) -
遠(yuǎn)程倉庫?
hooks?被觸發(fā),自動(dòng)去網(wǎng)站根目錄,git pull
最后網(wǎng)站根目錄拉取到文章,部署成功
其中?3?之前你需要在本地手動(dòng)執(zhí)行的,而且重裝或者換電腦意味著需要在遠(yuǎn)程服務(wù)器配置新的公鑰
新的半自動(dòng)擋解決了?1-3,你只需要進(jìn)行一次 git 提交
其他的事情交給?Github Actions

整個(gè)流程是
-
創(chuàng)建密鑰,用于連接博客服務(wù)器
-
安裝?
hexo -
安裝?
hexo?插件 -
拉取主題
-
安裝主題依賴包
-
檢查主題目錄
-
配置?
git -
生成靜態(tài)文件
-
部署!
name: publish
on:
push:
branches:
- master
jobs:
publish-blog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 14
registry-url: https://registry.npmjs.org/
- name: create keys
run: |
mkdir -p ~/.ssh
echo '${{secrets.PRIVATE_KEY}}' > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts
ls -l -a ~/.ssh
- name: install hexo-cli
if: steps.cache.outputs.cache-hit != 'true'
run: npm i -g hexo-cli
- name: install hexo dependencies
run: npm i
working-directory: hexo
- name: pull themes
run: |
mkdir -p hexo/themes
git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git hexo/themes/butterfly
echo 'themes config'
cp hexo/themes_butterfly_config.yml hexo/themes/butterfly/_config.yml
echo 'background image'
cp hexo/images/bg.png hexo/themes/butterfly/source/img/bg.png
- name: install themes package
run: npm i
working-directory: hexo/themes/butterfly
- name: check themes package
run: ls -l
working-directory: hexo/themes/butterfly
- name: git config
run: |
git config --global user.name imba97
git config --global user.email [email protected]
git config --global init.defaultBranch master
working-directory: hexo
- name: hexo generate
run: |
hexo clean
hexo g
working-directory: hexo
- name: deploy!
run: |
git init
git add .
git commit -m "deploy!"
git remote add origin root@1.2.3.4:/git/blog.git
git push --force origin master
working-directory: hexo/public
經(jīng)過了大概?40?次左右的測(cè)試,最后終于是成功部署

主要問題
期間主要解決?git push?不成功,私鑰問題
問題的關(guān)鍵是,你不但需要在?~/.ssh/?下創(chuàng)建私鑰,還需要?jiǎng)?chuàng)建一個(gè)?known_hosts,記錄已知的服務(wù)器?IP
私鑰創(chuàng)建流程,我是在我本地創(chuàng)建了一對(duì)密鑰,把私鑰復(fù)制出來放到倉庫配置中

工作流使用的時(shí)候就把它寫入到文件
echo '${{secrets.PRIVATE_KEY}}' > ~/.ssh/id_rsa
記錄已知的服務(wù)器?IP?也就是工作流的這一步
ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts
其他小問題
主要是主題,主題自定義的配置文件和圖片,解決方案是直接放在倉庫,復(fù)制過去
所以如果你打算用以上工作流,還得根據(jù)自己的主題去改改
收工至此,我本地將不在管理博客的任何東西,甚至寫博客都可以隨時(shí)打開?Github?來寫

而且依然也可以在本地寫,如果換主題肯定還是要本地跑一下測(cè)一下的
總之,爽到了
其他補(bǔ)充為啥說是半自動(dòng)擋呢,因?yàn)槲腋杏X服務(wù)器部分也需要繼續(xù)優(yōu)化,不能通過?git hooks?的方式部署,這樣的話遷移到另一臺(tái)服務(wù)器還得配置一遍,也是很麻煩的
之后考慮在工作流中用?sftp?直接上傳的方式部署,需要解決的問題是生成靜態(tài)文件數(shù)量非常多,目前考慮可以先壓縮,再上傳,再給博客服務(wù)器發(fā)送解壓命令
等不懶了搞一搞,再水一篇文章 ( ′_ゝ`)
