gitlab+PHP 自动部署设计方案
2018-9-26 14:00:39 星期三
场景:
由于某种情况, 不能使用Jenkins, so......只有自己实现了
看图: webUI

设计方案,
- 文件夹A, 用来存放git分支
- 文件夹B, 运行网站的代码目录
- 文件夹C, 部署用的脚本目录, C里边的脚本用来把A里边的代码更新同步到B里边
- 入口1 gitlab, 添加push hook, hook中指定的url可以执行C中的代码
- 入口2 Linux命令行, 执行C中的脚本进行部署
- 入口3 网页, 在页面中点击按钮进行部署
注意点:
1. 脚本由一个入口脚本和多个附属脚本组成, 附属脚本用来部署不同的项目
2. 附属脚本由很多共同点, 比如拉取最新代码, 找到差异, 覆盖到目标目录, 删除缓存等, 不同的是各种路径信息. 因此将这些共同的功能抽出来做一个类, 附属脚本传递不同的参数去实现部署
3. 脚本入口有三种: 一种是命令行, 一种是接收gitlab push hook, 还有就是网页交互
4. gitlab发送的是一串json, PHP接收的时候用 file_get_contents('php://input', 'r'); 内容如下(注意 object_kind, ref, repository->url, 他三个可以确认是哪个项目的哪个分支被push了代码)
{
"object_kind":"push",
"before":"615.....ab2",
"after":"c2c.....c8f",
"ref":"refs/heads/develop",
"checkout_sha":"c2c.....c8f",
"message":null,
"user_id":44,
"user_name":"zhangzhibin",
"user_email":"zhangzhibin@......com",
"project_id":120,
"repository":{
"name":"test",
"url":"git@...../test.git",
"description":"test",
"homepage":"http://...../test",
"git_http_url":"http://...../test.git",
"git_ssh_url":"git@...../test.git",
"visibility_level":0
},
"commits":[
{
"id":"c2c6e32d76b7539b8f981ff9830eb2e611c2dc8f",
"message":"测试hook",
"timestamp":"2018-10-08T16:49:03+08:00",
"url":"http://........./test/commit/c2c.....c8f",
"author":{
"name":"zhangzhibin",
"email":"zhangzhibin@......com"
}
}
],
"total_commits_count":1
}
5. git diff 的时候会把中文路径重新编码, 可以设置一下 sudo git config --global core.quotepath false
项目地址: 码云 Summer-PHP-Deploy
gitlab+PHP 自动部署设计方案的更多相关文章
- Gitlab CI 自动部署 asp.net core web api 到Docker容器
为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...
- 关于gitlab+jenkins自动部署代码的实现
本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...
- Jenkins介绍和安装及配合GitLab代码自动部署
Jenkins是什么? 基于JAVA的开源的自动化系统平台 加速自动化CI,CD任务及流水线,所有类型的任务:构建,测试,部署等 丰富的插件生态系统支持功能扩展,1400+插件和SCM,测试,通知,报 ...
- 用GitLab Runner自动部署GitBook并不难
相信很多程序员喜欢用 GitBook 来写电子书.教程或者博客,看了不少文章,貌似都缺少说明如何将 GitBook 部署到版本库,并自动在服务器上 build,然后将生成的静态网站部署到云服务器上. ...
- gitlab 实现自动部署(简单Python实现)
功能说明: 当本地master分支执行push动作的时候,服务器端会自动执行master分支的pull操作(还可以执行一些自动化脚本) 原理: git hooks就是那些在git执行特定事件(如com ...
- gitlab + php自动部署
功能简介 本地往服务器推送代码之后,触发web钩子,服务器拉取刚刚推送的代码 步骤 1.在gitlab后台配置钩子 项目->编辑项目->Web钩子->新增钩子 2.在服务器端为www ...
- Gitlab+Jenkins实现自动部署
Gitlab+Jenkins实现自动部署 系统环境: Gitlab主机 IP:192.168.1.2 Jenkins主机 IP:192.168.1.3 一.为何要做自动部署 #部署Tomcat的在 ...
- Jenkins+Gitlab配置Webhook实现提交自动部署
一.概述 在上一篇文章,链接如下: https://www.cnblogs.com/xiao987334176/p/11434849.html 已经实现了 Jenkins+harbor+gitlab+ ...
- Gitlab-runner+Docker自动部署SpringBoot项目
本文基于Gitlab CI/CD及Docker快速实现项目的自动部署. 注意:本文较长,浏览需要12分钟左右. 1.环境要求 以下服务器的操作系统均为Centos7 服务器A:Gitlab 服务器B: ...
随机推荐
- JS 禁止Ctrl+C + 禁止右键操作
<script type="text/javascript"> document.oncontextmenu = new Function("return f ...
- Day4 Numerical simulation of optical wave propagation之数字傅里叶变换
标量衍射理论是波动光学模拟的物理基础.这一理论基础的结果是将电磁波在真空中的传播作为线性系统进行处理. 对于单色波,系统观察平面的电场矢量是源平面电场矢量和自由空间脉冲响应的卷积. 因此,线性系统理论 ...
- (hdu 6024) Building Shops
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6024 Problem Description HDU’s n classrooms are on a ...
- [硬件]超能课堂(181):我们为什么需要4+8pin CPU供电接口?
超能课堂(181):我们为什么需要4+8pin CPU供电接口? https://www.expreview.com/68008.html 之前算过TDP 来计算机器的功耗 发现自己 理解的还是有偏差 ...
- AngularJS 1.x系列:AngularJS服务-Service、Factory、Provider、Value及Constant(5)
1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...
- DesigningFormsinAccess2010
- Codeforce Round #554 Div.2 C - Neko does Maths
数论 gcd 看到这个题其实知道应该是和(a+k)(b+k)/gcd(a+k,b+k)有关,但是之后推了半天,思路全无. 然而..有一个引理: gcd(a, b) = gcd(a, b - a) = ...
- 使用@property
@property装饰器就是负责把一个方法变成属性调用的,既能检查参数,又可以用类似属性这样简单的方式来访问类的变量 class Student(object): @property def scor ...
- 压测过程中,获取不到redis连接池,发现redis连接数高
说明:图片截得比较大,浏览器放大倍数看即可(涉及到隐私,打了码,请见谅,如果有疑问,欢迎骚扰). 最近在压测过程中,出现获取不到redis连接池的问题 xshell连接redis服务器,查看连接数,发 ...
- 使用item来封装数据:
一.item和field类: 1.使用Item类: 创建了类Bookitem,然后就可以使用: 2.item_pipeline: 我们可以使用item_pipeline对爬取的数据进行处理. 步骤: ...