如何使用 CircleCI 自動更新 Blog

科技來自於惰性, 當然更新也需要自動化啦

所以利用免費服務來自動幫我 CircleCI, 來更新 GitHub Page 啦.

建立 CI 檔案

CI 的資料夾

1
mkdir .circleci

CI 的腳本檔

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
62
63
64
65
cat << 'EOF' > .circleci/config.yml
# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
jobs:
build:
filters:
branches:
ignore:
- master

docker:
- image: circleci/node:10.15.3

working_directory: ~/repo

steps:

- add_ssh_keys:
fingerprints:
- "b9:94:f2:ff:40:5d:d5:6d:42:7d:bb:84:77:34:ef:5f"

- checkout

# Download and cache dependencies
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package.json" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-

- run: npm install
- run: sudo npm install hexo-cli --save -g
- run: sudo npm install hexo-deployer-git --save -g

- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}

- run: ls ./source/_posts

- run:
name: set git info
command: |
git config --global user.email "spike19820318@gmail.com"
git config --global user.name "sam.chu"

- run:
name: hexo clean
command: |
hexo clean

- run:
name: hexo generate
command: |
hexo generate

- run:
name: hexo deploy
command: |
hexo deploy
EOF

腳本的內容就不詳細說明了, 不過比較特別的是 add_ssh_keys 這個動作

因為 CircleCI 跟 Github 只有拿唯讀的 權限 Token, 所以當你要做 hexo deploy 的時候會發現是失敗的.

這邊你要回到 CircleCI 的網站, 透過 CircleCI 再去跟 Github 拿一把完整的 user token, 這樣你才能發佈回去 Github.

進到設定, 選 Checkout SSH keys
Imgur

現在可以看到所謂 Deploy key 而這把 key 是唯讀的
Imgur

我們點選下面的 Authorize With GitHub 按鈕 進入 GitHub 做授權
Imgur

完成之後就可以把原本的 Deploy key 刪掉了
Imgur

並將將特徵碼填入到 .circleci/config.yml 的 add_ssh_keys.fingerprints

這樣一來, Hexo 就可以順利發佈啦

創用 CC 授權條款
SAM的程式筆記 朱尚禮製作,以創用CC 姓名標示-非商業性-相同方式分享 4.0 國際 授權條款釋出。