Hexo:語雀雲端寫作,Github Actions持續集成

本文章爲原創內容,只發佈於本博客和我的私人博客,轉載請註明,謝謝

使用 Hexo 靜態博客網站發表文章,需要

  1. 本地以Markdown的形式寫好文章
  2. 藉助 Hexo 生成靜態頁面
  3. 部署到雲主機或者通過 git 到託管平臺

既然要本地藉助 Hexo 生成靜態頁面,那就需要設置 Node.js 環境和博客源碼,雖然環境設置簡單,源碼從Github、coding、gitee、gitlab等地方下載方便,但是在換電腦之後,又要重複相同的事情,還是比較麻煩,前一陣我用 docker 將我的博客源碼打包成鏡像留存下來,也是面臨同樣的問題,就是換電腦後還要安裝 dockerdocker-compose,也是麻煩。

當我遇見了 Github Actionsyuque-hexo 後,一切都發生了變化

簡單來說就是

由 Hexo + 語雀 + yuque-hexo + Github Actions + web hook + severless 打造的持續集成個人博客

至於託管平臺,Github Pages or Coding Pages or VPS or Other,自行選擇。

  • Github 保存博客源碼,私有庫已經免費,還在用Travis CI?非開源的私有項目想在 Travis CI 上構建價格還是非常感人的!
  • Github ActionsGithub 推出的一款持續集成工具,完全免費
  • 語雀 是阿里人都在用的筆記與文檔知識庫,專業的雲端知識庫,支持web hook
  • yuque-hexoGithub 上開源的一款語雀知識庫同步工具
  • severless 是雲函數,當前 騰訊雲函數阿里雲函數都可以免費提供,對於博客,免費額度足夠了,可以對比一下費用自行選擇

關於 Hexo

Hexo 是一款基於 Node.js 的靜態博客框架,其快速、簡潔且高效。沒有數據庫和後臺的概念。

  • 超快速度,Node.js 所帶來的超快生成速度,讓上百個頁面在幾秒內瞬間完成渲染。
  • Hexo 支持 GitHub Flavored Markdown 的所有功能,甚至可以整合 Octopress 的大多數插件。
  • 一鍵部署,只需一條指令即可部署到 GitHub Pages, Heroku 或其他平臺。
  • 插件和可擴展性,強大的 API 帶來無限的可能,與數種模板引擎(EJS,Pug,Nunjucks)和工具(Babel,PostCSS,Less/Sass)輕易集成

關於 Github Actions

不妨先去了解一下

About GitHub Actions

GitHub Actions 入門教程

[譯] GitHub Actions 介紹,瞭解一下?

我的博客 持續集成和交付 專欄 有實例可以去參考一下,後續還會繼續更新。

或者 我的 CSDN 博客

repository_dispatch

之所以有了這篇文章是因爲我看到了Github Actions中的外部事件repository_dispatch

GitHub Actions支持的外部事件repository_dispatch 必須具有以下請求頭:

curl -X POST https://api.github.com/repos/:owner/:repo/dispatches \
    -H 'Accept: application/vnd.github.everest-preview+json' \
    -H "Authorization: token GITHUB_PERSONAL_ACCESS_TOKEN" \
    -d '{"event_type":"start"}' 

如果返回的Response是Status: 204 No Content,那就是成功了,去Github中看一看,事件已經被觸發,這個可以使用postman測試一下

注意,Accept 具有application/vnd.github.everest-preview+json自定義媒體類型值。

語雀中的Web Hook是不能添加請求頭的,所有我們就需要一箇中間件把他們連接起來,這個就是serverless雲函數

具體流程

  1. Hexo 博客搭建好,將源碼上傳到Github,私有還是公有庫都可以
  2. 在Github中開啓Github Actions服務,配置yaml格式的deploy腳本
  3. 註冊語雀,創建知識庫併發布一篇文章,必須發佈過文章,因爲yuque-hexo會刪除_posts文件夾
  4. 編寫serverless函數,測試可以觸發Github Actions,獲取觸發地址
  5. 配置語雀的webhook,使其可調用serverless函數
  6. 觸發Github Actions實現Hexo的自動部署,生成靜態文件併發布

下面以Github Actions將Hexo生成的靜態頁面推送到Github Pages舉例

創建 Github Pages

  1. 登錄github
  2. 創建項目,項目名字username.github.io,必須爲公開庫
  3. 要求項目爲空,不要創建 READNME.md

創建 Hexo 博客並配置

可參考:

配置完成,本地預覽達到自己滿意,編寫文章發佈一切搞定後就能繼續了。

創建 Github 源碼倉庫

在github上創建存放Hexo源碼的倉庫,並將源碼push到此倉庫

配置 Github Actions 腳本

兩種方法配置,內容一樣

  1. 在Hexo源碼倉庫的頁面選擇Actions–>Set up a workflow yourself,進行網頁編寫
  2. 在本地環境根目錄創建.github/workflows文件夾,裏面放寫好的yaml腳本

腳本我以一種舉例,其他方法同樣可以實現,請查看我的博客

首次使用,請將腳本中的所有git checkout master替換爲git checkout -b master第二次及以後都是git checkout master,就不需要改動了

  • git checkout master 切換到主分支
  • git checkout -b 新建並切換到新建的分支上
# workflow name
name: Deploy To Github And Coding

# 當有push到倉庫和外部觸發的時候就運行
on: [push, repository_dispatch]

# YUQUE_TOKEN
# Github_API_Token
# Coding_API_Token
# Coding_API_Username
jobs:
  deploy: 
    name: Deploy Hexo Public To Pages
    runs-on: ubuntu-latest 
    env:
      TZ: Asia/Shanghai    
        
    steps:
    # check it to your workflow can access it
    # from: https://github.com/actions/checkout
    - name: Checkout Repository master branch
      uses: actions/checkout@master 
      
    # from: https://github.com/actions/setup-node  
    - name: Setup Node.js 10.x 
      uses: actions/setup-node@master
      with:
        node-version: "10.x"
    
    - name: Setup Git Infomation
      run: | 
        git config --global user.name 'hongweifuture' 
        git config --global user.email '[email protected]'  
 
    - name: Get Latest Commit Message 
      run: |
        git log --pretty=format:"%s from Github Actions at `date +"%Y-%m-%d %H:%M:%S"`" --date=short -n 1  > commit-message.log
        
    - name: Setup Hexo Dependencies and Generate public files
      env:
        YUQUE_TOKEN: ${{ secrets.YUQUE_TOKEN }}
      run: |
        npm install hexo-cli -g
        npm install yuque-hexo -g
        npm install
        npm run start
        
    - name: Deploy To Github Pages 
      env:
        Github_Pages: github.com/hongweifuture/hongweifuture.github.io
        Github_Token: ${{ secrets.Github_API_Token }}
      run: |  
        git clone https://${Github_Pages} .github_pages
        cd .github_pages
        git checkout -b master
        cd ../
        mv .github_pages/.git/ ./public/
        mv ./README.md ./public/
        cd ./public/
        git add .
        git commit -F ../commit-message.log
        git push --force --quiet "https://${Github_Token}@${Github_Pages}" master:master

    - name: Deploy To Coding Pages 
      env:
        Coding_Pages: e.coding.net/hongweifuture/hongweifuture.coding.me.git
        Coding_Token: ${{ secrets.Coding_API_Token }}
        Coding_Username: ${{ secrets.Coding_API_Username }}
      run: |
        git clone https://${Coding_Username}:${Coding_Token}@${Coding_Pages} .coding_pages
        cd .coding_pages
        git checkout -b master
        cd ../
        rm -r ./public/.git/
        mv .coding_pages/.git/ ./public/
        cd ./public/
        git add .
        git commit -F ../commit-message.log
        git push --force --quiet "https://${Coding_Username}:${Coding_Token}@${Coding_Pages}" master:master     

這個腳本實現了發佈Hexo的Public到Pages,這只是一種方法,你也可以使用ssh進行hexo d或者Aciton的包發佈

但是現在你還不能運行,因爲裏面的隱藏參數還沒有設置

參數 說明
YUQUE_TOKEN 從語雀獲取的TOKEN,語雀上點擊個人頭像 --> 設置 --> Token 即可獲取,要在Hexo源倉庫的Settings–>Secrets中進行添加,對重要信息進行保密
Github_API_Token 從Github獲取的personal access token,需要Secrets中進行添加
Coding_API_Token 從Coding獲取的personal access token,需要Secrets中進行添加
Coding_API_Username 從Coding獲取的username,2020年新升級Coding用戶名有變化,需要Secrets中進行添加

這裏要注意一個coding,我這裏的寫法是針對2020年最新版本的coding,前一陣進行了升級,與以前的URL還有格式不同

配置騰訊雲函數

  1. 登錄騰訊雲,搜索雲函數,創建
  2. 選擇python,2.7和3.6都行,空白函數
  3. 運行角色,SCF_QcsRole即可
  4. 注意執行方法,有強制要求


這裏我使用的是python 2.7

# -*- coding: utf8 -*-
import requests

def main_handler(event, context):
    r = requests.post("https://api.github.com/repos/用戶名/倉庫名/dispatches",
    json = {"event_type": "start"},
    headers = {"User-Agent":'curl/7.52.1',
              'Content-Type': 'application/json',
              'Accept': 'application/vnd.github.everest-preview+json',
              'Authorization': 'token Github訪問Token'})

    if r.status_code == 204:
        return "This's OK!" 
    else:
        return r.status_code

在函數代碼中測試一下,如果Actions正常觸發,大功告成
5. 配置觸發方式,保存,獲取到訪問路徑

  • 觸發方式:API網關觸發器
  • API服務類型:新建API服務
  • API服務:SCF_API_SERVICE
  • 請求方法:ANY
  • 發佈環境:發佈
  • 鑑權方法:免鑑權
  • 啓動集成響應:未啓用

配置語雀

語雀上

  1. 註冊,登錄
  2. 創建知識庫–>文檔知識庫–>可見範圍爲互聯網可見
  3. 工作臺–>知識庫–>找到新創建的知識庫,管理–>設置–>路徑進行自定義,後面有用
  4. 工作臺–>知識庫–>找到新創建的知識庫,管理–>設置–>開發者–>名稱任意。URL爲雲函數的地址,即上面獲取到的訪問路徑

權限建議選擇

  • 僅主動推送更新觸發(強烈建議)
  • 發佈文檔
  • 更新文檔
  • 刪除文檔

hexo源碼上

可本地更新後push或者直接github網頁修改

先安裝yuque-hexo

npm install yuque-hexo --save

編輯package.json文件,添加以下內容

Npm Scripts “start” 和 yuqueConfig,將操作命令合併爲一個腳本,只需要執行npm run start即可完成語雀的同步和Hexo的清理和靜態文件生成

{

 ...
 
  "scripts": {
    "start": "yuque-hexo clean && yuque-hexo sync && hexo clean && hexo generate",
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo deploy",
    "server": "hexo server"
  },
  
 ...
 
  "yuqueConfig": {
    "baseUrl": "https://www.yuque.com/api/v2",
    "login": "語雀個人路徑",
    "repo": "知識庫名稱",
    "mdNameFormat": "title",
    "postPath": "source/_posts",
    "onlyPublished": false
  }
}

Come on 發佈文章

無論是發佈新文章還是更新刪除等等操作,只要選擇“文檔有較大更新,推送給關注知識庫的人”即可自動觸發


下面推薦了一下我的博客主題,算是廣告吧~!!

關於 halo

本人目前使用的主題是 hexo-theme-halo ,這是一個採用 Material Design 和響應式設計的 Hexo 博客主題。 是博主基於 hexo-theme-matery 主題修改而來。

主題演示

特性

  • 簡單漂亮,文章內容美觀易讀
  • Material Design 設計
  • 博客名字動態顯示,文章信息統計統頁面展示
  • 響應式設計,博客在桌面端、平板、手機等設備上均能很好的展現
  • 首頁輪播文章及每天動態切換 Banner 圖片,首頁輪播圖設置爲70%頁面高度
  • 首頁subtitle替換打字效果,添加動態詩詞自動切換,
  • 瀑布流式的博客文章列表(文章無特色圖片時會有 24 張漂亮的圖片代替)
  • 時間軸式的歸檔頁,增加簡約風歸檔頁面
  • 分類頁、標籤頁和標籤雲同一頁面顯示,集中展示
  • 豐富的關於我頁面(包括關於我、文章統計圖、我的項目、我的技能、相冊等可自定義)
  • 可自定義的數據的友情鏈接頁面
  • 支持文章置頂和文章打賞
  • 類似於Python Django中SLUG用法的urlname
  • 支持 MathJax
  • TOC 目錄
  • 可設置複製文章內容時追加版權信息
  • 可設置閱讀文章時做密碼驗證
  • GitalkGitmentValineDisqus 評論模塊(推薦使用 Gitalk
  • 集成了不蒜子統計、谷歌分析(Google Analytics)和文章字數統計等功能
  • 支持在首頁的音樂播放和視頻播放功能
  • 支持emoji表情,用markdown emoji語法書寫直接生成對應的能跳躍的表情。
  • 支持 DaoVoiceTidio 在線聊天功能。

下載

當你看到這裏的時候,應該已經有一個自己的 Hexo 博客了。如果還沒有的話,不妨使用 HexoMarkdown 來寫博客和文章。

點擊 這裏 下載 master 分支的最新穩定版的代碼,解壓縮後,將 hexo-theme-halo 的文件夾複製到你 Hexo 的 themes 文件夾中,並修改主題配置項即可。

當然你也可以在你的 themes 文件夾下使用 git clone 命令來下載:

git clone https://github.com/hongweifuture/hexo-theme-halo.git themes/halo

配置

詳情請參照 hexo-theme-halo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章