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等 压缩图片 ...
随机推荐
- 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...
- 10个最好用的HTML/CSS 工具、插件和资料库
大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java compiler level does not match解决方法
从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description Resource Path Location Type Java compiler level d ...
- 在 SharePoint Server 2016 本地环境中设置 OneDrive for Business
建议补丁 建议在sharepoint2016打上KB3127940补丁,补丁下载地址 https://support.microsoft.com/zh-cn/kb/3127940 当然不打,也可以用O ...
- CentOS:Yum源的配置
# cd /etc/yum.repos.d/ # mv CentOS-Base.repo CentOS-Base.repo.bak # wget http://mirrors.163.com/.hel ...
- Linux初识
在这篇文章中你讲看到如下内容: 计算机的组成及功能: Linux发行版之间的区别和联系: Linux发行版的基础目录及功用规定: Linux系统设计的哲学思想: Linux系统上获取命令帮助,及man ...
- VIM教程
vim 的环境设定参数 :set nu :set nonu 就是设定与取消行号啊! :set hlsearch :set nohlsearch hlsearch 就是 ...
- 如何查看w3p.exe 和IIS 应用程序池的关系
图形界面方式 命令行方式 如果找不到 appcmd Appcmd.exe exists at the location %systemroot%\system32\inetsrv\. You eith ...
- mono for android 用ISharedPreferences 进行状态保持 会话保持 应用程序首选项保存
由于项目需要 要保持用户登录状态 要进行状态保持 用途就好像asp.net的session一样 登录的时候进行保存 ISharedPreferences shared = GetSharedPrefe ...