Hexo+Github+Travis-ci搭建程序员自己的博客

概述

  • Hexo,NodeJS驱动的轻量级静态博客系统。
  • Github(Pages),这里用来托管博客源码和发布静态页面。
  • Travis-ci,持续集成,写博客要坚持,发布也要持续。

工作原理


说明:

  • 本地写好博客,推送到Github raw分支;
  • Travis-ci收到通知,触发其拉取raw并生成静态文件,然后将静态文件推送到master分支;
  • 博客得到更新。

步骤

安装Hexo

网上大把的教程。

申请登录Github帐号

国内的也可以申请CodingOSChina等,原理以及所有操作都一样。

新建Repository

注意名字,例如:本人的Github帐号是baiyangliu,那么你新建的这个Repository名字必须是baiyangliu.github.io,原因不作多说。

新建raw分支

将Hexo源码文件放到raw分支,push到Github。

配置Access Token

打开配置页,Token描述随便写(Hexo deployment),勾选和public_repo和user:email,点击Generate token,记下此token,该token只会在新建成功的时候显示一次,忘了必须删掉重新生成!!!

配置SSH公钥

若果不想使用Coding和OSChina可以忽略这一步,Github本身也可以这么做,但是这里采用Access Token方案。

1
2
3
4
5
6
#注意替换成你自己的邮箱,全程直接回车。
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
#将公钥添加到https://git.oschina.net/profile/sshkeys和https://coding.net/user/account/setting/keys
cat ~/.ssh/id_rsa.pub
#将公钥保存下来,一会儿有用
cat ~/.ssh/id_rsa

配置rsync

参见这里

配置Travis-ci

打开Travis-ci,选择使用Github帐号登录(Sign in with Github),如果没看到Github项目,同步一下就可以看到,配置环境变量:

  • DEPLOY_TOKEN,填写上面在Github上生成的Access Token;
  • SSH_KEY,即SSH私钥~/.ssh/id_rsa,但是有个问题,它是多行的,可以直接用记事本编辑它,通过转义字符\n,将其合并成一行。
  • RSYNC_SECRET,rsync服务器密码。

新建.travis.yml文件

需要注意的是,我这里将生成的静态文件同时推送到了Github、OSChina和Coding上,并且通过rsync同步到了我的个人VPS上,由于本人还申请了Heroku,Github的master分支更新会自动同步到Heroku上。因此,每次提交博客更新,其实同时发布到了多个地方(个人VPSGithub PagesOSChina PagesCoding PagesHeroku),我也是服了自己忒能折腾了。。。

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
29
30
31
32
33
34
35
36
37
38
language: node_js
node_js: node
branches:
only:
- raw
before_script:
- npm install -g hexo
- npm install -g hexo-cli
- npm install -g gulp
install:
- npm install
script:
- hexo clean
- hexo g
- gulp
after_success:
- echo $RSYNC_SECRET > rsync.secret
- chmod 600 rsync.secret
- rsync -vzrtopg --delete --progress --password-file=./rsync.secret ./public/* baiyangliu@baiyangliu.com::blog
- rm -rf rsync.secret

- cd ./public
- git init
- git config --global user.name "baiyangliu"
- git config --global user.email "cun.liu@qq.com"
- git add .
- git commit -m "Updated by travis-ci at $(date)"
- git push --force https://$DEPLOY_TOKEN@github.com/baiyangliu/baiyangliu.github.io.git master:master

- echo -e "$SSH_KEY" > id_rsa
- chmod 600 id_rsa
- eval $(ssh-agent -s)
- ssh-add id_rsa
- rm -rf id_rsa
- ssh -o "StrictHostKeyChecking no" git@git.oschina.net
- ssh -o "StrictHostKeyChecking no" git@git.coding.net
- git push --force git@git.coding.net:baiyangliu/baiyangliu.git master:master
- git push --force git@git.oschina.net:baiyangliu/baiyangliu.git master:master

提交

将写好的博客推送到Github raw分支,成功后,Travis-ci会自动执行编译命令,稍等片刻,博客更新成功。
Build Status