April 25,2016
0
Hexo
AI 摘要
前几天的一篇文章介绍了搭建自己的 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 只是其功能中很小的一部分,继续学习!