svn迁移gitlab,构建前端打包发布流程
前端资源迁移
目前公司的前端资源托管在svn服务器上,由于团队的逐渐扩大,svn的分支管控越来越不灵活,而且对于以后前端流程一体化的处理支持不是很好,因此决定在版本控制上转向git。git的好处不用多说:多分支并行开发,自动化构建,持续集成等等,这也是促使我们转向它的原因。
具体操作中的问题
首先尝试使用gitlab提供的web hooks进行触发脚本控制。web hooks发出的post请求我们的php文件,在php中执行相关shell脚本,完成一体化构建。但是shell中的提示输出信息无法在本地进行显示,因此即使项目构建失败,开发人员并无法在git命令行得到直观的提示,用户交互很不友好。经测试,只有放在remote端的hooks目录下的脚本输出信息才能呈现在终端,因此最终放弃此种方案。
gitlab提供的web hooks的底层实现-update.rb的逻辑是基于remote端的update hook。update hook 会在用户每次push到remote时触发,根据返回值是否为0,来决定此次push是否成功,它接收3个参数,第一个位push的引用分支名,第二个为push之前的分支sha1,第三个为push之后的sha1。update.rb封装了提供了web hooks的功能,默认通过http post请求访问我们的服务端,然后执行服务端的命令。最后,更新web界面。
其次把目光转移到remote端的hooks目录,将我们的update脚本放入hooks中,但是问题来了,由于gitlab提供的web hooks触发也是基于update脚本,而且该update脚本软连接到一个ruby脚本(所有的gitlab项目共用同一个ruby脚本),因此,无法针对前端工程制定特有的发布流程,只有手动将所有的前端工程软链接到一个ruby脚本的副本(update_f2e),在这里做法就有点曲折:
1,首先,我们在update_f2e这个ruby中先执行原有的逻辑,最后执行我们自己写的update(shell脚本),但是问题在于在update(shell脚本)中无法接收update_f2e传入的参数,而且update(shell脚本)中的提示信息也无法显示在终端,用户体验差,放弃;
2,然后针对调用流程重新构建,脚本全部ruby化。将我们的shell脚本的逻辑修改为ruby,在update_f2e中执行,问题仍然是输出信息无法显示,放弃;
3,究极版,将update_f2e这个ruby文件修改为shell脚本,在我们的shell脚本执行完毕之后,通过命令行执行原有的ruby逻辑,最终,目的达成。
说了这么多,尝试了接近几百次push,终于采用shell->ruby的方式完成hook的无害触发,实现构建发布。
最后,方法3的方法有一个弊端,就是服务端的代码更新成功,但gitlab的web界面却无法更新,通过排查gitlab的ruby源码,发现是在gitlab-shell/lib/gitlab_update.rb中的 api.allowed?()执行失败造成,进一步深入gitlab_net.rb中,发现是我们的当前目录影响了api.allowed?方法的判断,因此在hooks/update的shell中切换到合适目录之后,解决了该问题。
svn迁移gitlab,构建前端打包发布流程的更多相关文章
- 基于GitLab的前端Assets发布体系
以SVN+RMS为核心的发布系统,对前端开发的影响上来看,存在以下问题: 覆盖式的发布,容易导致线上问题. js一旦发布,就有可能被任意其他页面使用.被引用的越多,就越重要.一旦核心js出现故障,影响 ...
- SVN迁移Gitlab步骤
概述 公司要求将之前使用SVN进行管理的项目迁移到Gitlab进行项目管理,但是运维连不上我们这边的SVN服务器,于是我们就得自己将SVN项目迁移到Gitlab.Yeah!终于有我表现的机会了. 要求 ...
- iOS开发之app打包发布流程
一.准备工作 苹果开发者中心 1.申请苹果开发者账号 首先需要申请苹果开发者账号才能在APP store 里发布应用. 开发者账号分类:(1)个人开发者账号 (2)企业开发者账号 主要的区别是:点击这 ...
- Win7平台下React-Native开发之Android项目打包发布流程
一.bundle文件 React-Native开发步骤中,有一个步骤是使用命令 react-native start 去启动一个基于Node.js的服务,名字为packager.这个packager的 ...
- 使用npm构建前端项目基本流程
现在各种前端框架, 库文件基本都托管到npm上, 我们平常下载到别人的项目文件, 也基本是用npm 构建的, 不了解点node和npm那是寸步难行. 下面介绍的代码示例不敢说是最佳实践, 但都是我亲自 ...
- ionic ios 打包发布流程
1.ionic cordova resources ios 在windows下 生成ios资源包 2.拷贝ionic 项目到mac电脑 不用拷贝platforms 并解压 3.正常情况下wido ...
- 前端Node项目发布流程
最近在做前端的发布流程,发布流程的主要实现以下几个方面: 构建:包括JavaScript.css.html等的压缩,以及版本控制,利用md5生成版本号替换文件引用,实现长缓存策略. 发布:输出新版本的 ...
- 使用release自动打包发布正式版详细教程
昨天写了个release插件的版本管理,今天就在自动发布过程中遇到了许多坑,只能再写一篇自动发布详细教程,纪念我那昨日逝去的青春 (╥ _ ╥`) release正常打包发布流程按照如下几个阶段: C ...
- Angular企业级开发(6)-使用Gulp构建和打包前端项目
1.gulp介绍 基于流的前端自动化构建工具,利用gulp可以提高前端开发效率,特别是在前后端分离的项目中.使用gulp能完成以下任务: 压缩html.css和js 编译less或sass等 压缩图片 ...
随机推荐
- Akka.net路径里的user
因为经常买双色球,嫌每次对彩票号麻烦,于是休息的时候做了个双色球兑奖的小程序,做完了发现业务还挺复杂的,于是改DDD重做设计,拆分服务,各种折腾...,不过这和本随笔没多大关系,等差不多了再总结一下, ...
- RabbitMq应用二
在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...
- 从Membership 到 .NET4.5 之 ASP.NET Identity
我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计.正所谓从实践从来,到实践从去,在我们把Membership的结构吃透之后,我们要 ...
- 【java】Naming.bind和Registry.bind区别
Naming类和Registry类均在java.rmi包 Naming类通过解析URI绑定远程对象,将URI拆分成主机.端口和远程对象名称,使用的仍是Registry类. public static ...
- bootstrap-datetimepicker 进一步跟进~~~开始时间和结束时间的样式显示
上次简单介绍了一下:05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器(http://www.cnblogs.com/dunitian/p/5524019.html) 这次深入再介绍一下 ...
- nginx的使用
1.nginx的下载 解压后文件目录: 2.nginx的常用命令 nginx -s stop 强制关闭 nginx -s quit 安全关闭 nginx -s reload 改变配置文件的时候,重 ...
- Kooboo CMS技术文档之一:Kooboo CMS技术背景
语言平台 依赖注入方案 存储模型 1. 语言平台 Kooboo CMS基于.NET Framework 4.x,.NET Framework 4.x的一些技术特性成为站点开发人员使用Kooboo CM ...
- ZKWeb网页框架1.1正式发布
发行日志 https://github.com/zkweb-framework/ZKWeb/blob/master/ReleaseNotes/ReleaseNote.1.1.md 主要改动 添加EFC ...
- JAVA程序员常用软件整理下载
********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...
- 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议126~128)
建议126:适时选择不同的线程池来实现 Java的线程池实现从根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系 ...