[轉]使用 Travis CI 部署你的 Hexo 博客

以前使用Hexo的時候,都是在本地進行編譯和部署的,平時使用的時候以爲沒什麼,只須要html

hexo g
hexo d

兩步就能夠把博客更新的內容推到GitHub Pages上。可是某些時候可能會遇到你的文件夾中存在一些其餘編輯到一半的文章——這時候想要更新博客中的某些內容但同時不想把沒寫完文章發佈出去的話,就必需要先把那幾篇文章移到其餘地方,更新完複製回去。node

這種蠢辦法雖然有效可是十分麻煩——因此此次咱們要上一些更牛逼的工具,例如——Travis CI。git

思路

作這件事的大致思路就是——以 remote 端的倉庫爲標準,來生成咱們咱們的博客。咱們只須要把須要發佈或者更新的內容push到遠程倉庫,持續集成工具就會幫咱們把倉庫中的內容clone下來,而後再在它的容器裏進行編譯、部署的流程。github

開始以前首先要說的是,個人博客使用GitHub Pages來託管。源文件存放在 master 分支裏,頁面文件存放在 gh-pages 分支裏。segmentfault

啓用 Travis CI

首先用你的GitHub帳戶登陸Travis CI安全

登陸以後,在你的我的信息頁面能夠看到你GitHub中的全部倉庫(若是沒有的話受權一下就有了),找到你的博客所在的倉庫,把右邊的開關鍵撥到打開的狀態。服務器

點擊右邊的按鈕進入設置頁面,在設置頁面中咱們能夠設置何時須要CI工具執行Build、配置環境變量、配置定時任務等。hexo

這裏推薦把 Build only if .travis.yml is present 這一項打開。工具

爲 Travis CI 配置登陸權限

動動腦想想就能知道——若是咱們在一個陌生的容器中執行了編譯操做而後想要推送到本身的GitHub倉庫中時,是沒有權限的——咱們既沒有配置SSH Key也沒有在任何位置輸入過密碼。這裏咱們要用一個安全、穩定、便捷的手段來解決權限這個問題。網站

Access Token是一個好的解決方案。你能夠理解成咱們爲給這個應用程序單獨生成了一個口令,這個口令裏包含了咱們的帳戶和密碼,咱們在將要把代碼推送到Github倉庫的時候,告訴他這個口令,他就會把放行咱們的推送請求了。

首先去GitHub給帳戶添加一個Personal Access Token。打開GitHub,在 Settings 頁面中找到 Developer settings ,打開 Personal access tokens 標籤頁,點擊新建一個token。

爲這個Token取個名字,而後勾選 repo 這一欄,點擊保存。

若是不出意外,保存後屏幕上會顯示一行亂碼——這就是服務器爲你生成的口令。 你須要先把他複製下來,由於在此以後你是看不到這個口令的。你也沒必要把它記在小本本上,若是有須要再生成一個

咱們在Travis CI中把口令設置爲一個環境變量。打開剛纔Travis CI中blog倉庫的設置頁面,在環境變量一欄把 access_token 做爲一個value填寫進去,而後給它取個好聽的名字,點擊添加。 推薦不要勾選 Display value in build log 否則別人能夠在日誌裏看到你的口令。

能夠看到上面那一行是以前添加過的token。正常狀況下別人是不會看到你的口令的

在Travis CI服務端須要設置的就是這些,接下來要在倉庫中添加Travis CI的配置文件。

添加配置文件

首先要看一下你hexo的配置文件 _config.yml 中部署那一塊的配置,以個人爲例——

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: https://github.com/morenyang/blog.git
branch: gh-pages

這裏的指定了博客的倉庫連接和部署的分支。這裏的倉庫連接過一會是要被替換成token形式的連接。

在倉庫的根目錄下,新建一個 .travis.yml 文件,而後將如下內容寫進去,並將該改的地方改一下:

language: node_js
node_js: --lts
before_script:
- git config user.name "YOUR_NAME"
- git config user.email "YOUR_EMAIL"
- sed -i'' "s~https://github.com/<yourname>/<reponame>.git~https://${GITHUB_ACCESS_TOKEN}@github.com/<yourname>/<reopname>.git~" _config.yml
script:
- hexo g
- hexo d

說明一下:

  • language 一項指的是容器的運行環境
  • node_js 一項指的是運行環境中node的版本,能夠參照 nvm 的版本寫法
  • before_script 指的是在執行操做前要運行的命令。
    • 這裏咱們指定了 git 的一些配置
    • 而後使用sed命令將hexo的配置文件中的部署倉庫的連接替換成了access_token形式,其中前面的那一串是你在_config.yml中的連接,後面的那一串是token形式的連接。 ${GITHUB_ACCESS_TOKEN} 就是咱們剛纔爲access_token配置的環境變量中的變量名。 這裏記得把yourname和reponame換成你的
  • script 指的就是build的時候須要執行的命令了,這裏根據平時的習慣設置爲 hexo g 和 hexo d
  • 若是有其餘須要,你還能夠加入本身的配置,例如設置分支、設置其餘環境變量,還有一些生命週期的hook之類的,具體能夠去查一下

親手試一把

到這裏咱們就大功告成了,在把配置文件推送到遠程倉庫後,你只須要把你更新的內容推送上去,你就能夠在Travis CI的網站中看到實時的編譯和部署狀況了。

參考

 

 

 

連接:http://yangteng.me/blog/2018/20180517deploy-hexo-with-travis/

相關文章
相關標籤/搜索