1. 程式人生 > >使用 GitHub Actions 實現 Hexo 部落格自動部署

使用 GitHub Actions 實現 Hexo 部落格自動部署

一、Hexo 相關知識點

靜態部落格簡單,但是釋出博文時稍顯麻煩,一般需要下面兩步:

hexo clean
hexo g -d // 相當於 hexo g + hexo d

如果考慮到同步原始檔,還需要每次更改後,將原始檔 push 到指定倉庫:

git push origin master

我們可以將 Hexo 檔案分為兩類,一類是原始檔,即下面這些檔案:

.
├── _config.yml
├── package.json
├── scaffolds
├── source
|   ├── _drafts
|   └── _posts
└── themes

一類是 public 檔案,即網站檔案:

public
├── 2020
├── categories
├── tags
....

釋出博文的這三個操作代表:

  • hexo clean:刪除網站(public)檔案
  • hexo g:生成網站(public)檔案
  • hexo d:將本地網站(public)檔案同步到指定倉庫(如:yourname.github.io)中

我使用一個私有倉庫存放 Hexo 原始檔,在 deppwang/deppwang.github.io 中存放網站檔案。所以每次釋出或者更新博文時,需要使用 push 操作更新原始檔,再執行 hexo cleanhexo g -d 更新部落格,比較麻煩。

所以我們希望能在 push 原始檔後,由 CI/CD(持續整合/持續部署)工具為我們執行 hexo clean

hexo g -d 這兩個操作。

二、GitHub Actions

CI/CD 工具前有 Travis CI,現有 GitHub Actions,這裡使用 GitHub Actions。

GitHub Actions 的工作原理:我們提前設定好需要自動化執行的任務,GitHub Actions 監控當前倉庫的某一個操作(如:push),一旦有此操作,就自動化執行這些任務。

所以我們希望使用 GitHub Actions 後,只需要往原始檔倉庫 push 更新原始檔,GitHub Actions 監控到 push 操作時,就自動化執行 hexo cleanhexo g -d 操作,完成博文釋出。

Action 存放在專案根目錄的 .github/workflows 下,字尾為 .yml。一個 Action 相當於一個工作流 workflow,一個工作流可以有多個任務 job,每個任務可以分為幾步 step。任務、步驟依次執行。

每個 Action 是一個獨立指令碼,所以可以作為程式碼倉庫。

  • actions/setup-node 就表示 github.com/actions/setup-node 這個 倉庫,代表安裝 node.js。Action 為 action.yml

可以通過下面這種格式來使用別人寫好的 action,@借用了指標的概念:

actions/setup-node@74bc508 # 指向一個 commit
actions/[email protected]    # 指向一個標籤
actions/setup-node@master  # 指向一個分支

關於 GitHub Actions 更多知識,請看 GitHub Actions 入門教程 - 阮一峰。

現在需要實現一個 Action,使其能夠執行 hexo cleanhexo g -d 操作。

三、Hexo Action

我是使用的 sma11black 已經開發好的 Hexo Action,這個 Action 針對的是存放 Hexo 原始檔和網站檔案分開存放的場景。請先看 教程,以下為教程的補充。

非第一次生成 SSH Key:

ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "[email protected]"

將生成的 private key 作為 Hexo 原始檔倉庫 Settings > Secrets 的 一個名叫 DEPLOY_KEYSecret。注意:需要複製包括 -----BEGIN OPENSSH PRIVATE KEY----------END OPENSSH PRIVATE KEY----- 的整個內容。Secret 相當於一個變數,可以使私有變數不公開。

將生成的 public key 作為網站檔案倉庫 Settings > Deploy Keys 的 Deploy Key。Deploy Keys 中的公鑰針對於當前倉庫。

為什麼要用 SSH Key?

  • SSH Key,是一對密匙:公鑰+私鑰,用於加密本地倉庫和遠端倉庫的傳輸內容。是非對稱加密,可公鑰加密、私鑰解密;或私鑰加密、公鑰解密。
  • 使用 GitHub Actions 是藉助 GitHub 提供的環境,跟本地環境一樣,也需要有私鑰。當 GitHub Action 執行 hexo g -d 時,用私鑰 DEPLOY_KEY 加密,GitHub 用網站檔案倉庫的 Deploy Key 進行驗證。

下面是具體的 action.yml:

name: Deploy # workflow name

on:
  [push] # 觸發事件

jobs:
  build: # job1 id
    runs-on: ubuntu-latest # 執行環境為最新版 Ubuntu
    name: A job to deploy blog.
    steps:
    - name: Checkout # step1 獲取原始碼
      uses: actions/checkout@v1 # 使用 actions/checkout@v1
      with: # 條件
        submodules: true # Checkout private submodules(themes or something else). 當有子模組時切換分支?

    # Caching dependencies to speed up workflows. (GitHub will remove any cache entries that have not been accessed in over 7 days.) 快取壓縮 node_modules,不用每次下載,使用時解壓,可以加快工作流的執行過程,超過 7 天沒有使用將刪除壓縮包。
    - name: Cache node modules # step2
      uses: actions/cache@v1
      id: cache
      with:
        path: node_modules
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-
    - name: Install Dependencies # step3 name
      if: steps.cache.outputs.cache-hit != 'true' # 如果變數 cache-hit 不等於 true
      run: npm install # 安裝 node modules 相關依賴

    # Deploy hexo blog website.
    - name: Deploy # step4
      id: deploy
      uses: sma11black/[email protected]
      with:
        deploy_key: ${{ secrets.DEPLOY_KEY }}
        user_name: your github username
        user_email: your github useremail

四、可能出現的問題:Deploy 失敗

可能出現以下 3 三種情況:

1、

Host key verification failed
fatal: Could not read from remote repository.

出現此問題請檢查 站點配置檔案,看 deploy 是否存在出 GitHub 以外的倉庫,如 Coding 。

解決方式:去除 GitHub 以外的倉庫。

2、

Load key "/root/ssh/id_rsa": invalid format
gitagithub.com: Permission denied (publickey)
fatal: Could not read from remote repository.

出現此問題請檢查 SSH Key,看 Private Key 是否正確且完整的複製

3、

ERROR Local hexo not found in /github/workspace
ERROR Try running: 'npm install hexo --save'

解決方式:將 uses: sma11black/[email protected] 改為 uses: deppwang/[email protected]@v1.0.1entrypoint.shhexo g -d 前添加了命令 npm install hexo --save

五、總結

關於 Action 具體如何執行,可結合執行日誌理解。

六、參考

  • GitHub Actions 入門教程 - 阮一峰
  • Hexo Action

相關推薦

使用 GitHub Actions 實現 Hexo 部落自動部署

一、Hexo 相關知識點 靜態部落格簡單,但是釋出博文時稍顯麻煩,一般需要下面兩步: hexo clean hexo g -d // 相當於 hexo g + hexo d 如果考慮到同步原始檔,還需要每次更改後,將原始檔 push 到指定倉庫: git push origin master 我們可以將

vuepress-theme-reco + Github Actions 構建靜態部落部署到第三方伺服器

> [最新部落格連結](https://tsanfer.xyz/views/frontEnd/vuepress_theme_reco-Github_Actions.html) > [Github連結](https://github.com/Tsanfer/vuepress

在伺服器/GitHub上搭建Hexo部落

  本文章首發於:http://www.xtstarry.top/index.php/2018/07/24/在伺服器-github上搭建hexo部落格/ 前言 Hexo 是一個快速、簡潔且高效的部落格框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在

使用GitHub Actions自動編譯部署hexo部落

### 前言 使用hexo部落格也挺久的,最開始是本地hexo clean && hexo g,最後hexo d推送到伺服器。後來是本地hexo clean && hexo g,最後將生成檔案推送到GitHub,GitHub actions 推送到伺服器。後來本地檔案丟失,GitHub 僅僅存著編譯好pub

hexo部落新增域名實現雙線部署github和coding)

域名申請 首先申請一個域名 建立檔案 在hexo目錄下的source目錄下新建一個檔案CNAME,不要帶字尾,也就是沒有檔案型別,可以使用命令來建立 cd source touc

github 部署hexo部落無效

問題: deploy後遠端庫沒有出現對應生成的hexo檔案 也無錯誤提示。 deploy: type: git repo: https://github.com/ReZeroS/ReZer

用TravisCI持續整合自動部署Hexo部落的個人實踐

優秀的程式設計師都是不用持續整合的 前幾天我面試了一個碼農,連續幾個專業問題他都沒答上來。 尷尬之餘,我問它:「你沒有什麼理想嗎?你現在最渴望的事情是什麼?」 碼農轉悠著大眼睛,不假思索道:「做一個持續整合的自動部署!」 真沒想到在面試中居然還有這種操作

hexo 部落部署github和coding上 發文章同步到兩個倉庫中

1、註冊coding賬號 2、新建專案,不選擇 啟用 README.md 檔案初始化專案,以及任何 License 和 .gitignore 檔案。 3、從github上克隆專案下來  在本地git終端執行:           git clone https

搭建自己的技術部落系列(二)把 Hexo 部落部署GitHub

1、在GitHub上建一個新倉庫 ​ 2、配置Git的SSH KEY 生成SSH新增到GitHub 回到你的git bash中, git config --global user.name "yourname" git config --global user.email "youremail" 這裡的y

二、Hexo+Github搭建自己的部落

1.安裝Node.js,配置環境變數(注意node版本,好多問題在於node版本,我用的v10.5.0) 2.安裝git環境配置git環境 3.github新建倉庫,格式為:賬戶名.github.io,需要勾選Initialize this repository with a

基於 Hexo + GitHub Pages 搭建個人部落

參考 markdown一些語法 1、 --- title: Hello Blog --- 2、連結[CSDN](https://blog.csdn.net/owenfy) 3、大小標題 ## Quick Start ### Create a new post 4、中間

使用Hexo + GitHub Pages 搭建個人部落

一.前言   之前是在CSDN上寫部落格的,但是無奈其廣告滿天飛,還有因為個人不太喜歡CSDN部落格裡的一些東西,加上看到很多技術大牛都有自己的個人部落格,於是乎!便想著搭建一個自己的個人部落格。其實之前寫部落格還是追求於有很多人來看,以滿足自己這樣的一個慾望,後來慢慢覺得寫部落格無非是記錄一下自己成長的歷

Github+Hexo部落搭建過程

安裝 Node.js    點選下載 對 Node.js 不是很懂,只知道需要它。 安裝 git (mac 自帶,windows 就不清楚了) 註冊 github 賬號。 設定 SSH Key 到 github 新增 SSH Key

使用 Hexo + Github 搭建自己的部落(圖文教程)

使用 Hexo + Github 搭建自己的部落格(圖文教程) 【提示】:部落格地址是:自己的短域名.github.io 我的部落格地址:xpwi.github.io 如果之前有過建立倉庫經歷就會知道,自己的倉庫是在:【短域名,github,io/倉庫名】來訪問的。而這個部落

使用hexo,-github,-coding搭建免費部落

Updated March 6, 2018 準備環境 windows10 x64 node.js v8.9.3 git version 2.16.1.windows.4 Markdown編輯器:http://markdownpad.com/ 熟練掌握git和github的基本操作

Github Pages+Hexo部落搭建極簡版教程

目錄 1.環境安裝 1.1安裝nodejs與git 1.2檢查是否安裝成功 2.安裝hexo 2.1安裝命令 2.2hexo初始化 3.更換hexo主題 4

hexo+github搭建免費個人部落

閱讀本文應具備的知識: 瞭解 git 和 github 具備 markdown 語法基礎知識 1.在 github 建立屬於自己的 github.io 你要有一個 github 賬號,並建立自己的 github.io 倉庫,不懂可以查我這篇文章

Mac平臺打造githubhexo部落全過程

簡介 人玩部落格有三個階段,一是在平臺寫,但是寫著寫著就會發現限制太多。比如前些年,你寫個關於goagent的文章就會稽核不過.部落格流量來了,你想掛個廣告之類的也不行。本人是受實名制的影響,在寫部落格上有顧忌。第二個階段是自己購買域名和vps自己搭建後臺,使

使用hexo+github搭建免費個人部落詳細教程

前言 使用github pages服務搭建部落格的好處有: 全是靜態檔案,訪問速度快;免費方便,不用花一分錢就可以搭建一個自由的個人部落格,不需要伺服器不需要後臺;可以隨意繫結自己的域名,不仔細看的話根本看不出來你的網站是基於github的;資料絕對安全,基於githu

基於hexo+github搭建一個獨立部落

一直聽說用hexo搭建一個擁有自己域名的部落格是很酷炫的事情~,在這十一花上半個小時整個hexo部落格豈不美哉。 使用Hexo吸引我的是,其簡單優雅, 而且風格多變, 適合程式設計師搭建個人部落格,而且支援多平臺的搭建,再加上有些node,git基礎,分分鐘創建出一個高大上的部落格。廢話少說,開始吧。 準