gitee PHP 自动化布署

项目初期使用 FTP 上传,后期 Jenkins 等自动化布署工具。这里介绍使用 码云 WebHooks 方式自动化布署。

脚本更新:增加只处理指定分支。

0、本文以 centos 8 为例

1、安装 git及设置用户

yum install git -y
groupadd git
adduser git -g git
vi /etc/passwd
#要设置 /bin/git-shell,即禁止登录。

如果设置为 /sbin/nologin ,将造成 无法克隆。
如果设置为 /bin/bash ,将允许登录shell。

2、设置布署密钥

ssh-keygen -t rsa -C "test@163.com"

默认存储在 /root/.ssh/id_rsa

也可以通过 -f 参数另存。

ssh-keygen -t rsa -C "your_email" -f ~/test

查看公钥

cat ~/.ssh/id_rsa.pub

复制它到,码云项目,部署公钥管理中。(貌似,文件删除时不能同步
或者,添加到个人中心,设置,SSH公钥中。(这会允许在布署服务器上提交

验证是否成功

ssh -T git@gitee.com

3、复制这些密钥并更改用户组

cp /root/.ssh/* /home/git/.ssh/
cp /root/.ssh/* /home/www/.ssh/

#如果目标目录不存在,你需要手动创建它。

chown -R git.git /home/git/.ssh
chown -R www.www /home/www/.ssh

4、设置钩子
在码云项目管理中,WebHooks,添加一个钩子。
URL 地址,设置项目外网可访问地址,如 http://test.com/pull.php
密码,选择签名密钥,随机生成些字符,填写上面。并记下。
事件,选择 Push 即可。
并勾选下面的“激活”。

5、克隆待布署的项目
克隆项目到 web 目录

git clone git@gitee.com:test/test.git test
cd test

#查看所有分支
git branch -a

#选择要布署的分支
git checkout dev

#修改用户组
chown -R www.www *

6、布署脚本
修改 pull.php 文件,并上传到 web 目录(可外网访问)

$branch = 'dev'; // 设置分支
$maxLogNum = 10; // 设置日志最大文件数
$sign = '你的签名密钥'; // 密钥
$syncPath = '/www/wwwroot/test'; // 同步目录

7、测试拉取
在 Gitee 项目管理中,WebHooks 处,测试发起拉取请求,至此完毕。

或者,提交代码到版本库。
拉取后,/version.txt 记录最近更新时间,及最后写入日志序号。
/version_1.log 查看日志。

下载 Gitee(码云) PHP 自动布署脚本

PHP 5.6 报错
站点日志中:
PHP message: PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set ‘always_populate_raw_post_data’ to ‘-1’ in php.ini and use the php://input stream instead. in Unknown on line 0

$HTTP_RAW_POST_DATA 和 always_populate_raw_post_data

使用 always_populate_raw_post_data 会导致在填充 $HTTP_RAW_POST_DATA 时产生 E_DEPRECATED 错误。 请使用 php://input 替代 $HTTP_RAW_POST_DATA, 因为它可能在后续的 PHP 版本中被移除。 设置 always_populate_raw_post_data 为 -1 (这样会强制 $HTTP_RAW_POST_DATA 未定义,所以也不回导致 E_DEPRECATED 的错误) 来体验新的行为。

参见:https://www.php.net/manual/zh/migration56.deprecated.php

解决方法,在 php.ini 中找到 always_populate_raw_post_data 项,并取消注释及重启 PHP 即可。

相关:

Gitee PHP WebHook 签名密钥方式验签代码
WebHook 推送数据格式说明
WebHook 推送数据类型说明