使用码云的WebHooks实现网站的自动部署
码云上提供了一个WebHooks功能(其实github也有),原理就是在本地push的时候码云的WebHooks会向远程服务器进行post请求,这个post还可以带上一个密码,防止被恶意post。
另外WebHooks还支持push, tag push, lssue 等共5种触发方式。
我想实现的是本地 tag push之后 服务器的本地仓库执行pull操作,从而实现网站的自动部署。使用tag push的原因是我并不想每次push都进行部署。
下面就一步一步来实现这个过程。
1.首先在码云上创建一个项目,项目中只放 README.md,因为我们只是先实验下这样就够了。
2.将这个项目clone到本地及服务器
3.在服务器端创建一个pull.php文件,放到一个可以访问的网站目录,方便WebHooks进行post操作。php这里我们使用了shell_exec方法。在访问到该php文件后会执行pull.sh脚本。
shell_exec 默认是关闭的,要从php.ini中开启1
vim /usr/local/php/etc/php.ini
搜索disable_function 将其中的 exec 和 shell_exec 删除。
这里尽量使用绝对路径,我使用了PHP的shell_exec函数,当然还可以使用exec system等函数。
pull.php1
2
3
4
$output = shell_exec("/usr/bin/sudo /root/pull.sh");
echo $output;
pull.sh
1 |
|
创建两个脚本后,要对脚本执行 chmod +x filename 为其添加执行的权限。
4.配置git公钥,公钥可以让你在服务器的本地仓库执行git pull的时候不需要输入密码。具体如何配置请参考配置公钥
5.为服务器端的PHP添加执行shell脚本的权限
1 | vi /etc/sudoers |
6.使用 su www
切换到 www 用户执行 php pull.php
测试能否成功执行脚本,执行成功将返回 git pull的回馈信息。
7.在码云的 WebHooks 中填入 pull.php 的url。本地执行git pull 看看网站目录是否自动更新了。
至此,使用 WebHooks 自动部署网站已配置完成。之后可以为pull.php加上密码验证提升安全性。