利用github/bitbucket hooks 自动部署项目

以github为例:

原理很简单,其实就是就是调用github的webhooks API,配置服务器地址,当你每次push项目到github上面去的时候,就会自动触发githb的hooks,发送命令到你的服务器接受端(填写的url),然后你配置你的服务器接受程序,每次接到github的post数据后执行程序(git pull)。

准备工作:

服务器(S)配置git,  生成key传到你的github上,配置配置你的hooks的key(下面会提到)并上传

  1. 在github上你的项目地方开启hooks
  2. webhooks服务器接收页面配置
  3. 上传key,完成(就这么简单)

不过有几个需要意的地方:

  • 服务器那边所有的脚本都是你通过php执行的,是一个虚拟的Apache用户                                       使用ps aux | grep apache,查看你的php用户,                                                                                使用ssh-keygent -u www-data  -t rsa  # www-data 是你的php的用户名,默认路径会将key放到www下面,不用更改,将这个key放到你github   webhooks key中(linux是奇妙的)
  • 切换到www-data 用户名(su -s /bin/bash www-data),然后用改用户名操作git clone or pull (给改用户的改key授权)
  • 你使用php来执行的git脚本要打开php的exec等函数
  • 保证 你的项目文件夹的可写权限
  • 当你此时pull的时候还是会有问题的,因为你应该见过,第一次使用这个key的时候,会有提示问你是否同意,这个要手动输入,所以你要先切换到你的php用户名下面(su www-data) 然后将你的项目git clone下来,然后就可以。

这里有个奇妙的地方是也可以通过php的system(‘whoami’);查看php的使用者.

服务器端php配置的核心代码
php

切换到目录之后,首先运行git reset 然后在git  pull 这样可以保证远端的覆盖服务器代码,后面的2>&1是用来调试,可以显示输出。

说的有点乱,总结一下就是

服务器端:

配置接收程序(这里是php的),用php的用户生成key,上传到github的Webhooks,并将该项目初始化或clone

github端:

填写服务器的接收的url,开启webhooks API

本地:

只需上传代码