原文:手把手教從零開始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自動部署Hexo(1)node
前面兩篇文章介紹了在github上使用hexo搭建博客的基本環境和hexo相關參數設置等。
基於目前,博客基本上是能夠完美運行了。
可是,有一點是不太好,就是源碼同步問題,若是在不一樣的電腦上寫文章會很是不方便。
是由於hexo使用的部署命令是把生成好的靜態文件上傳到倉庫中的,因此,在其餘電腦上同步下來的只是靜態文件而已,不是源碼。git
到這裏就會想到能不能這樣:將源碼同步到遠程倉庫後,能夠實現自動生成部署呢?
答案是確定的,能夠經過Travis CI來實現。github
那麼,本文就介紹一下Travis CI實現Hexo博客自動生成並部署。shell
說明:
文中出現的命令,Windows用戶注意,命令前面有 $ 的表示在Git Bash中執行,沒有的在CMD命令窗口執行。
Linux和MAC系統在終端下不區分。npm
生成ssh密鑰
可使用全局的ssh密鑰,不過建議使用單獨的ssh密鑰,在這裏以單獨ssh密鑰爲例。ubuntu
因爲以前生成過ssh密鑰,如今不能覆蓋以前的,只須要在執行生成命令時注意一下就行了。ruby
$ #切換到.ssh文件下 $ cd ~/.ssh $ #生成密鑰,後面換成本身的github郵箱 $ ssh-keygen -t rsa -C "SeayXu@163.com"
輸入上面命令後回車一下,當提示Enter file in which to save the key (/c/Users/Seay/.ssh/id_rsa):
時,輸入新的ssh密鑰文件路徑和文件名(不能是.ssh/id_rsa),這裏輸入id_rsa_blog,而後一路回車。
密鑰已經成功生成。hexo
添加ssh到github
登陸到github中,點擊進入到博客倉庫。ssh
點擊右上方的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 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.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 SeayXu@163.com #設置github用戶郵箱 # 安裝依賴組件 install: - npm install # 執行的命令 script: - hexo clean && hexo g -d
若是以前配置過deploy信息能夠略過.
deploy: type: git repo: git@github.com:seayxu/seayxu.github.io.git # 同步的倉庫 branch: dev # 同步的分組,與travis中的分支相同
初始化本地倉庫
切換到項目根目錄下,刪除原來部署時產生的.git文件夾.
執行初始化操做
$ git init
關聯遠程倉庫
$ # 將github倉庫改成本身的 $ git remote add origin git@github.com: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格式,空格必定要注意。
【Hexo博客交流羣】
羣號:582271078