php脚本实现git自动化,使用PHP脚本远程部署git项目

准备工作:

1.coding.net创建私有项目

2.安装了Web服务 Git服务的服务器

服务器端:

1.nginx、php-fpm统一用www用户 www 目录,这个可以通过修改配置文件实现。

[root@yz_test www]# ps -ef|grep nginx

root 7826 1 0 Jul01 ? 00:00:00 nginx: master process nginx

www 7827 7826 0 Jul01 ? 00:00:01 nginx: worker process

root 9482 9437 0 06:33 pts/0 00:00:00 grep nginx

[root@yz_test www]# ps -ef|grep php-fpm

root 7800 1 0 Jul01 ? 00:00:00 php-fpm: master process (/usr/local/php-5.6.22/etc/php-fpm.conf)

www 7801 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7802 7800 0 Jul01 ? 00:00:00 php-fpm: pool www

www 7803 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7804 7800 0 Jul01 ? 00:00:00 php-fpm: pool www

www 7805 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7806 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7807 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7808 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7809 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7810 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7811 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7812 7800 0 Jul01 ? 00:00:00 php-fpm: pool www

www 7813 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7814 7800 0 Jul01 ? 00:00:00 php-fpm: pool www

www 7815 7800 0 Jul01 ? 00:00:00 php-fpm: pool www

www 7816 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7817 7800 0 Jul01 ? 00:00:01 php-fpm: pool www

www 7818 7800 0 Jul01 ? 00:00:00 php-fpm: pool www

www 7819 7800 0 Jul01 ? 00:00:00 php-fpm: pool www

www 7820 7800 0 Jul01 ? 00:00:00 php-fpm: pool www

root 9484 9437 0 06:34 pts/0 00:00:00 grep php-fpm

2.生成Git用户公钥:用于clone时认证权限

ssh-keygen -t rsa -C "[email protected]"

# 然后一直回车就行

# 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径

3.生成部署公钥

sudo -Hu www ssh-keygen -t rsa # 请选择 "no passphrase",一直回车下去

sudo cat /home/www/.ssh/id_rsa.pub # 查看生成的密钥内容,复制全部

4.准备钩子目录 项目目录

chown -R www:www /www/hook

chown -R www:www /www/repos

sudo -Hu www touch /mnt/www/hook/index.php

error_reporting(1);

// 生产环境web目录

$target = '/home/wwwroot/website.com';

$token = '您在coding填写的hook令牌';

$wwwUser = 'www';

$wwwGroup = 'www';

$json = json_decode(file_get_contents('php://input'),true);

if (empty($json['token'])||$json['token']!==$token) {

exit('error request');

}

$repo = $json['repository']['name'];

$cmd = "sudo -Hu www cd $target && git pull";

shell_exec($cmd);

5.修改git配置和保存git用户名密码

sudo -Hu www git config --global credential.helper store # 永久保存

sudo -Hu www git config --global user.name "wangzhenxian"

sudo -Hu www git config --global user.email "[email protected]" # 邮箱请与conding上一致

在Coding.net

1.添加用户公钥

2.添加部署公钥

3.添加hook

个人感悟:

1.nginx .php-fpm 执行的用户组、用户保持统一

2.生产www用户的公钥,确保www用户在执行操作时 能从/home/www/.ssh 目录下到到公钥。

参阅:

http://blog.csdn.net/liu510817387/article/details/51594699

http://overtrue.me/articles/2015/01/how-to-deploy-project-with-git-hook.html

使用idea来部署git项目

使用idea来部署git项目 一).将项目交由git管理 VCS ---->import into Version Cntorl ------>create Git Repository ...

idea远程部署SpringBoot项目到Docker

安装docker服务或者系统学习docker参考这篇文档:https://shimo.im/docs/fE0eJCx8IIojQXzB/ 1.配置docker的远程端口 vim /usr/lib/sy ...

Jenkins与Git持续集成&;&;Linux上远程部署Java项目

一.环境搭建 1.安装所需软件 Jdk Maven Jenkins Tomcat Xshell git 以上软件去官网下载,比较简单,不一一描述了 2.安装所需的jenkins插件 Git plugi ...

脚本:将git项目下载到本地并启动

大致思路:从git上clone源代码到本地:使用mvn package将源代码达成war/jar包:将打好的包放到tomcatpath/webapps/下:到tomcatpath/bin/下执行res ...

ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率

1.安装ant 环境,https://ant.apache.org/bindownload.cgi 2.下载jacoco包  https://www.eclemma.org/jacoco/ ,解压后, ...

利用WebHook实现PHP自动部署Git代码

平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的后就尝试在自己服务 ...

Jenkins部署git+python项目实现持续集成

目录 1. 创建 item 2. 配置 3. 构建 1. 创建 item 接下来填写创建任务的名字,并选择创建一个 Freestyle project ,点击确认. 2. 配置 接下来进入到项目相关配 ...

图文详解远程部署ASP.NET MVC 5项目

话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手 ...

图文详解远程部署ASP.NET MVC 5项目 [转载]

话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手 ...

随机推荐

zynq中uboot的qspi启动报错及解决办法

问题描述: 用u-boot-xlnx-v2016.3版本编译的uboot通过qspi flash启动出现如下错误: 尝试在uboot命令行输入"sf probe 0 0 0"挂载q ...

node.js调试

用了几天node.js感觉很新奇,但是调试问题实在是愁煞人,开始的时候懒的学习调试方法,看看异常内容就可以了,但随着代码复杂程度的上升,并不是所有错误都是语法错误了,不调试搞不定了,只好搜搜资料,学习 ...

增加oracle数据库最大连接数

这几天碰到系统不能登陆的情况,初步判断可能是数据库连接满了,(后来检查不是这个原因),做了一次增加数据库最大连接数操作.操作步骤如下 操作系统:Red Hat Enterprise Linux Ser ...

postal.js使用

requirejs.config({ //默认情况下模块所在目录为js/lib baseUrl: './', //当模块id前缀为app时,他便由js/app加载模块文件 //这里设置的路径是相对与b ...

【Android进阶】在开发中Application到底用来做什么

首先,在一个Android程序中,有且只有一个Application对象,在程序开始跑起来的时候,首先执行Application的onCreate方法,这是一个Android应用的入口,在开发中,我们 ...

iOS学习——Quartz2D学习之UIKit绘制

iOS学习——Quartz2D学习之UIKit绘制 1.总述 在IOS中绘图技术主要包括:UIKit.Quartz 2D.Core Animation和OpenGL ES.其中Core Animati ...

lvs介绍

1Linux集群及系统扩展的方式概述 集群是有多台服务器组织在一起,一起工作,因为单台服务器的并发响应能力是有限的,响应处理能力也是有限的所有有了集群的出现 在系统扩展有2种方法: 1 向上扩展:是指 ...

array_udiff_uassoc

PHP array_udiff_uassoc 函数 一.函数功能: 计算出第一个数组与其他数组的差集(考虑键名和键值,对键名和键值的比较都使用自定义函数).比较两到多个数组,找出第一个数组中不包含在其 ...

python---方法解析顺序MRO(Method Resolution Order)<;以及解决类中super方法>;

MRO了解: 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就需要对当前类和基类进行搜索以确定方法所在的位置.而搜索的顺序就是所谓的「方法解析顺序」(M ...

你可能感兴趣的:(php脚本实现git自动化)