如何更'懶'的用Hexo和Travis CI搭建本身的blog

前言

社交是每一個人的慾望,而單從一個技術人員角度來說,創建本身的技術博客也是一種重要的外界溝通。blog中的每篇博文均可以是本身一段時間的技術總結(最重要的是可以有規律的堅持下去)。 html

Anyway!首先咱們來看看一個新手在第一次嘗試搭建技術博客時可能會選擇的技術方案:

  • wordpress + 雲主機 + 插件(付費:目前aliyun 1核1G 330RMB/year左右,學生價120RMB/year左右,騰訊雲相似)
  • jekyll + github pages + markdown(免費: github默認支持jekyll,能夠直接將原生文件放到github上,github自動編譯)
  • hexo + github pages + markdown(免費: 操做簡單)

blog本質上是靜態網站(無需太多交互),核心是文章內容,所以上面的3種方式均可以自行選擇。目前我搭建的方式是第三種。
ok,選擇好了方式,第一步確定是在本地電腦搭建hexo。具體的搭建方式網上一大堆,這裏我就不講解如何搭建了,不過我建議直接看官方文檔便可,由於官方文檔確定是穩定最新的。node

另外,在這裏強烈自薦我合做的hexo-theme-skapp,歡迎star和issuelinux

前提講完了,開始切入重點,咱們在使用一段時間的hexo以後,會發現一個很是蛋疼的問題:
每次想要更新博客,都須要到安裝hexo的電腦上去更新,這真是太麻煩了...
也就是說,最基礎的跨電腦都會有困難。git

解決方案

首先,咱們先來分析一下hexo:hexo本質上是一個解析markdown文件的node程序,做用在於將markdown轉換成對應的HTML文件,並提供了不少實用的封裝命令。github

咱們簡單想想,是否是能夠直接版本控制來維護咱們的blog程序,而github自己不就是一個版本控制的網站嗎?npm

那麼咱們能夠將hexo做爲blog代碼庫的一個分支來同步到github上面(注意配置下.gitignore文件,ignore不須要維護的文件)。這樣,一旦咱們但願用另一臺電腦來更新博客,咱們只須要將blog的代碼庫檢下來便可。這樣多臺電腦就至關於多個開發共同開發維護blog代碼庫。ubuntu

可是,這樣用着一段時間後,仍然會存在一些小問題。
先舉個例子:好比我有一臺win10的thinkpad筆記本,還有一臺macbook pro,公司裏面使用的ubuntu 16.04LTS. 這3臺電腦我都會維護更新個人博客。首先,這3臺電腦都git clone了blog代碼庫。而後,咱們npm install了node的依賴包,這個時候咱們可能會發現某些系統下hexo程序運行報錯(對,沒錯我說的就是windows,好比node最基本的node-gyp在win下安裝就很麻煩),雖然,咱們能夠經過各類補丁等等東西解決了系統問題,可是這個仍然很是的麻煩啊!windows

那能不能在多個系統的電腦上更新博客,而不須要考慮系統的兼容性問題?ruby

下面就DuangDuangDuang的介紹下travis CI,travis CI是一種構建和測試的自動化工具。從其簡稱CI就能夠理解,Travis CI提供的是持續集成服務(Continuous Integration).它能夠綁定github上面的項目,只要有新的代碼提交,就會自動抓取,而後travis會提供一個運行環境,執行測試,完成構建並部署到服務器。bash

經過travis CI,咱們每次只要更新markdown文件,網站內容就能自動更新了。在這裏就不具體的講如何入門travis CI了,具體學習能夠點擊travis CI官網或者阮一峯travis CI教程

詳細搭建步驟

咱們在部署博客時,hexo d就能夠搞定,可是問題在於Travis CI自己並無對github庫進行push操做的權限。若是咱們直接將密鑰直接放在開源庫中,則至關於將代碼庫的提交權限開放給全部github的使用者,所以,咱們須要一些加密操做。

1. travis本地環境搭建

brew install ruby 
複製代碼

首先本機安裝ruby。

2. Deploy Key

$ ssh-keygen -t rsa -C "your_email@example.com"
複製代碼

首先經過ssh-keygen生成一個SSH key專門提供給github中blog庫使用。在生成SSH key時,將passphrase留空,由於在travis中輸入密碼比較麻煩。 而後將製做完成的Public key複製到github blog代碼庫的Deploy key裏面,以下:

3. 加密 private key

$ gem install travis // 安裝travis命令行工具
$ travis login --auto // 命令行登陸travis
複製代碼
$ travis encrypt-file ssh_key --add
複製代碼

這裏假設private key的文件名爲ssh_key,travis會加密產生ssh_key.enc,並自動在.travis.ymlbefore_install位置自動插入解密指令。
注意:這裏在windows系統下使用travis encrypt-file命令加密生成的ssh_key.enc在travis執行時會在解密密鑰時失敗。具體緣由在travis的issue中能夠查看File decryption fails on Windows。最簡單的作法就是在linux或mac環境下生成該文件。

4. 設定 .travis.yml

首先咱們在blog根目錄下創建.travis文件夾和.travis.yml文件。 而後咱們將生成的ssh_key.enc移動到本地blog項目的.travis文件夾下面,並在.travis目錄下建立ssh_config文件,而後配置Travis上的SSH設定。

Host github.com
  User git
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes
複製代碼

由於咱們剛剛修改了ssh_key.enc的位置,所以咱們須要修改.travis.yml中剛剛插入的解密指令(不要照抄,不一樣的環境修改不同)

- openssl aes-256-cbc -K $encrypted_06b8e90ac19b_key -iv $encrypted_06b8e90ac19b_iv -in .travis/ssh_key.enc -out ~/.ssh/id_rsa -d
複製代碼

該命令會利用openssl來解密private key,並將解密後的文件放在 ~/.ssh/id_rsa,接着咱們指定該檔案的權限:

- chmod 600 ~/.ssh/id_rsa
複製代碼

而後將private key加入到系統中:

- eval $(ssh-agent)
- ssh-add ~/.ssh/id_rsa
複製代碼

接下來將ssh_config文件複製到~/.ssh目錄下:

- cp .travis/ssh_config ~/.ssh/config
複製代碼

爲了使git操做可以正常進行,咱們須要事先設定git的使用者訊息:

- git config --global user.name "Bruce"
- git config --global user.email "your email address"
複製代碼

最後的結果大概以下:

language: node_js
node_js: stable
cache:
 directories:
 - node_modules
before_install:
  # Decrypt the private key
 - openssl aes-256-cbc -K $encrypted_0c8703cca11f_key -iv $encrypted_0c8703cca11f_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
  # Set the permission of the key
 - chmod 600 ~/.ssh/id_rsa
  # Start SSH agent
 - eval $(ssh-agent)
  # Add the private key to the system
 - ssh-add ~/.ssh/id_rsa
  # Copy SSH config
 - cp .travis/ssh_config ~/.ssh/config
  # Set Git config
 - git config --global user.name "Bruce"
 - git config --global user.email "444048170@qq.com"
install:
 - npm install
script:
 - hexo g
after_success:
 - hexo deploy
branches:
 only:
 - hexo
複製代碼

reference

1.tommy351,continuous-deployment-to-github-with-travis

相關文章
相關標籤/搜索