gitlab+PHP 自动部署设计方案
2018-09-26 14:09
357 查看
2018-9-26 14:00:39 星期三
场景:
由于某种情况, 不能使用Jenkins, so......只有自己实现了
设计方案,
- 文件夹A, 用来存放git分支
- 文件夹B, 运行网站的代码目录
- 文件夹C, 部署用的脚本目录, C里边的脚本用来把A里边的代码更新同步到B里边
- 入口1 gitlab, 添加push hook, hook中指定的url可以执行C中的代码
- 入口2 Linux命令行, 执行C中的脚本进行部署
注意点:
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 }View Code
5. git diff 的时候会把中文路径重新编码, 可以设置一下 sudo git config --global core.quotepath false
项目地址: 码云 Summer-PHP-Deploy
相关文章推荐
- 使用Docker部署PHP应用的设计方案
- Php+WebHook实现项目自动部署 - 关于Git自动部署方案
- Memcached分布式部署方案设计(含PHP代码)
- 刚设计的自动部署产品监控框架【图】
- 我的jenkins自动部署方案演进史
- php实现webhook自动部署代码
- 通过gitlab的webhook进行项目的自动部署所遇问题总结
- 使用gitlab+jenkins+saltstack+rsync自动部署Web应用
- 系统软件自动部署实现方案
- 通过gitlab的webhook进行项目的自动部署所遇问题总结
- php项目自动部署(利用webhook)
- 自动量程万用表设计方案
- php设计模式---自动加载配置
- 使用gitlab+jenkins+saltstack+rsync自动部署Web应用
- 【线上直播】测试环境自动部署系统技术的整体方案、技术架构及功能介绍
- 公司邮件+网站+后台部署设计方案〖罗斌个人工作经验谈〗
- Saltstack自动部署Haproxy+keepalived+nginx+memcache+php(fastcgi)
- Jenkins spring boot 自动部署方案
- 自动循迹小车系统方案设计(二)
- Saltstack自动部署Haproxy+keepalived+nginx+memcache+php(fastcgi)