使用 Travis CI 自動發布 Hexo 內容到 Github
其實一直都想研究一下 CI/CD 的一些流程,知道 Travis CI 可以結合 Github 上的專案來進行,那就先從一些簡單的小專案開始好了,上網找到一篇文章有 Travis CI 與 Github 以及 Hexo 的關鍵字,害我好興奮,看了好一陣子後決定上了!
前期準備
- 申請 Travis CI 帳號
- 串接 Github 上的 repo
- 替 github 的 repo 加上 .trivas.yml 檔案
- 這就比較麻煩,因為得根據各自專案的程式語言來撰寫,我也超不熟,只好去官方網站看文件了
- 我先以目前 hexo 的專案為例,就如下面顯示少少兩三行
language: node_js |
Add Private Key
因為不能大辣辣的把自己 ssh private key 丟到 github 上,所以 Travis CI 提供加密的方式,可以把 private 加密,等到 Travis 上再來處理;因為我已經把自己電腦的 private key 加到 github 上,所以就直接把 key 加到 Travis 與對應的 repo 上
- 安裝 Travis command line tool,因為使用 ruby 所以要確認電腦已經安裝好 ruby
gem install travis |
- 透過 Command Line Tool 登入到 Travis,需要輸入 github 的帳號密碼
travis login --auto |
- 將自己的 private key 加到對應 repo,加入後會自動改寫 .travis.yml 檔案
- 我後來在專案下建立 .travis 目錄,然後將 private key 資料放進去
travis encrypt-file ~/.ssh/id_rsa_github --add |
這時候 .travis.yml 裡面會被添加一些加解密的指令,就不要亂改嘍!注意最後的 -in xxxxx.enc -out oooooo -d
,當中xxxxx
是剛剛加密後產生的 .enc 檔,而ooooo
是 Travis 解密後的檔案路徑,之後會一直用到
-in xxxxx.enc
整個 repo 被 Travis CI 抓取後 private key 的相對路徑,剛剛搬到 .travis 目錄下,所以是.travis/id_rsa_github.enc
-out ooooooo
解密後 private key 路徑,後續會再用到,這裡我定義成~/.ssh/id_rsa
language: node_js |
加入 SSH 連線設定
這時只是把自己的 private key 加密後,在 Travis 從 github 抓出來解密成功,接著還需要指定 SSH 連回 github 使用剛剛解密的 private key,步驟大概是:
增加 ssh 連線的 config 設定
- 自己的再連 github 的時候,因為有兩個 github 帳號,所以產生了兩組 private key使用,連帶需要把 ssh 連線設定分開寫
- 這邊只列出自己目前常用帳號的 ssh 連線設定提供參考
vim .travis/ssh_config |
內容如下:
# SoarLin@github |
.travis.yml 內設定
- 更改 private key 權限為 600
- 將 private key 增加到系統中
- 將 ssh 連線搬到系統
~/.ssh
目錄下
以上這些動作,大概會讓 .travis.yml 檔案變成如下
language: node_js |
增加 git 資訊
因為 hexo deploy 的時候,會將所有產生出來的檔案 push 回 github,所以需要有個 git psuh 的使用者資訊,所以繼續加入 .travis.yml
language: node_js |
加入 Hexo 以及執行 Deploy
最後當然是把 hexo 套件安裝好,然後執行hexo generate
來產生檔案,以及hexo deploy
來自動發布,因為我自己還要把 blog 文章丟去 ElasticSearch Server 建立 index 來做搜尋索引,所以會再多一些東西,最後完成的 .travis.yml 大概如下:
補充:
一開始忘了把 package.json 內相關套件安裝,所以後來才又補上 npm install
,以及增加個 cache,才不用每次都重新安裝 node_modules 內的套件。
目前 repo 內的佈景,不曉得為何沒有跟著上 github,所以之前 deploy 後,整個頁面空空如也,所以只好再把布景重新傳上去
language: node_js |
後記
雖然好像不複雜,可是我也是照著大大的教學文章,做了好幾個小時,不斷的失敗,不斷的找其他資料參考,最後才完成這小小的流程。希望之後可以越來越上手嘍~
Reference
用Travis CI自动部署Hexo博客 <– 推薦這篇,很詳細
用 Travis CI 自動部署網站到 GitHub <– Hexo作者大大的文章
用 Travis CI 自動部屬 hexo 到 GitHub
使用 Travis CI 自动更新 Hexo Blog