博主搭建的博客網站是基於hexo生成靜態頁面託管在github pages,一直以來都需要手動去編譯發佈,一直希望有一個能自動編譯部署的工具,找了挺久的,嘗試過hook到Jenkins執行發佈腳本,但是這種是需要資源的,github的actions能完美的解決這個問題。
倉庫準備
項目倉庫 | 說明 |
---|---|
https://github.com/WinterChenS/blog-back | 用於存放 hexo 生成的項目,可以理解成源碼 |
https://github.com/WinterChenS/WinterChenS.github.io | 存放 hexo 編譯後的靜態文件,也是博客頁面 |
祕鑰生成
Hexo編譯之後需要把生成的靜態頁面代碼push到github pages的倉庫,也就是 WinterChenS/WinterChenS.github.io
,沒有祕鑰就沒有權限push。
隨便找一臺電腦或者服務器,生成祕鑰:
ssh-keygen -f github-deploy-key # 三次回車即可
以上步驟會生成github-deploy-key
和 github-deploy-key.pub
兩個文件。
配置github倉庫
配置blog-back倉庫
打開 https://github.com/WinterChenS/blog-back/settings/secrets
點擊 Add new secrets
,分別在:
- Name 輸入
HEXO_DEPLOY_KEY
- Value 輸入前面生成的私有KEY
github-deploy-key
的內容
配置WinterChenS.github.io倉庫
打開 https://github.com/WinterChenS/WinterChenS.github.io/settings/Deploy keys,點擊 Add deploy key,分別在:
- Title 輸入
HEXO_DEPLOY_KEY
- Key 輸入前面生成的公KEY
github-deploy-key.pub
的內容名稱隨意,但要勾選 Allow write access
編寫 Action 腳本
使用前先要申請,直接打開https://github.com/WinterChenS/WinterChenS.github.io/actions/new
main.yml
name: Deploy Blog
on: [push] # 當有新push時運行
env:
TZ: Asia/Shanghai
jobs:
build: # 一項叫做build的任務
runs-on: ubuntu-latest # 在最新版的Ubuntu系統下運行
steps:
- name: Checkout # 將倉庫內master分支的內容下載到工作目錄
uses: actions/checkout@v1 # 腳本來自 https://github.com/actions/checkout
- name: Use Node.js 10.x # 配置Node環境
uses: actions/setup-node@v1 # 配置腳本來自 https://github.com/actions/setup-node
with:
node-version: "10.x"
- name: Setup Hexo env
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }} # 這裏是上面WinterChenS.github.io新增的公鑰:HEXO_DEPLOY_KEY
run: |
# set up private key for deploy
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa # 配置祕鑰
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# set git infomation
git config --global user.name 'winterchens' # 換成你自己的郵箱和名字
git config --global user.email '[email protected]'
# install dependencies
npm i -g hexo-cli # 安裝hexo
npm i
# 拉取主題代碼
rm -rf themes/*
git clone https://github.com/WinterChenS/hexo-theme-diaspora.git themes/diaspora
- name: Deploy
run: |
# publish
hexo generate && hexo deploy # 執行部署程序
修改blog-back根目錄的_config.yml
如果你使用的是http,那麼需要修改爲ssh,已經是ssh就無須修改
deploy:
type: git
repo: [email protected]:WinterChenS/WinterChenS.github.io.git
branch: master
以後只需要把代碼提交到blog-back就可以自動進行編譯發佈了,是不是很爽,當然這只是冰山一角,很多CICD的功能超級強大的,github後面退出codespaces(在線IDE),以後實現真正的遠程辦公也不是問題了,更多的功能大家可以查看官方示例,自行去探索。