前言
前面兩篇文章介紹了在github上使用hexo搭建博客的基本環境和hexo相關參數設置等。
基於目前,博客基本上是可以完美運行了。
但是,有一點是不太好,就是源碼同步問題,如果在不同的電腦上寫文章會非常不方便。
是因爲hexo使用的部署命令是把生成好的靜態文件上傳到倉庫中的,所以,在其他電腦上同步下來的只是靜態文件而已,不是源碼。
到這裏就會想到能不能這樣:將源碼同步到遠程倉庫後,可以實現自動生成部署呢?
答案是肯定的,可以通過Travis CI來實現。
那麼,本文就介紹一下Travis CI實現Hexo博客自動生成並部署。
說明:
文中出現的命令,Windows用戶注意,命令前面有 $ 的表示在Git Bash中執行,沒有的在CMD命令窗口執行。
Linux和MAC系統在終端下不區分。
配置多個SSH
-
生成ssh密鑰
可以使用全局的ssh密鑰,不過建議使用單獨的ssh密鑰,在這裏以單獨ssh密鑰爲例。
由於之前生成過ssh密鑰,現在不能覆蓋之前的,只需要在執行生成命令時注意一下就好了。$ #切換到.ssh文件下 $ cd ~/.ssh $ #生成密鑰,後面換成自己的github郵箱 $ ssh-keygen -t rsa -C "[email protected]"
輸入上面命令後回車一下,當提示
Enter file in which to save the key (/c/Users/Seay/.ssh/id_rsa):
時,輸入新的ssh密鑰文件路徑和文件名(不能是.ssh/id_rsa),這裏輸入id_rsa_blog,然後一路回車。
密鑰已經成功生成。 -
添加ssh到github
登錄到github中,點擊進入到博客倉庫。
點擊右上方的Settings進入到設置頁面,點擊左邊的Deploy keys項。
在右上點擊Add deploy key,然後在下面輸入標題,把生成的密鑰id_rsa_blog.pub裏面的內容複製到key文本框中,選中下面的Allow write access,最後點擊Add key。 -
新建配置文件
在.ssh文件夾中創建一個名爲config的配置文件。$ cd ~/.ssh $ touch config
-
編輯配置信息
用編輯器打開config文件,添加如下信息:# github Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa # 這裏是空行 # github_blog Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_blog
提示:這裏的密鑰文件路徑根據自己的做相應修改。
配置Travis
-
接入Travis CI
打開Travis CI網站,使用github賬號登錄。
將鼠標放在右上角的用戶名上,點擊Account選項,會顯示github的項目。
找到博客項目,點擊前面帶有 X 符號的按鈕,開啓travis支持。
然後點擊設置按鈕,在項目的設置中開啓Build only if .travis.yml is present
這一項. -
安裝travis
Travis安裝需要Ruby環境,所有需要安裝Ruby,並且需要安裝rubygems插件。# 安裝travis gem isntall travis
-
新建配置文件
首先打開博客項目文件夾,在項目根目錄新建.travis.yml
配置文件。$ cd 博客項目文件夾根目錄 $ touch .travis.yml
-
複製ssh私鑰
在項目根目錄創建文件夾.travis$ mkdir .travis
將開始生成的ssh密鑰文件id_rsa_bolg複製到.travis文件夾下:
$ cp ~/.ssh/id_rsa_blog .travis/
-
ssh配置文件
這個ssh配置文件是用於在部署機器上使用的,不是本地的ssh配置文件,後面的travis配置文件會用到。
在.travis文件夾中新建文件ssh_config$ touch .travis/ssh_config
編輯配置文件,添加如下內容:
Host github.com User git StrictHostKeyChecking no IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes
-
登錄travis
travis login --auto
然後會提示輸入github的用戶名和密碼。
-
加密操作
在博客項目文件夾下對ssh的私鑰進行加密travis encrypt-file .travis/id_rsa_blog .travis/ --add
此操作會生成加密之後的祕鑰文件 id_rsa_blog.enc,刪除id_rsa_blog密鑰文件(私鑰不能隨便泄露)。
同時在終端上會輸出類似如下信息:openssl aes-256-cbc -K $encrypted_xxxxxxxxxxx_key -iv $encrypted_xxxxxxxxxxx_iv
這是用於id_rsa_blog.enc解密的信息,保存上面xxxxxxxxxxx
的信息,後面會在.travis.yml
配置文件會用到。
編輯配置文件
Travis配置文件
打開Travis配置文件.travis.yml,添加如下信息:
language: node_js
node_js:
- "4" # nodejs的版本
branches:
only:
- dev # 設置自動化部署的分支
before_install:
- export TZ='Asia/Shanghai' # 設置時區
- npm install -g hexo
- npm install -g hexo-cli
# 將xxxxxxxxxxx替換上面生成的內容
# 這裏面的文件路徑可根據自己的情況進行修改
# 解密id_rsa_blog.enc 輸出到.ssh/文件夾下,命名爲id_rsa
- openssl aes-256-cbc -K $encrypted_xxxxxxxxxxx_key -iv $encrypted_xxxxxxxxxxx_iv -in .travis/id_rsa_blog.enc -out ~/.ssh/id_rsa -d
# 設置id_rsa文件權限
- chmod 600 ~/.ssh/id_rsa
# 添加ssh密鑰
- eval $(ssh-agent)
- ssh-add ~/.ssh/id_rsa
# 添加ssh配置文件
- cp .travis/ssh_config ~/.ssh/config
# 設置github賬戶信息
- git config --global user.name "SeayXu" #設置github用戶名
- git config --global user.email [email protected] #設置github用戶郵箱
# 安裝依賴組件
install:
- npm install
# 執行的命令
script:
- hexo clean && hexo g -d
編輯Hexo配置
如果之前配置過deploy信息可以略過.
deploy:
type: git
repo: [email protected]:seayxu/seayxu.github.io.git # 同步的倉庫
branch: dev # 同步的分組,與travis中的分支相同
本地操作
-
初始化本地倉庫
切換到項目根目錄下,刪除原來部署時產生的.git文件夾.
執行初始化操作$ git init
關聯遠程倉庫
$ # 將github倉庫改爲自己的 $ git remote add origin [email protected]:SeayXu/seayxu.github.io.git
-
推送倉庫
提交本地修改,推送至github倉庫。$ # 添加文件 $ git add . $ # 提交修改 $ git commit -m "test travis" $ # 推送至遠程倉庫 $ git push -u origin dev
push本地的代碼至遠程倉庫之後,在https://travis-ci.org後臺查看相關情況。
下面是成功的結果:
經驗提示
1.Windows用戶可能會出現如下錯誤:
The command "openssl aes-256-cbc -K $encrypted_xxxxxxxxxxx_key -iv $encrypted_xxxxxxxxxxx_iv -in .travis/id_rsa_blog_travis.enc -out ~/.ssh/id_rsa -d" failed and exited with 1 during .
這個錯誤在github中有issues,可以去看一下,我回答了部分。
我的原因是travis在執行加密操作生成的加密信息位數不對。之後在ubuntu系統中操作就一切正常。
如果不想安裝虛擬機,還有另外一種方式實現,在下一篇文章中會詳細說明。
2.所有的配置文件是yaml格式,空格一定要注意。