原文:手把手教从零开始在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