服务器对接码云webhooks实现自动部署--超详细--PHP

公司代码是放在码云上的,每次提交代码,都要去服务器上执行一下git pull,就很麻烦,于是想对接一下码云的webhooks实现自动部署。本文参考链接1参考链接2
这里以laravel项目为例。
想拿高薪就不停的学习啊!努力!有耐心一点!
  1. WebHooks实现自动部署的机制是:每当用户本地将代码push到码云的时候,码云会自动回调一个您设定的http地址。(和支付宝完成支付以后也进行地址回调一样。)
  2. 服务器要安装好git
  3. 回调的地址外网必须可访问!
    php代码如下
<?php

	//定义日志位置--服务器没有该文件的话要手动创建!当然也可以加判断,让系统自己创建。
	$file = "/var/www/webhooksLog.txt";
	$_File = fopen($file, "a+");
	$local = '/var/www/服务器项目根目录';
	
	//仓库地址
	//$remote = 'https://gitee.com/****仓库地址***.git';
	//密码
	$password = '自己定义的密码';
	
	//获取请求参数
	$request = file_get_contents('php://input');
	
	if (empty($request)) {
	    die('请求参数为空');
	}
	
	//验证密码是否正确
	$data = json_decode($request, true);
	
	if ($data['password'] != $password) {
	    die('密码错误');
	}
	
	fwrite($_File, "************************************************\n");
	fwrite($_File, "推送人Name: ");
	fwrite($_File, $data["pusher"]["name"] . "\n");
	fwrite($_File, "推送人Email: ");
	fwrite($_File, $data["pusher"]["email"] . "\n");
	fwrite($_File, "推送人UserName: ");
	fwrite($_File, $data["pusher"]["username"] . "\n");
	fwrite($_File, "推送人备注: ");
	fwrite($_File, $data["head_commit"]["message"] . "\n");
	fwrite($_File, "推送项目: ");
	fwrite($_File, $data["repository"]["full_name"] . "\n");
	fwrite($_File, "推送分支: ");
	fwrite($_File, $data["ref"] . "\n");
	fwrite($_File, "推送日期: ");
	fwrite($_File, $data["head_commit"]["timestamp"] . "\n");
	fwrite($_File, "************************************************\n");
	fclose($_File);
	
	//Linux系统
	//echo shell_exec("cd {$local} && git pull {$remote} 2>&1");//我这里直接用下面的这种方式
	echo shell_exec("cd {$local} && git pull 2>&1");
	
	//Windows系统
	//system('cd ' . $local . ' && "C:/Program Files/Git/cmd/git.exe" pull ' . $remote . ' 2>&1', $out);
	//echo $out;
	
	date_default_timezone_set('Asia/Shanghai');
	die('done at : ' . date('Y-m-d H:i:s'));

?>

码云上的配置

在这里插入图片描述

注意几点
  1. 码云回调的时候是post方式。
  2. 回调的参数是json格式。
  3. 可以先在本地项目中编辑好hook.php文件,然后可直接访问。在postman上测试通回调地址,然后再提交到项目中,注意这时候还没有配置好,要去服务器上把hook.php文件拉下来。我自己弄的时候就忘了拉下来,低级失误~~~
  4. hook.php中的密码最好是复杂一点。
一些报错

1.在这里插入图片描述

  1. 这个是因为我服务器上的密钥在~/.ssh文件夹下,码云去读取的是/.ssh路径下的。这里提示无法创建,我直接手动在服务器上创建了/.ssh文件夹,然后把公玥复制了一份过去。
  2. 然后继续报错 “Host Key Verification Failed”。这个因为没有把gitee.com添加进.ssh文件夹下的known_hosts中。执行以下命令即可。
ssh-keyscan -t rsa gitee.com >> /.ssh/known_hosts
  1. 然后接着报错,报错很明显,就是项目中.git下面的objects权限不足。修改一下权限即可
error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed

解决办法! 由于我用的是root用户,所以没必要执行2、3步骤。

在服务器代码库xxx.git文件夹中:
1.sudo chmod -R g+ws *
2.sudo chgrp -R mygroup *    //mygroup是该文件夹的所有组
3.git repo-config core.sharedRepository true

然后本地随便改点代码,提交到码云上,再去服务器上看一下,就会发现大功告成,省略了git pull这一步。

git本身的hook应该也可以做这个,改天研究一下。还有就是gitlab配置webhooks也是大同小异。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值