丫爸不蟀 發表於 2023-5-26 17:27:00

gitee使用webhook实现自动部署。

<p>首先把服务器的公钥添加到你项目仓库中</p>
<p>&nbsp;</p>
<p><img src="https://img2023.cnblogs.com/blog/912094/202305/912094-20230526172711192-2068779640.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>1、首先生成公钥: sudo -u www ssh-keygen -t rsa -C "xxxxx@qq.com"</p>
<p>2、把公钥添加到gitee中</p>
<p>3、克隆远程仓库</p>
<p>sudo -u www git clone git@gitee.com:Abner3721/abner.git&nbsp; /www/wwwroot/hooks</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2、在你的仓库中添加远程仓库地址:git remote add &lt;remote_name&gt; &lt;repository_url&gt;&nbsp;&nbsp;在这个命令中,<code>&lt;remote_name&gt;</code> 是你为远程仓库设置的名称,<code>&lt;repository_url&gt;</code> 是远程仓库的 URL。&nbsp;</p>
<p>例如:git remote add origin https://github.com/your_username/your_repository.git</p>
<p>3、在你的根据目录添加一个可以访问的的脚本,我的是php脚本,auth.php</p>
<div class="cnblogs_Highlighter">
<pre class="brush:php;gutter:true;">&lt;?php
      // 先做一下测试
      // 测试ls是否能用
      // $output = shell_exec('ls -lart');
      // echo "&lt;pre&gt;$output&lt;/pre&gt;";
      // echo shell_exec("ls -a");
      error_reporting(1);
   
      //git webhook 自动部署脚本
      //项目存放物理路径,第一次clone时,必须保证该目录为空
      $savePath = '/www/wwwroot/demo.com';//更新
      //$savePath = "/data/wwwroot/default/cms.fdgdgd.cn/application";//更新
      //$savePath8 = "/data/wwwroot/default/www.fdgdgdfd.com/application";//更
      // $gitPath= "https://gitee.com/fdgdg/cms.git";//代码仓库
      $gitPath= 'git@gitee.com:Abner3721/tsgy.git';//代码仓库 一定要使用ssh方式不然每次都得输入密码
      $branch = "refs/heads/master";//同步那个分支

      //密码
      $password = 'Abner@3721';
         
      // //获取请求参数
      $request = file_get_contents('php://input');
      if (empty($request)) {
            die('request is empty');
      }
         
      // //echo $request;
      // //验证密码是否正确
      $content = json_decode($request, true);
      if (md5($content['password']) != md5($password)) {
            die('非法提交');
      }
         
      //运行代码 拉取码云最代码到阿里服务器上
      //说明:
      //1.shell_exec()即PHP用于执行系统命令的函数,
      //2.cd $dir:进入上面设置的项目仓库文件夹中,
      //3.git checkout -f 撤销本地的修改,
      //4.git pull origin master从码云的项目仓库master分支拉取最新代码,注意origin为远程仓库的别名,要与 git remote add 远程仓库,
      //5.别名 仓库地址 中的远程仓库别名保持一致
//      echo shell_exec("cd {$savePath} &amp;&amp; git checkout -f &amp;&amp; git pull {$branch} 2&gt;&amp;1"); //更新锋牛代码
      //echo shell_exec("cd {$savePath8} &amp;&amp; git checkout -f &amp;&amp; git pull {$branch} 2&gt;&amp;1"); //更众联牛代码
      echo shell_exec("cd {$savePath} &amp;&amp; git pull {$gitPath} {$branch} 2&gt;&amp;1");//只能拉取远程码云master分支到阿里云服务器上,其它分支不会拉取
      die('done ' . date('Y-m-d H:i:s', time()));

?&gt;
</pre>
</div>
<p>  </p>
<p>  </p>
<p>4、在gitee的webhooks中添加自动部署的勾子</p>
<p><img src="https://img2023.cnblogs.com/blog/912094/202305/912094-20230526172348130-2025135777.png"></p>
<p>&nbsp;</p>
<pre class="hook-result">出现这个提示 表示.git的没有对应的权限 error: cannot open .git/FETCH_HEAD: Permission denied \n\rdone 2023-05-26 19:08:06</pre>
<p>4、修改你项目中的.git的权限,修改成和你网站的权限一样,比如:www<br><br></p>
<p>如果遇到问题:Host key verification failed.</p>
<p>参考:https://www.siediyer.cn/?p=1627</p>
<p><br>参考链接:https://blog.51cto.com/haibo0668/5885219</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/Abner3721/p/17435384.html
頁: [1]
查看完整版本: gitee使用webhook实现自动部署。