当前位置: 首页 > Linux

push后git的不同分支通过hooks自动部署到服务器的不同路径

时间:2023-04-06 01:32:33 Linux

我想做的是这样一件事:git每次新建一个分支,push后自动部署到服务器的不同路径,并且然后根据不同的端口代码访问不同的分支,方便测试这个分支。我正在学习thinkphp5,只是为了测试它。比如是:当我新建一个分支为8081_opqnext_test,然后完成某个功能。gitadd、gitcommit、gitpush后,服务器会自动拉取8081_opqnext_test分支上的代码到/data/tp/8081目录下,然后访问beta.tp.opqnext.com:8081直接访问该分支代码.同理,当我创建8082_user_list的分支时。完成用户列表功能。gitpush后,服务器会自动创建目录/data/tp/8082,并将代码拉取到该目录下。当您访问beta.tp.opqnext.com:8082时,您将访问该分支的代码,以便于测试。每次合并后master的代码会自动部署到/data/tp.opqnext.com/。访问tp.opqnext.com,这是在线代码。那么我们分开步骤:首先完成自动部署功能。每个分支都会自动部署到不同的路径。对不同端口的访问映射到不同的分支代码。首先完成自动部署。这里我使用码云git@oschina来做。首先需要配置ssh公钥,看这里:特别提示:你的nginx运行的是哪个用户,那么生成公钥之前一定要切换到这个用户。比如我的nginx是一个ngxuser用户。如果在root下生成公钥配置到码云,你的hook没有克隆拉取代码的权限/(ㄒoㄒ)/~~可以生成sshkey如下:sudongxuser#你的nginx用户ssh-keygen-trsa-C"xxxxx@xxxxx.com"#Generatingpublic/privatersakeypair...#回车三次生成sshkey查看你的公钥,把他加到码云(Gitee.com)cat~/.ssh/id_rsa.pub#ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc...添加后在终端(Terminal)输入ssh-Tgit@git.oschina.net如果返回WelcometoGit@OSC,yourname!表示添加成功,然后去码云后台添加你的sshkey然后配置webhook查看教程。配置webhook后,每次push都会触发这个hook。最简单的,你写一个auto_deploy_code.php,放在网站的根目录下。内容是:';系统(“gitpull”,$var);你不需要接收webhook发给你的数据,你只需要拉,如果你只有一个分支。但是我要接收,既然我有数据,我当然要接收。我新建了一个分支,这个分支的名字可以指定,比如:8081_opqnext_user(port-developer-developmentfunction)这里怎么约定,那你后面的脚本怎么写。自动化部署的脚本:'.date('H:i:s'));}else{if(!is_dir($dir)){mkdir($dir,0777,true);$cmd="cd$dir;gitclone-b$branchgit@git.oschina.net:opqnext/thinkphp.git$dir";}else{$cmd="cd$dir;gitpullorigin$branch";}shell_exec($cmd);error_log('auto_git_pull'.$res['push_data']['user_name'].''.$branch.'msg:'.$res['push_data']['commits'][0]['message'].'=>'.date('H:i:s'));}}else{//删除分支$cmd="cd/data/tp;rm-rf$port";shell_exec($cmd);error_log('auto_git_del_branch'.$res['push_data']['user_name'].''.$branch.'=>'.date('H:i:s'));}}首先检查token是否正确,获取分支名,截取端口号,填写完整的端口路径,如果commit信息有内容,说明该分支是否为master,如果有,拉取线上代码,如果是分支commit,查看端口路径是否存在,存在则pull,否则clone就没了,既然每个分支的目录都创建好了,代码也可以自动了部署好了,然后配置nginx,我以为可以写正则匹配,匹配到端口就访问对应的路径,但是好像不行,只能写多个服务器监听不同的端口。配置对应的路径。比如8081、8082、8083、8084……每个开发者都有三五个端口,还不错吧。大概就是这样的理论。我发现我写代码一直都是有基本原理的,但不能使用。..想用,那就修改得漂亮点吧。