上一篇 Github+Hexo+Markdown写博客介绍了如何使用Github+Hexo搭建自己的博客,然后以Markdown方式写自己的博文。聪明的观众可能已经看出,写一篇博客,可能需要以下几步:

1
Hexo new "article" -> 写作 -> hexo generate -> git commit -> hexo deploy

这也太繁琐了吧,每次写完都需要自己执行generate动作和部署,有没有更方便的做法呢?

当然有,可以通过引入自动化集成CI来帮我们自动完成构建和部署。再来看看引入travis-ci后的步骤:

1
Hexo new "article" -> 写作 -> git commit -> git push

整体流程图

github-markdown-wokeflow

环境准备

  1. 使用Github账号授权Travis-CI

    使用Github账号登录Travis-CI,并授权权限以及要进行CI持续化集成的版本库。

    travis-ci-authorize

    注意:为了防止后面,travis-ci会根据默认的配置,构建master分支,这里需要勾选中第一个:
    travis-ci-setting

  2. 进阶上一篇博客Github+Hexo+Markdown写博客, 创建blog分支,用于存放博客站点源码以及markdown原始文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Victors-MPB:wangsheng.github.io wangsheng$ git br
    * master
    Victors-MPB:wangsheng.github.io wangsheng$ git log
    commit 2a753ef09a01a93d722319fdcb7befcf32022e36
    Author: victor <wangsheng2008love@163.com>
    Date: Mon Apr 11 11:24:42 2016 +0800

    add git deployer config.

    commit da14451775873ff390b95993d3bf74019bf3422a
    Author: victor <wangsheng2008love@163.com>
    Date: Thu Apr 7 14:39:41 2016 +0800

    init blog.
    Victors-MPB:wangsheng.github.io wangsheng$ git co -b blog
    Switched to a new branch 'blog'
  3. 创建travis-ci构建需要的配置文件

    1
    $ touch .travis.yml
  4. 生成秘钥

    1
    $ ssh-keygen -t rsa -C "your_email@example.com"

    在生成过程中,passphrase 留空,因为travis-ci 中输入密码无法做到。同时使用默认的保存目录就好(~/.ssh/id_rsa)。

  5. 添加生成好的 SSH key 到 ssh-agent

    1
    $ ssh-add ~/.ssh/id_rsa
  6. 将公钥配置到 github 上项目的 deploy key 中

    github-deploy-key

    注意:这里需要选中 Allow write access

  7. 将仓库的远程源改为ssh协议,避免https每次让输入用户账户信息

    1
    $ git remote add origin git@github.com:$username/$username.github.io.git
  8. 将_config.yml中deploy小节中的地址也改为ssh协议

    1
    2
    3
    4
    deploy:
    type: git
    repo: git@github.com:$username/$username.github.io.git
    branch: master

travis-ci命令安装与准备

  1. 安装travis命令行工具

    本地安装 travis-ci。(travis 工具采用 ruby开发。需要本地安装有 ruby 开发环境)

    1
    $ gem install travis
  2. 登录

    1
    $ travis login --auto

    这样通过 travis 提供的命令工具就可以加密私钥文件,并将加密用的密码存入 travis 服务器。以环境变量形式作为后面解密使用。

  3. 私钥加密

    1
    $ travis encrypt-file ~/.ssh/id_rsa --add

    这时会生成加密后的密钥文件 id_rsa.enc。同时会将相关的指令插入.travis.yml文件中。

完善travis配置

  1. 在根目录中生成一个.travis目录,将刚才生成的id_rsa.enc文件移动到这里,同时注意修改.travis.yml中引用该文件的路径

    1
    2
    3
    4
    5
    6
    Victors-MPB:wangsheng.github.io wangsheng$ tree .travis
    .travis
    ├── id_rsa.enc
    └── ssh_config

    0 directories, 2 files
  2. 同时在.travis 目录中创建一个名为ssh-config文件,内容如下

    1
    2
    3
    4
    5
    Host github.com
    User git
    StrictHostKeyChecking no
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
  3. 添加travis的其他配置信息,最终.travis.yml文件如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    language: node_js

    node_js:
    - '0.12'

    before_install:
    - npm install hexo -g

    # Decrypt the private key 『这行命令是执行travis encrypt-file自动插入的,复制这里内容时,注意以你本地的为主。』
    - openssl aes-256-cbc -K $encrypted_112712e457d2_key -iv $encrypted_112712e457d2_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 "travis_robot"
    - git config --global user.email "email DOT xxx.com"

    script:
    - hexo generate
    - hexo deploy
    branches:
    only:
    - blog

查看结果

到这里,已经配置完毕,将改动提交,并执行push

1
2
3
$ git add .
$ git commit -m "config travis"
$ git push origin blog

这时登录Travis-CI,可以看到会触发自动构建

travis-ci-build

等构建完毕,就可以访问站点看效果 http://wangsheng.github.io/