使用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 "wangzhenxian@foxmail.com"
# 然后一直回车就行
# 生成的文件通常是 /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
<?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 "wangzhenxian@foxmail.com" # 邮箱请与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
使用PHP脚本远程部署git项目的更多相关文章
- 使用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的<使用PHP脚本远程部署git项目>后就尝试在自己服务 ...
- Jenkins部署git+python项目实现持续集成
目录 1. 创建 item 2. 配置 3. 构建 1. 创建 item 接下来填写创建任务的名字,并选择创建一个 Freestyle project ,点击确认. 2. 配置 接下来进入到项目相关配 ...
- 图文详解远程部署ASP.NET MVC 5项目
话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手 ...
- 图文详解远程部署ASP.NET MVC 5项目 [转载]
话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手 ...
随机推荐
- python __str__ 和__repr__方法
看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): self.data = value >> ...
- JWT
Web安全通讯之Token与JWT http://blog.csdn.net/wangcantian/article/details/74199762 javaweb多说本地身份说明(JWT)之小白技 ...
- shuffle和sort分析
MapReduce中的Shuffle和Sort分析 MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据.第一个提出该技术框架的是Google 公司,而Google 的 ...
- python爬虫动态html selenium.webdriver
python爬虫:利用selenium.webdriver获取渲染之后的页面代码! 1 首先要下载浏览器驱动: 常用的是chromedriver 和phantomjs chromedirver下载地址 ...
- Python之面向对象二
面向对象的三大特性: 继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 c ...
- sort()与sorted()区分开
列表的排序方法是sort 可用list.sort() sorted()是BIF不能用list.sorted() 引发的异常AttributeError: 'list' object has no at ...
- JS日期格式化转换方法
1. 将日期转换为指定的格式:比如转换成 年月日时分秒 这种格式:yyyy-MM-dd hh:mm:ss 或者 yyyy-MM-dd.当然是网上的方法,只是总结下. Date.prototype.fo ...
- [LeetCode] Diameter of Binary Tree 二叉树的直径
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...
- 网易云安全两篇论文入选计算机视觉顶级会议ICCV
本文由 网易云发布. 10月22日至29日,全球计算机视觉顶尖专家们共聚威尼斯,参加ICCV2017国际计算机视觉大会,就领域内最新成果展开集中研讨,大会论文集也代表了计算机视觉领域最新的发展方向和 ...
- git中的merge与rebase
之前一直对git的merge与rebase很困惑,而且一般也只使用merge而不是使用rebase.今天受高人指点理清了两者的区别. 首先对于两者而言,他们的结果是一样的,差异在于合并的方式(产生的结 ...