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等 压缩图片 ...
随机推荐
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- 对Castle Windsor的Resolve方法的解析时new对象的探讨
依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 ...
- LeetCode 7. Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Have you ...
- [C#] 简单的 Helper 封装 -- CookieHelper
using System; using System.Web; namespace ConsoleApplication5 { /// <summary> /// Cookie 助手 // ...
- ZKWeb网页框架1.4正式发布
本次更新的内容有 添加更快的批量操作函数 添加IDatabaseContext.FastBatchSave 添加IDatabaseContext.FastBatchDelete 注意这些函数不会触发注 ...
- 编写高质量代码:改善Java程序的151个建议(第8章:多线程和并发___建议126~128)
建议126:适时选择不同的线程池来实现 Java的线程池实现从根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系 ...
- redis成长之路——(二)
redis操作封装 针对这些常用结构,StackExchange.Redis已经做了一些封装,不过在实际应用场景中还必须添加一些功能,例如重试等 所以对一些常功能做了一些自行封装SERedisOper ...
- ObserverPattern(观察者模式)
import java.util.ArrayList; import java.util.List; /** * 观察者模式 * @author TMAC-J * 牵一发而动全身来形容观察者模式在合适 ...
- 我的MYSQL学习心得(十三) 权限管理
我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...
- 从Unity3D编译器升级聊起Mono
接前篇Unity 5.3.5p8 C#编译器升级,本文侧重了解一些Mono的知识. Unity3D的编译器升级 新升级的Mono C#编译器(对应Mono 4.4) Unity编辑器及播放器所使用的M ...