整体思路:
git提交本地代码-----码云----自动部署到测试服务器,这样就可以即时看到项目演示效果。
第一步:
测试服务器检查git版本
centos自带得git版本是1.7.*的,在克隆的时候有bug,如果是1.7.0请升级至2.7.0+。
# 版本测试
git --version
升级git,不需要的请略过
Development tools 没装的要装上,不然GCC编译时会出错
yum -y groupinstall Development tools
GCC 用于编译安装包
yum install gcc perl-ExtUtils-MakeMaker
再卸载CentOS自带的老版本git
yum -y remove git
下载git并安装
cd /usr/src
wget https://www.kernel.org/pub/software/scm/git/git-2.12.0.tar.gz
tar xzf git-2.12.0.tar.gz
安装注意事项:
cd git-2.12.0
make prefix=/usr/local/git all
此时报错
/usr/src/git-2.12.0/utf8.c:463:对‘libiconv’未定义的引用
libgit.a(utf8.o):在函数‘reencode_string_len’中:
/usr/src/git-2.12.0/utf8.c:524:对‘libiconv_open’未定义的引用
/usr/src/git-2.12.0/utf8.c:535:对‘libiconv_close’未定义的引用
/usr/src/git-2.12.0/utf8.c:529:对‘libiconv_open’未定义的引用
collect2: 错误:ld 返回 1
make: *** [git-credential-store] 错误 1
原方案:
make prefix=/usr/local/git all
make prefix=/usr/local/git install
解决方案:
可替换为
./configure --without-iconv
make CFLAGS=-liconv prefix=/usr/local/git all
make CFLAGS=-liconv prefix=/usr/local/git install
最后将git加入环境变量
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc
大功告成!查看一下git的版本
git --version
>> git version 2.12.0
在完成升级后一定要记住git的文件路径,按照如上的教程git的最终路径为/usr/local/git/bin,这个在后面配置有用到。
第二步:
打开PHP禁用函数
在这个自动部署程序中主要用到的函数为shell_exec(),但是在默认情况下是被禁止的,需要去php.ini中修改配置,具体做法如下:
1、找到php.ini文件
2、查询disable_function
3、删除shell_exec,
4、保存
5、重启PHP
第三步:
配置WWW用户
首先要检查www是否有权限,打开/etc/passwd,查看www用户,如果是/sbin/nologin需要改为/bin/bash
第一次配置成功也是采用的公钥,是在切换到www用户下创建的,可是在码云那,再提交相同的公钥,提示已经存在,可是,如果我们项目很多的话,每次都创建新的公钥也很麻烦,于是就放弃在www下创建公钥的思路,但是www的权限,仍然需要改。
第四步:
配置webhook脚本
webhook脚本如下:
<?php
$savePath = "网站根目录";
$gitPath = "代码仓库";//采用带密码的方式,例如:https://user:password@gitee.com/zxzllyj/sample-project.git
$email = "用户仓库邮箱";
$name = "仓库用户名";
$git = "GIT全局路径";
$password = "在GITEE设置的密码";
$branch = "你需要pull的分支";
$logName = "LOG名称";
file_put_contents("$logName.log", PHP_EOL.date('Y-m-d H:i:s', time()).": ".PHP_EOL, FILE_APPEND);
$requestBody = file_get_contents("php://input");
if (empty($requestBody)) {
file_put_contents("$logName.log", "FAILED".PHP_EOL, FILE_APPEND);
die('send fail');
}
file_put_contents("$logName.log", $requestBody, FILE_APPEND);
$content = json_decode($requestBody, true);
if($content['password'] == $password){
if ($content['ref']=="refs/heads/$branch") {
$result = shell_exec("cd $savePath && $git clean -f && $git pull origin $branch 2>&1");
$res_log = "[ PULL START ]".PHP_EOL;
$res_log .= $result;
$res_log .= PHP_EOL . PHP_EOL;
file_put_contents("$logName.log", $res_log, FILE_APPEND);
echo $result;
}
} else {
file_put_contents("$logName.log", 'Password is Incorrect!', FILE_APPEND);
echo 'Password is Incorrect!';
}
第五步:
克隆项目
在要部署的目录下进行克隆。
git clone 项目地址 /data/websitel/
git提交本地代码-----码云----自动部署到测试服务器,这样就可以即时看到项目演示效果。
第一步:
测试服务器检查git版本
centos自带得git版本是1.7.*的,在克隆的时候有bug,如果是1.7.0请升级至2.7.0+。
# 版本测试
git --version
升级git,不需要的请略过
Development tools 没装的要装上,不然GCC编译时会出错
yum -y groupinstall Development tools
GCC 用于编译安装包
yum install gcc perl-ExtUtils-MakeMaker
再卸载CentOS自带的老版本git
yum -y remove git
下载git并安装
cd /usr/src
wget https://www.kernel.org/pub/software/scm/git/git-2.12.0.tar.gz
tar xzf git-2.12.0.tar.gz
安装注意事项:
cd git-2.12.0
make prefix=/usr/local/git all
此时报错
/usr/src/git-2.12.0/utf8.c:463:对‘libiconv’未定义的引用
libgit.a(utf8.o):在函数‘reencode_string_len’中:
/usr/src/git-2.12.0/utf8.c:524:对‘libiconv_open’未定义的引用
/usr/src/git-2.12.0/utf8.c:535:对‘libiconv_close’未定义的引用
/usr/src/git-2.12.0/utf8.c:529:对‘libiconv_open’未定义的引用
collect2: 错误:ld 返回 1
make: *** [git-credential-store] 错误 1
原方案:
make prefix=/usr/local/git all
make prefix=/usr/local/git install
解决方案:
可替换为
./configure --without-iconv
make CFLAGS=-liconv prefix=/usr/local/git all
make CFLAGS=-liconv prefix=/usr/local/git install
最后将git加入环境变量
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc
大功告成!查看一下git的版本
git --version
>> git version 2.12.0
在完成升级后一定要记住git的文件路径,按照如上的教程git的最终路径为/usr/local/git/bin,这个在后面配置有用到。
第二步:
打开PHP禁用函数
在这个自动部署程序中主要用到的函数为shell_exec(),但是在默认情况下是被禁止的,需要去php.ini中修改配置,具体做法如下:
1、找到php.ini文件
2、查询disable_function
3、删除shell_exec,
4、保存
5、重启PHP
第三步:
配置WWW用户
首先要检查www是否有权限,打开/etc/passwd,查看www用户,如果是/sbin/nologin需要改为/bin/bash
第一次配置成功也是采用的公钥,是在切换到www用户下创建的,可是在码云那,再提交相同的公钥,提示已经存在,可是,如果我们项目很多的话,每次都创建新的公钥也很麻烦,于是就放弃在www下创建公钥的思路,但是www的权限,仍然需要改。
第四步:
配置webhook脚本
webhook脚本如下:
<?php
$savePath = "网站根目录";
$gitPath = "代码仓库";//采用带密码的方式,例如:https://user:password@gitee.com/zxzllyj/sample-project.git
$email = "用户仓库邮箱";
$name = "仓库用户名";
$git = "GIT全局路径";
$password = "在GITEE设置的密码";
$branch = "你需要pull的分支";
$logName = "LOG名称";
file_put_contents("$logName.log", PHP_EOL.date('Y-m-d H:i:s', time()).": ".PHP_EOL, FILE_APPEND);
$requestBody = file_get_contents("php://input");
if (empty($requestBody)) {
file_put_contents("$logName.log", "FAILED".PHP_EOL, FILE_APPEND);
die('send fail');
}
file_put_contents("$logName.log", $requestBody, FILE_APPEND);
$content = json_decode($requestBody, true);
if($content['password'] == $password){
if ($content['ref']=="refs/heads/$branch") {
$result = shell_exec("cd $savePath && $git clean -f && $git pull origin $branch 2>&1");
$res_log = "[ PULL START ]".PHP_EOL;
$res_log .= $result;
$res_log .= PHP_EOL . PHP_EOL;
file_put_contents("$logName.log", $res_log, FILE_APPEND);
echo $result;
}
} else {
file_put_contents("$logName.log", 'Password is Incorrect!', FILE_APPEND);
echo 'Password is Incorrect!';
}
第五步:
克隆项目
在要部署的目录下进行克隆。
git clone 项目地址 /data/websitel/