利用 TravisCI 自动部署 Hexo blog

Avatarcoderfee/Apr 25, 2016/#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 "your_email@example.com"
    # 生成的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 coderfee@outlook.com
    - git clone -b master git@github.com: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 官方文档

Copyright ©; 2016-2022 coderfee, All rights reserved.