用GitHub Actions自動釋出Hexo部落格

刀十一發表於2021-03-27

GitHub Actions是GitHub推出的持續整合服務。

我們可以把一個Action理解為一小段特定功能的指令碼,多個Action能夠組成一個Workflow,Workflow由各種GitHub的事件觸發。我們可以用GitHub Actions來做軟體的持續整合(CI)和持續部署(CD)。

在這篇文章裡,我向大家介紹我是如何用GitHub Actions來自動化釋出我的Hexo部落格的。

Hexo和GitHub Pages

我的個人部落格刀十一的DevOps小站是用Hexo生成的。想了解Hexo的朋友可以去Hexo官網

Hexo生成靜態檔案後,我會把這些檔案提交到GitHub Pages的程式碼倉庫。這樣就能利用GitHub Pages擁有一個免費的個人部落格了。

之前,我一直是在自己電腦上手動完成釋出部落格的操作,流程如下:

當看到Github Actions的介紹後,我就有了用Github Actions自動釋出部落格的想法。

用GitHub Actions自動釋出部落格

我的設計是這樣的,所有程式碼都在Hexo庫裡。

  • Hexo庫裡建立兩個Github Actions的workflow:Build PagesPublish Pages
  • Build Pagesmaster分支的push事件觸發。他的主要功能就是用hexo generate生成靜態檔案,把這些靜態檔案打包、建立並上傳到一個新的Github Release裡。
  • 建立release的操作觸發Publish Pages,這個workflow會clone我的Pages庫,下載最新的release裡的靜態檔案包,解壓到Pages庫,commit & push。

整體思路

具體的實現步驟如下:

  1. 建立build.sh指令碼。該指令碼負責生成靜態檔案、打包、上傳。這個指令碼在本地電腦也可以執行。
  2. 建立gh_action_build.sh指令碼。該指令碼在Github Action裡執行。主要是呼叫build.sh,但是事先要安裝一些必要的npm庫。
  3. github.com/settings/to… 獲取一個Personal access token。因為我們的build.sh裡用到了Github CLI工具gh。這個命令需要用到這個token來授權。
  4. 把這個Personal access token,新增到Hexo庫的secrets裡。 新增secrets
  5. 建立YAML檔案定義Build Pages,這邊主要功能就是注入上邊的那個token然後呼叫gh_action_build.sh。完整程式碼在這裡
    - name: Generate pages
      env:
        GITHUB_TOKEN: ${{ secrets.TOKEN }} # 注入token
    
      run: ${GITHUB_WORKSPACE}/bin/gh_action_build.sh # 呼叫指令碼
    複製程式碼
  6. 建立publish指令碼。該指令碼下載最新的release中的靜態檔案包,解壓到Pages庫,commit & push。
  7. ssh-keygen建立一對祕鑰。因為我們在Hexo庫的actions裡操作Pages庫,所以需要授權actions的git命令來修改Pages庫
  8. 把上邊生成的公鑰加到Pages庫的deploy key裡,並賦予寫許可權。 新增deploy key
  9. 把上邊生成的私鑰加到Hexo庫的secrets裡。
  10. 建立YAML檔案定義Publish Pages。這個workflow裡需要clone兩個程式碼庫,然後呼叫publish指令碼。其中Pages庫的ssh key需要用上邊設定的私鑰。完整程式碼在這裡
    - uses: actions/checkout@v2
      with:
        repository: 'yuliji/yuliji.github.io'
        path: 'pages'
        ssh-key: ${{ secrets.PAGE_REPO_SSH_KEY }}  # 用有寫許可權的key操作Pages庫
    複製程式碼

完成

這樣,我只需要把最新的文章提交到Hexo庫的master分支,新文章就自動釋出到Github Pages了。

每次push自動執行

相關文章