Featured image of post GitHub Action 自動部署 hexo

GitHub Action 自動部署 hexo

前言

本來部署 hexo 都是手動下指令,但是這樣在手機上因為沒辦法裝 hexo ,所以一直不能在手機上寫文章。剛好想到 GitHub Action 可以滿足我的需求,上網查了一下資料發現蠻多人有和我一樣的需求,這次參考的是 owlran 大大的文章

ssh key

因為要部署到 GitHub repo,最方便的方法當然是 ssh key 啦。

ssh-keygen

首先隨便找個資料夾產生一組 ssh key

1
ssh-keygen -f deploy-key

GitHub

再來要讓 GitHub 知道你的 ssh key(public/secret 都要)

public key

public key 是要放在你的 <username>.github.io 的 repo 下

.ggithub.io -> settings -> Deploy keys -> add deploy key

新增一個 ssh key,名字叫 DEPLOY_KEY_PUB
depoly-key.pub 的內容貼上,記得下面的勾勾(Allow write access )要選起來

secret key

secret key 要放在你存放部落格檔案的 repo,owlran 大大是放在同一個 repo 不同 branch,我是放在兩個不同 repo,其中放部落格檔案的 repo 我設成 private repo(因為我放了一些 gitalk 要用的 clientSecret,這個不能公開)。
總之到你要放部落格檔案的那個 repo,新增一個 secret,等等要再 GitHub Action 裡面調用。

你放部落格檔案的那個 repo -> reposettings -> Secrets -> add a new secret

名字是 DEPLOY_KEY,內容是 deploy-key 裡面的東西
接下來就可以進入到 Action 了

Action

我的 Action 內容基本上是複製 owlran 大大的,但是因為 repo 結構有小小不同所以我了一些修改,如果你要改的話應該是不難才對,GitHub Action 的設定檔我覺得還好懂的。
這個設定是放在你放部落格檔案的那個 repo

注意:第 27, 28 行的 usernameemail 記得改成你的,不然 git commit message 會有問題

你放部落格檔案的那個 repo -> Action -> New workflow -> set up a workflow yourself

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
name: Hexo
on:
    push:
        branches:
            - master
jobs:
    build:
        runs-on: ubuntu-latest

        steps:
            - uses: actions/checkout@v1
            - name: Use Node.js ${{ matrix.node_version }}
              uses: actions/setup-node@v1
              with:
                  node_version: ${{ matrix.node_version }}
            - name: Configuration environment
              env:
                  DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
              run: |
                  mkdir -p ~/.ssh/
                  echo "$DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa
                  echo "$DEPLOY_KEY"
                  chmod 600 ~/.ssh/id_rsa
                  ssh-keyscan github.com >> ~/.ssh/known_hosts                  
            - name: git config
              env:
                  username:
                  email:
              run: |
                  git config --global user.name "$username"
                  git config --global user.email "$email"
                  git config --global commit.gpgsign true                  
            - name: Imoport GPG key
              id: import_gpg
              uses: crazy-max/ghaction-import-gpg@v2
              with:
                  git_user_signingkey: true
                  git_commit_gpgsign: true
              env:
                  GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
                  PASSPHRASE: ${{ secrets.PASSPHRASE }}
            - name: Update themes
              run: |
                  git submodule init
                  git submodule update                  
            - name: Install dependencies
              run: |
                  npm i -g hexo-cli
                  npm i                  
            - name: Clean file
              run: |
                  hexo clean                  
            - name: Generate hexo
              run: |
                  hexo generate                  
            - name: list posts
              run: |
                  hexo list post                  
            - name: Deploy hexo
              run: |
                  hexo deploy                  
好想養貓阿~~
使用 Hugo 建立
主題 StackJimmy 設計