以前更新blog要這樣:本地安裝hexo環境,還須要敲幾個命令:
hexo clean && hexo g && hexo d
,構建部署還有點浪費時間。其實每次更新blog的時候,只須要增刪改幾個Markdown文件。懶~乾脆上CI吧。
CI(Continuous Integration)—— 持續集成。
其實光從名字其實能大體知道CI作了什麼事情。硬件領域有集成模塊、集成電路,軟件領域也有集成概念:項目構建、自動化測試、部署等等。個人理解,每一個成熟的產品從零散到成型到出品(上線)的過程,就是集成(Integration)。那麼CI作的事情,就是讓這個工程自動化,持續進行(Continuous)。javascript
"持續集成並不能消除Bug,而是讓它們很是容易發現和改正。" -- Martin Fowler
其實應該將這幾個概念揉在一塊兒:持續集成、持續部署、持續交付、持續發佈。
1.代碼提交:commit
2.測試(第一輪):hook相應的commit動做,自動化測試
3.構建:build,至關因而編譯可用的代碼
4.測試(第二輪):包含單元測試和集成測試
5.部署:打包至生產環境
6.回滾:若最新版本發生異常,則回滾到上一版本html
Travis CI: 在線託管的CI服務,最重要的事情,它對開源項目是免費的!!!(重要的感嘆號加三個!!!)
Travis CI 官網上醒目的大字:
Test and Deploy with Confidence
Easily sync your GitHub projects with Travis CI and you’ll be testing your code in minutes!java
赤裸裸的表白,果真和Github是一對好基友。
這意味着,咱們在Github的 Public Repository均可以利用Travis CI 進行免費的持續集成,固然,Personal Repository也能夠用它,不過挺貴的。以前用Github Pages 搭的Blog恰好能夠用Travis CI來持續構建,將偷懶進行到底吧!node
打開Travis CI ,使用 GitHub 第三方受權登陸,不要問爲何,好麗友,好基友。git
勾上你的blog repo (這裏我勾上了palmerye.github.io
),點擊小齒輪,進入配置頁。github
打開最上方兩個開關,其它默認就好了:Build only if .travis.yml is present
Build pushed branches
npm
其實官方也有教程,只要三步:json
劃重點了!
1.新建一個source分支,將原來本地的Hexo工程,gitignore外的那些目錄,切到source分支。(最終咱們只須要推這個分支到origin)gulp
// .gitignore .DS_Store Thumbs.db db.json *.log node_modules/ public/ .deploy*/
2.爲Travis CI 新建Token服務器
這一步很關鍵,爲何Travis有權限幫你推GitHub?因此你要給它鑰匙,就是Token。
在GitHub我的帳戶 Setting/ Developer settings/ Personal access tokens
下,新建一個Token,而後在Travis CI配置中,Environment Variables,添加生成的Token。
3.source分支下新建.travis.yml
language: node_js node_js: stable cache: directories: - node_modules # S: Build Lifecycle install: - npm install #before_script: # - npm install -g gulp script: - hexo clean && hexo g after_script: - git clone https://${GH_REF} .deploy_git - cd .deploy_git - git checkout master - cd ../ - mv .deploy_git/.git/ ./public/ - cd ./public - git init - git config user.name "palmerye" - git config user.email "palmerye@gmail.com" - git add . - git commit -m ":memo:\ Update docs by CI" - git push --force --quiet "https://${CI_TOKEN}@${GH_REF}" master:master // CI_TOKEN爲上一步在github上生成的Token。 # E: Build LifeCycle branches: only: - source env: global: - GH_REF: github.com/palmerye/palmerye.github.io.git
其實看這個配置文件就大體能知道這個流程,在Travis 服務器上install
相應的依賴,而後執行hexo clean && hexo g
等一系列以前須要在本地跑的命令,最後將生成的靜態資源blog(在./public
目錄下),推到master分支。
4.將source分支推到遠端,Travis 監聽到有動做就會跑上面咱們配置的腳本。
如今,咱們能夠把本地那些hexo臃腫的依賴刪了(這意味着,你在任意的電腦上都能快速更新blog了,不須要安裝hexo依賴),每次只須要增刪改/source/_posts/
下的markdown文件就能夠了,輕輕push一下,其餘交給Travis CI吧,你能夠在Travis / Current
看到實時的構建狀態,包括構建時間和成功與否。
最後,爲了提升Blog的檔bi次ge,在readme加個build passing 標籤吧。
其實前面只是最簡單粗暴的用了Travis CI,它還有不少強大的功能,好比一些 Cron Jobs,都是比較傻瓜式的,有時間繼續搞吧。乾巴爹?!繼續寫blog了。
PS:
Blog in Github:https://github.com/palmerye/palmerye.github.io/