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等 压缩图片 ...
随机推荐
- 前端极易被误导的css选择器权重计算及css内联样式的妙用技巧
记得大学时候,专业课的网页设计书籍里面讲过css选择器权重的计算:id是100,class是10,html标签是5等等,然后全部加起来的和进行比较... 我只想说:真是误人子弟,害人不浅! 最近,在前 ...
- 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信
接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...
- WPF 微信 MVVM 【续】修复部分用户无法获取列表
看过我WPF 微信 MVVM这篇文章的朋友,应该知道我里面提到了我有一个小号是无法获取列表的,始终也没找到原因. 前两天经过GitHub上h4dex大神的指导,知道了原因,是因为微信在登录以后,web ...
- Android 获取系统相册中的所有图片
Android 提供了API可获取到系统相册中的一些信息,主要还是通过ContentProvider 来获取想要的内容. 代码很简单,只要熟悉ContentProvider 就可以了. public ...
- 修改MySQL默认字符集编码
好记心不如烂笔头,很多东西当时没记下来,过了就忘了,下次用到时又得浪费好多时间才能解决.今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了. 查看MyS ...
- 初尝Brnshop移植到Linux Mono Jexus环境运行
brnshop是最近社区上比较火的开源商城. Jexus是Linux上的web服务器,简单说就是Linux的iis吧.特别感谢作者宇内流云的指点 一.根据http://www.cnblogs.com/ ...
- 从零开始,DIY一个jQuery(3)
在前两章,为了方便调试,我们写了一个非常简单的 jQuery.fn.init 方法: jQuery.fn.init = function (selector, context, root) { if ...
- WinRT自定义控件第一 - 转盘按钮控件
之前的文章中,介绍了用WPF做一个转盘按钮控件,后来需要把这个控件移植到WinRT时,遇到了很大的问题,主要原因在于WPF和WinRT还是有很大不同的.这篇文章介绍了这个移植过程,由于2次实现的控件功 ...
- 这些年一直记不住的 Java I/O
参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...
- 新手如何在gdb中存活
网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的L ...