项目初期使用 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 查看日志。
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 推送数据类型说明