zoukankan      html  css  js  c++  java
  • PHP通过exec执行git pull

    目标

    项目没有使用Jenkins部署,使用的是Gitlab+ECS,要实现代码的自动部署

    想法

    使用Gitlab的钩子,当某个分支的代码提交之后,访问一个URL,实现代码的自动部署。这里使用PHP的exec方法,执行“git pull”操作

    Tips:这种方法不是百分百靠谱,万一代码冲突就......

    实现

    目的:访问 http://xxx.com/index.php?project=hello,程序会自动在hello这个文件下,运行“git pull”命令

    1、前提条件:linux上安装好git、php、nginx(或apache)

            1.1、git安装并配置

                参考:https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git

            1.2、php、nginx安装

                参考:https://help.aliyun.com/document_detail/97251.html?spm=a2c4g.11186623.6.1107.70581014ZKSnS8

            1.3、php、apache安装

                参考:https://help.aliyun.com/document_detail/50774.html?spm=a2c4g.11186623.6.1123.816d14f8IRTWh0

    2、启动安装好的php跟nginx(或apache)后

    3、如果有改过nginx的端口的话,需要修改下iptables,编辑/etc/sysconfig/iptables,新增一个端口即可,修改后运行 service iptables restart(记得阿里云入网规则也要添加相应的端口)

    4、相应的php代码如下:

    <?php
    #部署代码用!
    $project = $_GET['project'];
    if (!empty($project)) {
        $shell = "cd /data0/www/{$project}/ && pwd && sudo git pull 2>&1";
        exec($shell,$out);
        echo $project."<br/>";
        print_r($out);
    }else{
            echo "Well done.";
    }
    ?>

    说明:

    (1)sudo,如果没有加这个的话,大概率会出现"permisson deny"

    (2)2>&1,这个主要是为了查看运行结果

    (3)pwd,查看目录

    5、如果上面的程序无法跑起来,提示“sudo: no tty present and no askpass program specified”这类错误,那么基本上就是访问权限的问题,按照下面提示修改

    6、运行“ps -ef | grep php”查看php进程的用户名,如果是nobody,你需要修改下php的配置文件

    ps -ef | grep php

    7、修改php配置文件

    7.1、添加用户组,/usr/sbin/groupadd 用户组名

    /usr/sbin/groupadd 用户组名

    7.2、新增用户,/usr/sbin/useradd -g 用户组名 -s /bin/bash 用户名

    /usr/sbin/useradd -g 用户组名 -s /bin/bash 用户名

    7.3、修改php配置,我的是在/etc/php-fpm.d/www.conf,修改最上面的user跟group

    vim /etc/php-fpm.d/www.conf

    7.4、重启php,service php-fpm restart

    service php-fpm restart

    7.5、运行“ps -ef | grep php”查看php进程的用户名

    ps -ef | grep php

    8、修改sudoers

    8.1、运行chmod u+w /etc/sudoers

    chmod u+w /etc/sudoers

    8.2、vim /etc/sudoers

    vim /etc/sudoers

    8.3、在"root    ALL=(ALL)       ALL"下面加上"用户组 ALL=(ALL)  NOPASSWD: ALL"

    root    ALL=(ALL)       ALL
    用户组 ALL=(ALL) NOPASSWD: ALL

    9、继续执行上面的php文件,没提示错误基本上可以了,可能出现sudo: unable to initialize policy plugin这类错误,按照提示改即可

    10、pkexec visudo可查看具体的错误信息

    目的:访问 http://xxx.com/index.php?project=hello,程序会自动在hello这个文件下,运行“git pull”命令由此配合gitlab钩子实现代码的自动部署

  • 相关阅读:
    IT学习 程序员 学习网址收藏
    PHP地图上的点文字标注
    php 三种文件下载的实现
    10个免费的jQuery富文本编辑器
    Docker Swarm(四)Volume 数据(挂载)持久化
    Docker Swarm(三)Service(服务)分配策略
    Docker Swarm(二)常用命令
    Docker Swarm(一)集群部署
    Linux——Shell脚本参数传递的2种方法
    Linux——系统时间、开机时间
  • 原文地址:https://www.cnblogs.com/lyc94620/p/11825309.html
Copyright © 2011-2022 走看看