前端资源迁移

    目前公司的前端资源托管在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,构建前端打包发布流程的更多相关文章

  1. 基于GitLab的前端Assets发布体系

    以SVN+RMS为核心的发布系统,对前端开发的影响上来看,存在以下问题: 覆盖式的发布,容易导致线上问题. js一旦发布,就有可能被任意其他页面使用.被引用的越多,就越重要.一旦核心js出现故障,影响 ...

  2. SVN迁移Gitlab步骤

    概述 公司要求将之前使用SVN进行管理的项目迁移到Gitlab进行项目管理,但是运维连不上我们这边的SVN服务器,于是我们就得自己将SVN项目迁移到Gitlab.Yeah!终于有我表现的机会了. 要求 ...

  3. iOS开发之app打包发布流程

    一.准备工作 苹果开发者中心 1.申请苹果开发者账号 首先需要申请苹果开发者账号才能在APP store 里发布应用. 开发者账号分类:(1)个人开发者账号 (2)企业开发者账号 主要的区别是:点击这 ...

  4. Win7平台下React-Native开发之Android项目打包发布流程

    一.bundle文件 React-Native开发步骤中,有一个步骤是使用命令 react-native start 去启动一个基于Node.js的服务,名字为packager.这个packager的 ...

  5. 使用npm构建前端项目基本流程

    现在各种前端框架, 库文件基本都托管到npm上, 我们平常下载到别人的项目文件, 也基本是用npm 构建的, 不了解点node和npm那是寸步难行. 下面介绍的代码示例不敢说是最佳实践, 但都是我亲自 ...

  6. ionic ios 打包发布流程

    1.ionic cordova resources ios    在windows下 生成ios资源包 2.拷贝ionic 项目到mac电脑 不用拷贝platforms 并解压 3.正常情况下wido ...

  7. 前端Node项目发布流程

    最近在做前端的发布流程,发布流程的主要实现以下几个方面: 构建:包括JavaScript.css.html等的压缩,以及版本控制,利用md5生成版本号替换文件引用,实现长缓存策略. 发布:输出新版本的 ...

  8. 使用release自动打包发布正式版详细教程

    昨天写了个release插件的版本管理,今天就在自动发布过程中遇到了许多坑,只能再写一篇自动发布详细教程,纪念我那昨日逝去的青春 (╥ _ ╥`) release正常打包发布流程按照如下几个阶段: C ...

  9. Angular企业级开发(6)-使用Gulp构建和打包前端项目

    1.gulp介绍 基于流的前端自动化构建工具,利用gulp可以提高前端开发效率,特别是在前后端分离的项目中.使用gulp能完成以下任务: 压缩html.css和js 编译less或sass等 压缩图片 ...

随机推荐

  1. ASP.NET Core 之 Identity 入门(二)

    前言 在 上篇文章 中讲了关于 Identity 需要了解的单词以及相对应的几个知识点,并且知道了Identity处在整个登入流程中的位置,本篇主要是在 .NET 整个认证系统中比较重要的一个环节,就 ...

  2. 结合Jexus + Kestrel 部署 asp.net core 生产环境

    ASP.NET Core 是微软的全新的框架.这一框架的目标 ︰ 跨平台 针对云应用优化 解除 System.Web 的依赖. 获得下面三个方面的优势,你可以把它认为是一个C# 版本的NodeJS: ...

  3. Android-armebi-v7a、arm64-v8a、armebi的坑

    先来一波扫盲: armeabi:针对普通的或旧的arm v5 cpu armeabi-v7a:针对有浮点运算或高级扩展功能的arm v7 cpu(32位ARM设备) arm64-v8a:64位ARM设 ...

  4. C++随笔:.NET CoreCLR之GC探索(3)

    有几天没写GC相关的文章了哈,今天我讲GC的方式是通过一个小的Sample来讲解,这个小的示例代码只有全部Build成功了才会有.地址为D:\coreclr2\coreclr\bin\obj\Wind ...

  5. IdentityServer4 使用OpenID Connect添加用户身份验证

    使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...

  6. APEX:对object中数据进行简单处理?

    在Salesforce中,常常要对各种数据进行处理,已满足业务逻辑.本篇文章会介绍如何实现从object获取数据,然后将取得的数据进行一系列简单处理. 第一步:SongName__c 是一个新建的ob ...

  7. 页面布局class常见命名规范

    头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left rig ...

  8. 【干货分享】流程DEMO-资产请购单

    流程名: 资产请购  业务描述: 流程发起时,会检查预算,如果预算不够,流程必须经过总裁审批,如果预算够用,将发起流程,同时占用相应金额的预算,但撤销流程会释放相应金额的预算.  流程相关文件: 流程 ...

  9. Idea下用SBT搭建Spark Helloworld

    没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea下运行spark,就先要安装JDK 1.8+ 然后加入S ...

  10. Linux监控工具介绍系列——vmstat

      说来惭愧,玩Linux这么久了,居然没有玩转vmstat这个命令,对很多指标的具体意义都有点模糊不清,花了点时间好好学习.整理一下这个命令的相关资料.因为这个命令确实比较重要,而且频繁用到. 命令 ...