利用 TravisCI 自动部署 Hexo blog

4/25/2016
0
Hexo

前几天的一篇文章介绍了搭建自己的 Hexo 博客,可是,今天遇到了一个问题:我要在另一台电脑上写博客文章,但是博客的源代码却不在身边,而且我也没有备份。于是就有一下几个解决方案:

  • 拷贝到 U 盘随身携带。但是,相信我,总有一天你会忘记的
  • 备份在云端,比如 DropBox 或者其他云盘。缺点:太麻烦,每次更新都要手动上传
  • 放在 Github 上。恩,这似乎是个不错的办法。但是这个方法每次既要更新博客,还要 push 到 Github 上

Travis CI 解决方案

约定

  • 这些步骤都是 Linux 中完成的,其他平台的步骤大同小异
  • 以我的博客为例,blog 是源码项目(目录),coderfe.github.io 是部署后的博客项目

准备工作

  • 安装 Travis Ci 命令行工具

    $ gem install travis
    
  • 生成 SSH key,并且把 id_rsa.pub 添加为 coderfe.github.io 项目的 Deploy key,注意要勾选Allow write access,因为 Travis CI 要对这个仓库拥有写入权限

    $ ssh-keygen -t rsa -C "[email protected]"
    # 生成的ssh key一般在`~/home/.ssh`目录下
    
  • 在本地的 blog 项目中新建.travis文件夹,最后它的结构如下:

    .travis
    |__id_rsa.enc
    |__ssh_config
    

正式开始

  • 把整个 Hexo 项目 push 到 Github 上,这个就是博客的源代码

  • 前往Travis CI 官网用 GitHub 账号的登陆,并把自己的项目同步到 Travis CI,然后把coderfe/blog的开关打开

  • 安装 Travis CI 命令行并用 GitHub 账号登录

    # 安装
    $ gem install travis
    # 登录
    $ travis login --auto
    
  • 加密id_rsa私钥(不能暴露在公开仓库中)

    # 把id_rsa复制到当前目录.travis/
    $ cp ~/.ssh/.id_rsa .
    # 加密之前必须新建.travis.yml文件,否则会报错
    $ touch .travis.yml
    # 加密
    $ travis encrypt-file ssh_key --add
    # 删除id_rsa
    $ rm id_rsa
    

    以上代码执行完成功后在.travis.yml文件中有一串字母和数字,这是用来解密的,每个人都不一样,先不要动,而且会生成了id_rsa.enc文件,把.travis.yml移动到blog根目录

  • 再在.travis下新建ssh_config文件,内容如下:

    Host github.com
      User git
      StrictHostKeyChecking no
      IdentityFile ~/.ssh/id_rsa
      IdentitiesOnly yes
    
  • 配置.travis.yml文件,我的配置如下:

    branches:
      only:
        - master
    
    language: node_js
    
    sudo: false
    
    node_js:
      - 'stable'
    
    before_install:
      - openssl aes-256-cbc -K $encrypted_d2cb722f4635_key -iv $encrypted_d2cb722f4635_iv
        -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
      - chmod 600 ~/.ssh/id_rsa
      - eval $(ssh-agent)
      - ssh-add ~/.ssh/id_rsa
      - cp .travis/ssh_config ~/.ssh/config
      - git config --global user.name "coderfe"
      - git config --global user.email [email protected]
      - git clone -b master [email protected]:coderfe/coderfe.github.io.git .deploy_git
    
    install:
      - npm install hexo-cli -g
      - npm install
    
    script:
      - hexo clean
      - hexo g
      - hexo d
    

需要注意的问题

  • Deploy key权限问题,记得勾选Allow write access
  • 加密私钥id_rsa,私钥不能暴露在公开仓库,否则其他人也会拥有你仓库的读写权限

结语

利用 Travis CI 持续集成服务,再也不必去手动备份了,只需要一次 push 就可实现博客的更新和备份,大大提高了效率啊,有木有!这种自动化的工具真的是多多益善。当然像 Nodejs 这样的项目都在用这项服务,说明自动部署 Hexo Blog 只是其功能中很小的一部分,继续学习!

参考资料

用 Travis CI 自動部署網站到 GitHub Travis CI 官方文档


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用 CC BY-NC-SA 4.0 - 非商业性使用 - 相同方式共享 4.0 国际进行许可。