利用Travis-CI實現線上更新Hexo
Hexo作為靜態部落格,好處相當明顯,開銷少,並且對於那種DDosS和CC套上CDN毅然不動。當然,最蛋疼的莫過於更新了,每次在自己電腦上辛辛苦苦碼好字,一個push,hexo綠色光芒在命令提示符上閃爍著光芒,突然發現把倉庫名字 ChenYFan
打成 CehnYFan
真實事件 ,異或著是用手機檢視自己的部落格,突然發現:
由於hexo基於nodejs+git,手機無法更新;同時如果換了臺電腦,hexo就要重灌。這種事情hexo使用者應該體會得到,我也就不多說了。
那麼,hexo使用者如何進行線上更新呢?
正常來講,伺服器法 最直接,但也是最沒用的。用伺服器就意味著喪失了hexo的最優點-節省開支。當然,Hexo+Nginx+HexoAdmin確實可以實現很棒的書寫環境,但是與其這麼麻煩你還不如直接用Typecho&Wordpress呢。
曾經在 Hexo官方 上看過 利用Travis-ci自動部署GithubPages 不過我一看到這麼多步驟直接 萎縮
後來,促使我改變主意的,是我得知中考之後放假三天接著上課[高中],我***,然後突然想起來部落格不方便更新,接著手一抖,把部落格的Repo刪掉了.
...
既然刪了,那麼就這麼幹吧。
其實後來發現這並不困難,只是我剛開始想多了而已。
簡介
Travis CI是在軟體開發領域中的一個線上的,分散式的持續整合服務,用來構建及測試在GitHub託管的程式碼。這個軟體的程式碼同時也是開源的,可以在GitHub上下載到,
實際上你會發現,當你把部落格Push到Github上時,你的計算機會在NodeJS環境下生成靜態檔案,然後push到Github。這些步驟其實完全可以用Travis CI做到。
最好在 source
下新建一個 CNAME
檔案,並將繫結的域名寫進去,不然直接在 gh-page
分支里弄Travis-ci會覆蓋掉的.
開始
本地搭建環境
這一步必不可少,額具體方法網上一搜一大堆,這裡就不說了。請注意,最好事先選好主題和外掛,配置完成後自己測試一下。完畢後進入下一步。這裡不在演示了【畢竟搭建環境與此博文幾乎無關】
上傳
預設情況下,直接在hexo部落格根目錄上鍊接repo上傳,不會把 node_modules/
上傳上去,因為 .gitignore
中包含這麼一行:
但是當時以為我拓展是不能上傳的,於是手一滑,刪掉那一行,上傳上去了。
結果後來發現這就是個錯誤的選擇。
node_modules/
中,檔案比較小node_modules/
中,檔案比較多
所以:
node_modules/
中,檔案比較碎
嗯,
我 git add .
了一下,它運算了半小時, git commit
又花了半小時,幸好git push
是打包上去的,不然我估計又要花半個小時.
結果戲劇性的是,當我去看travis-ci部署記錄時,我發現:
所以,還沒用Travis-ci的同學,請不要手賤刪掉
.gitignore
中的node_modules/
部署
這裡暫時不說私有怎麼部署,這裡講的是PublicRepo.
1.註冊travis-ci.org
前往 [https://travis-ci.org] 用Github賬號註冊 注意了啊,注意了啊, 是 .org
而不是 .com
! 鬼知道我在這上面浪費了多少時間! travis-ci.org
是免費給公開repo部署的,travis-ci.com
是收費的,但是 travis-ci.com
卻是可以繫結並免費部署公開Repo的.最有問題的是這兩個網站其中一個繫結repo後,另一個就不能綁定了!! 害得我以為是快取搞出來的事,搞了半天沒解決,一看位址列人都傻了.
2.繫結travis
前往 [https://github.com/marketplace/travis-ci] 繫結travis-ci到你的github後 繼續前往 GitHub 的 Applications settings ,點選 Travis CI
配置你的repo能被TravisCI訪問
3.新建Token
前往 GitHub 新建 Personal Access Token
新建一個Token:
然而請注意,官方文件裡說只需勾選 repo
全部許可權即可,但是據我測試,只勾選則會導致401驗證錯誤.似乎還要勾選 read:public_key
和 read:user
,當然如果你足夠懶,你也可以全勾上, 但請不要把Token洩露出去,否則你的Github就不太好使了.
點選生成Token:
記得複製下來儲存!不然下次你就看不到你的Token了!
4.修改Repo
進入Repo的 Master 分支,新建一個 .travis.yml
,裡面塞上:
xxxxxxxxxx
sudofalse
language node_js
node_js
# use nodejs v10 LTS 10
cache npm
branches
only
# build master branch only master
script
# generate static files hexo generate
deploy
provider pages
skip-cleanuptrue
github-token $GH_TOKEN
keep-historytrue
on
branch master
local-dir public
對,改都不要改,就這麼塞進去.
5.Token匯入Travis-ci
Token很重要,你必須要告訴Travis-ci,因為它要獲取對你的repo的寫入權,但你也不能明文寫在Repo裡面,因為別人看得到.
所以,在 [### 4.修改Repo] 中,github-token:
後面跟著的不是明文,而是變數 $GH_TOKEN
.
進入 [https://travis-ci.org/github/{使用者名稱}/{倉庫名}/settings] 中,看到 Environment Variables ,Name選擇 GH_TOKEN
,Value把[### 3.新建Token] 中的Token貼上到裡面去.BRANCH直接預設.
特別注意!,將後面DISPLAY VALUE IN BUILD LOG弄成灰色,不然你的Token將會公開!,如果你不慎公開Token,請前往GithubPersonalToken刪除並重新生成一個Token!
最終應該是這樣子的:
在日誌裡面,搜尋Token,應該是這樣子的:
xxxxxxxxxx
$ export GH_TOKEN=[secure]
6.開啟觸發器
前往 https://travis-ci.org/account/repositories,開啟目標Repo後面的按鈕:
7.觸發Travis-ci
修改檔案或新建Readme,讓Travis-ci觸發並開始工作.
比如說我更新 留言板.md
,Github上一更新,Travis-ci自動開始工作:
本次日誌地址 https://api.travis-ci.org/v3/job/703061869/log.txt
8.以後
更新部落格直接在Github上更改,或者寫好之後直接上傳,或者pull到本地寫好後push到Github,此後操作使用者無需本地使用Hexo,也不用調整Travis-ci,安心寫部落格吧!
草稿問題
其實這個比較簡單,在修改時新建一個branch,名字叫 drafts
,由於 .travis.yml
規定只捕獲 master
,草稿分支不會觸發,修改的時候全部在drafts上修改,修改好了直接PullRequest,完事!
這麼幹以後,一定要注意,以後所有修改無論大小,都必須先在 drafts
裡修改,然後發起PR,然後合併.不然直接在 master
裡修改有可能會導致無法合併!
後記
總之,這樣就可以安心用手機或者在學校更新Blog了!