前言:先宣傳一下個(gè)人博客,如果你覺得在我的文章中有所收獲,求一個(gè)Star,如果你有好的建議,請(qǐng)麻煩留言告訴我
前言
說起自己寫博客的歷史也是有斷斷續(xù)續(xù)一年了,大概也是18年春節(jié)期間自己fork了他人的博客笑旺,使用gitPages部署昼浦,也是從那時(shí)開始學(xué)習(xí)git,博客說起來也算是自己成為一個(gè)稍微正式一點(diǎn)的coder的開端吧筒主。至于自己為什么要放棄之前博客关噪,要重新利用hexo打造個(gè)人博客鸟蟹,原因如下:
- hexo配置簡單,插件豐富
- 3-hexo這個(gè)主題比較符合自己對(duì)于博客條理性的要求使兔,相比于之前的博客更加精煉建钥,易整理,易閱讀
- ci的集成也讓hexo更加關(guān)心寫作本身
在閱讀本文之前,默認(rèn)讀者擁有域名解析經(jīng)驗(yàn)與gitPages了解,如果存在疑問,請(qǐng)參考我fork的上一個(gè)Blog原作者的詳細(xì)搭建流程
基礎(chǔ)環(huán)境
hexo安裝
基礎(chǔ)環(huán)境:Node,Git
教程:hexo官網(wǎng)安裝教程
3-hexo主題
Travis CI配置
請(qǐng)先按以下操作配置,詳細(xì)配置在余下篇幅介紹
- 將Travis CI授予GitHub權(quán)限
- 需要被CI管理的倉庫在根目錄生成 .travis.yml文件,并進(jìn)行push到github
- Travis CI開啟對(duì)相應(yīng)倉庫的監(jiān)測
- push代碼到ci配置的監(jiān)測分支,看log記錄是否觸發(fā)成功
ci觸發(fā)分支配置
branches:
only:
- source //觸發(fā)ci的條件分支
補(bǔ)充: 為防止有些同學(xué)不了解CI概念,我簡單介紹下CI,CI意味著持續(xù)集成,可以以我公司配置的CI為例,我們都知道代碼上線需要保證質(zhì)量,我們可以在CI中配置每次進(jìn)行Git Push時(shí),復(fù)雜CI的機(jī)器就會(huì)進(jìn)行代碼的編譯,歷史自測的檢查,當(dāng)我們合并Master分支時(shí),我們的對(duì)外的Api可能發(fā)生變化,也可以依靠CI進(jìn)行自動(dòng)API包的發(fā)布,這些都是CI要做的事情,在這篇文章涉及的代碼庫存在兩個(gè)分支,source分支保留我們博客的源碼,包含我們文章的Markdown等文件,Master分支是Hexo生成的靜態(tài)網(wǎng)頁文件,我們依靠Travis CI做到的就是,我們向source分支提交代碼,Travis CI進(jìn)行拉取環(huán)境,編譯,最后hexo deploy到Master分支,讓我們的網(wǎng)頁進(jìn)行變化
CI
.travis.yml文件加入對(duì)環(huán)境運(yùn)行環(huán)境支持
language: node_js //node環(huán)境
node_js:
- 10.15.1 //node版本
branches:
only:
- source //觸發(fā)ci的條件分支
before_install:
- npm install -g hexo-cli //hexo環(huán)境
- npm install --save hexo-deployer-git //hexo deploy插件
install:
- npm install //安裝package.json文件中配置的hexo插件
當(dāng)source分支發(fā)生改變,Travis CI監(jiān)測到change后進(jìn)行ci,首先安裝node環(huán)境,之后安裝hexo環(huán)境,安裝deploy插件,安裝額外hexo插件
_config.yml文件加入倉庫配置
deploy:
type: git
repo: git@github.com:EvanLjp/evanljp.github.io.git
branch: master
一些細(xì)心地同學(xué)可能已經(jīng)發(fā)現(xiàn)了一些問題,我們是在運(yùn)行ci的機(jī)器進(jìn)行deploy,但是我們機(jī)器上并沒有配置git秘鑰,怎么能進(jìn)行push操作呢,這就要說到Github OAuth,支持一種帶有token的秘鑰進(jìn)行免git秘鑰push
創(chuàng)建Github OAuthToken
- 打開 Personal Access Tokens
- create new token
- 請(qǐng)注意,至少給這個(gè)token repo的權(quán)限,否則無法push
- 進(jìn)行token可用性測試
- 按https://<token>@github.com/owner/repo.git格式拼接某個(gè)倉庫的url(<token>表示生成token),例如我的blog倉庫地址:https://1f0f0XXX@github.com/Evanljp/evanljp.github.io.git(XXX表示省略,實(shí)際token很長)
- 進(jìn)行g(shù)it clone ,能clone說明url拼接合理
- 進(jìn)行g(shù)it push,如成功,說明這個(gè)token可用,如發(fā)現(xiàn)403,請(qǐng)檢查repo權(quán)限是否賦予
我們已經(jīng)看到這個(gè)token權(quán)限的強(qiáng)大之處,我的倉庫source分支包含了Blog的所有源碼,我不可能把這么大權(quán)限的token進(jìn)行暴露,所以必須進(jìn)行加密,幸好travis已經(jīng)提供解決方案,接下來我們看一下如何token加密
Token加密
- 首先安裝 travis 命令行工具
gem install travis
travis login
- .travis.yml通過命令加入加密token :
travis encrypt 'GH_TOKEN=TOKEN' --add,TOKEN表示之前明文token,你會(huì)發(fā)現(xiàn).travis.yml文件已經(jīng)加入了如下內(nèi)容:
env:
global:
secure: fuY23T6wEu...
Token解密
在.travis.yml文件加入如下內(nèi)容,以動(dòng)態(tài)解密發(fā)布
after_success:
- git config --global user.name "evanljp"
- git config --global user.email "evanljp@outlook.com"
- sed -i'' "s~git@github.com:EvanLjp/evanljp.github.io.git~https://${GH_TOKEN}:x-oauth-basic@github.com/EvanLjp/evanljp.github.io.git~" _config.yml
- hexo deploy --silent
發(fā)布
上一步的配置中實(shí)際已經(jīng)加入了hexo deploy --silent發(fā)布配置,請(qǐng)動(dòng)手嘗試,觀看CI線上Log,如果發(fā)現(xiàn)Push成功,那么恭喜你,你也擁有了一個(gè)可以自動(dòng)Ci的blog,讓你可以更加關(guān)注寫作