当前位置: 首页 > 后端技术 > PHP

使用webhook自动部署php项目

时间:2023-03-30 02:00:44 PHP

1。首先说一下自动部署的原理。一般我们推送代码的时候,可以自动请求webhook中设置的url,完成一次请求和响应。所以只要我们设置的url地址请求的PHP文件内容是执行命令行gitpush命令,就可以在本地每次推送代码的时候把代码推送到远端,服务器会自动拉取gitpull的最新分支。2、然后我们需要设置两个地方:①git项目的webhook设置:一般在我们托管代码的平台上,项目设置中都会有webhook设置,通常只有一个内容它,这是url设置。这里我设置的是http://www.xxxxx.com/webhook.php(很明显,我在网站根目录下丢了一个webhook.php文件,所以每次push代码到远端,webhook我网站的.php文件会被访问)②服务器端的Hook文件(webhook.php)设置(代码运行位置):`$command``=``'cd代码位置'``;``$output``=shell_exec(``$command``);``$command``=``'gitpull'``;``$output``=shell_exec(``$command``);``print``$output``;`这里只是简单的两句,先用cd命令进入对应目录,然后执行gitpull命令。需要注意的是,我之前执行shell_exec()命令的时候,服务器会无响应卡死,所以我用了这句`$output``=shell_exec(``'ls'``);``print_r(``$output``);`命令测试,发现也超时了,很奇怪,所以一直搁置,搞不懂是怎么回事,毕竟只有三五行代码,我不知道为什么它一直请求超时。两个月过去了,我怀疑是不是原版打印的字符串编码问题?于是就有了下面几行代码:`$encode``=mb_detect_encoding(``$output``,``array``(``'ASCII'``,``'GB2312'``,``'GBK'``,``'UTF-8'``));``$trans``=iconv(``$encode``,``"UTF-8"``,``$output``);``print``$trans``;`然后就可以执行了。..想不起来之前为什么shell_exec()一直超时,遇到的朋友可以尝试不打印返回的内容,或者对打印的内容进行编码。不过,相信还是有小部分朋友遇到过这个恶心的问题。