利用码云webhook自动部署脚本 不指定

jed , 2018-7-15 23:45 , 服务器技术 , 评论(0) , 阅读(10018) , Via 本站原创 | |
整体思路:

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/


发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]