如何把php代码自动部署到应用环境变量,PHP 结合 WebHook 实现代码自动部署

最近一直在研究如何把在把代码 Push 到 Coding 上时能够实现自动部署最新代码到服务器上,解决方案就是利用 Coding 提供的 WebHook(其他 Git 仓库也应该有类似的功能)。

Webhook 允许第三方应用监听 Coding.net 上的特定事件,在这些事件发生时通过 HTTP POST 方式通知( 超时5秒) 到第三方应用指定的 Web URL。 例如项目有新的内容 Push,或是 Merge Request 有更新等。 WebHook 可方便用户实现自动部署,自动测试,自动打包,监控项目变化等。

当发生 Push 等事件时,Coding 会向一个用户设置的 URL发送一条 POST 请求,那么就可以把这个 URL指向一个PHP文件,而在这个 PHP文件中则可以执行一个 Pull Git 仓库的脚本~

但这期间也踩了不少坑,故总结分享一下。

先说一下我的服务器环境配置:

PHP 5.6。低于这个版本的在通过 PHP 调用 Shell 脚本时默认是没有权限的,需要在 PHP 的配置文件中修改,请自行搜索相关方法。

Nginx 服务器。Apache 服务器的部分细节可能和我的不同,我不是很了解~

太长不看版

我遇到的问题主要是权限问题,解决方案:

给 /www 目录 755 权限,使 www 用户对网站目录有写权限。

使用 www 用户来克隆 Git 仓库,以避免 PHP (www 用户)没有权限执行 Git 命令。

详细步骤

1. 克隆 Git 仓库到服务器

假设 Git 地址为 https://git.coding.net/username/projectname

第一步就克隆 Git 仓库到服务器上,比如我的网站根目录在 /www,而我打算将网站部署在 /www/myphp 目录下,那么我需要在 /www 目录下执行如下命令:

git clone https://git.coding.net/username/projectname myphp

上面那句命令会把远程 Git 仓库克隆到 当前目录下的 myphp/文件夹下,即 /www/myphp 。但是在自动部署时会有权限问题~也就是我遇到的那些坑~~~

PHP 执行 Shell 脚本时使用的时 www 用户,而我们直接使用上面的命令克隆 Git 仓库时一般使用的肯定都不是 www 用户,所以 PHP 很可能会没有权限去执行 Pull 的操作~

所以,首先要切换到 www 用户,可能需要设置 www 用户的 SSH 权限,自行百度谷歌~

su www

然后给 /www 目录 755 权限,使 www 用户对网站目录有写权限。(略)

然后再克隆 Git 仓库

git clone https://git.coding.net/username/projectname myphp

2. 编写同步仓库的脚本

然后写个脚本,假设命名为 hook.sh,放 /www/myphp 目录下

#!/bin/sh

git pull origin master

3. 编写调用脚本的 php

然后写个 PHP ,假设命名为 hook.php

echo exec("../hook.sh", $result);

然后再 Coding 的 WebHook 地方填上上面那个 php 文件的 url,完事 ~

这只是个最简单的版本,可处理大部分情况下的自动部署需求,可是在某些情况下,比如远程仓库执行过回滚操作等,则无法保持同步,这时就需要进一步编写同步脚本内的逻辑,增加一些判断和对应的操作等~ 这里不再深究~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值