在你的码云仓库里面按如下执行:管理-》WebHooks -》添加一个WebHooks钩子文件,这个文件就是回调文件,当你在本地有git push 操作时这个回调文件自动执行,等下我们来创建这个回调文件,主要作用是什么一看就知道。
执行添加:
url 填钩子的地址,即回调地址,例如你的域名下的webHooks.php 文件,如果你是java,你懂的。
你可以设置一个密码,如123456或者不填。
push 一定要勾上,其他也可以勾上。
点击添加即可。
啥也不说了,直接贴出这个webHooks.php文件。
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2020/11/12
* Time: 11:09
*/
file_put_contents('v999.log', date('Y-m-d H:i:s', time()) . '执行了一次git pull任务。' . PHP_EOL, FILE_APPEND);
$savePath = "/home/wwwroot/xxxx.com"; // 你的代码部署地址
$gitPath = "https://gitee.com/xxxx/xxxx.com.git";//你的仓库地址
shell_exec("cd {$savePath} && git pull {$gitPath} 2>&1");//拉代码
echo date('H:i'). " git pull success";
这个脚本直接免去了克隆代码那一步,如果你的代码没有在/home/wwwroot/ 下你自己去克隆一下。
然后回到码云仓库我们测试一下:
我们手动点一下测试,如果输出正确说明钩子文件配置成功。如果有报错,你地址可能填写错误。
如果你的代码没有pull 到线上,一般是shell_exec 没有生效,可以在php.ini中设置一下。进入php.ini
找到 disable_functions,配置如下:
disable_functions =
将其中的shell_exec 等函数删除。
如果依然无法git pull 到线上,那么按一下方法解决:
把该项目整个目录修改为:www用户和www组
进入项目:
chown -R www:www *
然后切换到www用户
su www
去目录那里执行git pull 如果要输入账号密码的话就按下面的方式解决:
首先进入到项目目录,输入下面的命令:
git config --global credential.helper store
这个命令会在生成一个文件 ~/.git-credentials 用来记录账号和密码。
然后输入 git pull 命令,会提示输入账号密码,命令执行完后 ~/.git-credentials 文件里会保存你的账号密码,这样下次再次 git pull 的时候就不用输账号密码了。
然后再切到root 下改点本地的文件上传到码云,再看下是否自动部署,一般都会成功。
国界线
第二种方法:定时任务的方法来自动部署,免去了上面所有的繁琐步骤,直接开启定时任务吧。
首先在/home/wwwroot 下把你的代码从远程仓库克隆到这里(我们一般把代码放到这里,腾讯云为例)
git clone -b 分支名 远程地址(-b 是指定分支,不指定则克隆master分支)
例如:git clone git://github.com/jquery/jquery.git
定时执行:
每过1分钟执行后面的命令 :
*/1 * * * * cd /home/wwwroot/你的项目;/usr/local/bin/git pull
或者:
*/1 * * * * cd /home/wwwroot/你的项目;git pull
如果你嫌一分钟太慢,那么来个2秒的定时任务。
*/1 * * * * /bin/sh /usr/njmlmysql/synchron
synchron脚本如下:
#!/bin/bash step=2 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) ));do /usr/njmlmysql/synchronizationweb.sh sleep $step done exit 0
synchronizationweb.sh脚本如下:
#!/bin/sh cd /home/wwwroot/www.321.com;/usr/local/bin/git pull