热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

码云phpwebhook,码云webhook双分支(master/develop)自动部署生产服/测试服

实现原理1.本地push到码云2.码云WebHook通过http请求发送到我们自己的服务器3.服务器收到请求,pull托管的代码步骤一:在服务器生成ww

实现原理

1.本地push到码云

2.码云WebHook 通过http请求发送到我们自己的服务器

3.服务器收到请求,pull托管的代码

步骤一:在服务器生成www用户公钥,(www用户与nginx为同一用户,Nginx修改在此不描述)

需要用www的身份创建公钥,不然会在使用git时验证失败

cat /etc/passwd | grep www

发现它的shell是"/sbin /nologin" 需要将起改成"/bin/bash"才能切换www登录

vim /etc/passwd

修改完毕后, 保存

su www

cd ~/.ssh

rm -rf ./*

ssh-keygen -t rsa -C "kentrl@qq.com"

然后就是设置密码了,不设置就一直回车

生成完毕, 查看公钥

cat ~/.ssh/id_rsa.pub

将此id_rsa.pub公钥拷贝到码云进行绑定,再回到终端测试一下ssh -T git@gitee.com

还可以再简单配置一下:

git config --global user.name "kentrl"

git config --global user.email "kentrl@qq.com"

如果出现错误,就需要开启www用户登陆 (创建完公钥后记得把www修改回原来的权限,例如这里的/sbin/nologin)

修改www登录的方法:

vim /etc/passwd

www:x:1000:1000::/home/www:/sbin/nologin把最后面的/sbin/nologin改为/bin/bash

结果:

www:x:1000:1000::/home/www:/bin/bash即可实现用www登录,不用了再改回去

步骤二:在服务器克隆代码

进入项目目录 (用www用户身份)

git clone git@gitee.com:kentrl_admin/hy.git//这里你应该填写你自己的仓库

如果你想长期记住密码

git remote add origin http://您的账号:你的密码@gitee.com/您的项目地址.git

如果你想自定义记住的时间,可以这样:

git config credential.helper 'cache --timeout=3600'//这里记住的是1小时, 单位是秒

修改.git文件夹为www用户组

chown www:www -R .git

步骤三:git分支合并时忽略hook文件

在项目根目录下新建文件.gitattributes,写入需要忽略的(文件名 merge=ours)

hook.php merge=ours#忽略合并hook.php,一行一个(记得换行)

.gitignore merge=ours#忽略.gitignore

info.php merge=ours#忽略info.php

如果设置了没有起效,在根目录下运行命令行 git config merge.ours.driver true进行config配置

如果之前其他的代码导致失败, 可以尝试一下下面的代码

git pull origin master --allow-unrelated-histories//这条指令是告诉Git允许合并不相关历史的内容

把www用户调整为不可登陆

su root

vi /etc/passwd

www:x:1001:1001::/home/www:/sbin/nologin//www的用户改为nologin

最后把webhook文件上传到服务器的develop开发目录

webhook每次请求的只有开发目录(测试服),只是pull到的目录不同, 所以hook文件只需上传到develop就可以了

开发时,对于本地的项目中修改不做保存操作, 可以用到Git pull的强制覆盖,具体代码如下:

git clean -df丢弃所有 untracked(未追踪) 的文件

git fetch --all下载远程仓库最新内容,不做合并

git reset --hard origin/develop或者: git reset --hard origin/master把HEAD指向master最新版本

git pull //可以省略

git fetch 指令是下载远程仓库最新内容,不做合并

git reset 指令把HEAD指向master最新版本

0) {

switch ($data['ref']) {

case 'refs/heads/develop':

$name = 'hydev_yyzzu';

$dir = '/www/wwwroot/hydev_yyzzu';

$logdir = '/www/wwwlogs/webhook_logs/hydev_yyzzu/';

$branch = 'develop';

break;

case 'refs/heads/master':

$name = 'hy_yyzzu';

$dir = '/www/wwwroot/hy_yyzzu';

$logdir = '/www/wwwlogs/webhook_logs/hy_yyzzu/';

$branch = 'master';

break;

default:

//$subject = "请注意:服务器代码checkout失败!";

//$content = "服务器checkout代码失败,您push的分支没有在git-hook脚本中设置对应的分支!请立即更新。";

//$to = 'kentrl@qq.com';

//mail($to, $subject, $content);

die('checkout branch error!');

}

is_dir($logdir) || mkdir($logdir, 0777, true);

$res = PHP_EOL . 'pull start ---------------------------------------------' . PHP_EOL;

//$res .= shell_exec("cd {$dir} && git pull origin {$branch} 2



推荐阅读
author-avatar
sdfqw4543gf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有