Xlenco

Xlenco

github
zhihu
email

利用Github Actions自動化部署你的Hexo博客

Github Actions 概念#

GitHub Actions 是一個持續集成和持續交付 (CI/CD) 平台,可用於自動執行構建、測試和部署管道。 您可以創建工作流程來構建和測試存儲庫的每個拉取請求,或將合併的拉取請求部署到生產環境。

GitHub Actions 不僅僅是 DevOps,還允許您在存儲庫中發生其他事件時運行工作流程。 例如,您可以運行工作流程,以便在有人在您的存儲庫中創建新問題時自動添加相應的標籤。

GitHub 提供 Linux、Windows 和 macOS 虛擬機來運行工作流程,或者您可以在自己的數據中心或雲基礎架構中托管自己的自托管運行器。

正文#

Git 推送到 Github 庫的常用連接方案是 HTTPS 和 SSH 這兩種連接方式。

所以 Actions 自動化也大致分為兩種。這裡主要講 HTTPS 連接部署方式

HTTPS 連接部署方式#

獲取 Github token#

  1. 獲取 Github access tokens
    打開https://github.com/settings/tokens
    點擊 Generate new token 新建個 token
    image

image

image

創建存放 Hexo 源碼的私有倉庫#

創建完成後,需要把博客的源碼push到這裡。首先獲取遠程倉庫地址,同樣SSHHTTPS均可。SSH在綁定過ssh key的設備上無需再輸入密碼,HTTPS則需要輸入密碼,但是SSH偶爾會遇到端口佔用的情況。

完成上述操作後新建[Blogroot].github/workflows/autodeploy.yml

# 當有改動推送到master分支時,啟動Action
name: 自動部署

on:
  push:
    branches:
      - main 

  release:
    types:
      - published

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 檢查分支
      uses: actions/checkout@v2
      with:
        ref: main

    - name: 安裝 Node
      uses: actions/setup-node@v1
      with:
        node-version: "16.x"

    - name: 安裝 Hexo
      run: |
        export TZ='Asia/Shanghai'
        npm install hexo-cli -g

    - name: 快取 Hexo
      uses: actions/cache@v1
      id: cache
      with:
        path: node_modules
        key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}

    - name: 安裝依賴
      if: steps.cache.outputs.cache-hit != 'true'
      run: |
        npm install --save

    - name: 生成靜態文件
      run: |
        hexo clean
        hexo generate

    - name: 部署 #此處master:master 指從本地的master分支提交到遠程倉庫的master分支(不是博客的分支寫master即可),若遠程倉庫沒有對應分支則新建一個。如有其他需要,可以根據自己的需求更改。
      run: |
        cd ./public
        git init
        git config --global user.name '${{ secrets.GITHUBUSERNAME }}'
        git config --global user.email '${{ secrets.GITHUBEMAIL }}'
        git add .
        git commit -m "${{ github.event.head_commit.message }} $(date +"%Z %Y-%m-%d %A %H:%M:%S") Updated By Github Actions"
        git push --force --quiet "https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git" master:master

添加環境變量#

變量聲明#

變量名常量釋義
[Blogroot]本地存放博客源碼的文件夾路徑
GITHUBUSERNAMEGithub 用戶名
GITHUBTOKENGithub 用戶郵箱地址
TOKENUSER你部署服務的 Secrets / 例如 GITHUBTOKEN
GITHUBTOKENGithub 密鑰

在你倉庫的Settings->Secrets->actions

image

查看部署情況#

此時,打開 GIthub 存放源碼的私有倉庫,找到 action。

image

image

根據剛剛的 Commit 記錄找到相應的任務,點擊 Deploy 查看部署情況,若全部打勾,恭喜你,你現在可以享受自動部署的快感了。

SS H 連接部署方式#

生成公私秘鑰#

終端中執行:

ssh-keygen -t rsa -C "Github 的郵箱地址"

之前生成過可以忽略此步驟

在 Github 新建 action 流#

在 Github 庫根目錄新建workflows 文件夾,並在 workflows 文件夾中創建 Hexo Deploy.yml
內容如下:

# 自動化名稱
name:  Hexo Deploy

# 觸發條件
on:
  push:
    branches:
      - main

# 設置環境
jobs:
  build:
    runs-on: ubuntu-latest

    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 16.x
        uses: actions/setup-node@master
        with:
          node-version: "16.x"

      - name: 安裝Hexo
        run: |
          npm install hexo-cli -g
          npm install

      - name: 設置密鑰
        env:
          HEXO_DEPLOY_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_PRIVATE_KEY }}
        run: |
          mkdir -p ~/.ssh/
          echo "$HEXO_DEPLOY_PRIVATE_KEY" > ~/.ssh/id_rsa 
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan github.com >> ~/.ssh/known_hosts  

      - name: 設置Git信息
        run: |
          git config --global user.name '你GitHub的用戶名' 
          git config --global user.email '你GitHub的郵箱'      

      - name: Hexo三連
        run: |
          hexo clean
          hexo generate 
          hexo deploy

配置公鑰: 在 Github 網站–>Settings–>SSH and GPG keys 裡,名稱為 HEXO_DEPLOY_PRIVATE_KEY,內容為.ssh/id_rsa.pub 裡的

配置私鑰: 在私有倉庫的 Settings->Secrets 里,名稱為 HEXO_DEPLOY_PRIVATE_KEY,內容為.ssh/id_rsa 裡的,注意複製的時候可能會多一個空格,注意要把它刪掉。
然後就大功告成了!

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。