今天准备实现 octopress 的自动部署, 完成以下功能
- 在github.com提交markdown文件后,自动触发服务器打包更新
- 服务器打包更新后, 同步至github.io, 以及服务器展示
实现之前, 参考了下这篇, 监听github,自动编译octopress博客, 写的蛮不错的 不过, 我的方案, 有些不同的地方
钩子
在github的项目设置的Service Hooks中添加一个WebHook URLs的钩子
	http://<host>:<port>/blog-update
而github钩子, 我采用的是ruby, 命名为hook.rb
require 'socket'
server = TCPServer.open 4001
puts "Listening on port " + server.addr[1].to_s
loop {
  client = server.accept()
  while((x = client.gets) != "\r\n")
    puts x
  end
  client.puts "HTTP/1.1 200 OK\r\n\r\nOK"
  client.close
  puts 'OK'
  system('git pull')
  system('rake generate')
  ##system('rake deploy')
  puts ''
}
然后启动为后台进程
   nohup ruby hook.rb &
当github更新时,会触发hook时, 服务器运行ruby代码,执行shell脚本
	git pull
	rake generate
部署
那服务器上如何来更新呢, 部署的时候, 是有两种方案的,一种是
	rake preview
然后nginx代理转发至preview的端口
另一种方案是, nginx直接请求 _deploy 目录
	location /blog/ {
		alias ~/octopress/public/;
	}
部署在github上
当然, 如果想在github.io上部署, 需要再同步至github.io, 如在刚才在hook.rb里修改
	rake deploy
这里要小心,这样改会死循环的. deploy会触发git commit, commit再触发hook, hook里再deploy,再commit, 如此死循环 所以需要在hook里判断是master还是source
另一种解决方案, 就是把master与source, 放置在不同git仓库上 这样, 提交source的时候, 就不会触发blog的hook了