Web持续集成工作实践

内容来源:2017年3月11日,下划线技术总监王集鹄在“HTML5梦工场 & 微软开发者沙龙第02期——HTML5营销开发”进行《Web持续集成工作实践》演讲分享。IT大咖说(ID:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:2395 | 5分钟阅读

嘉宾演讲视频PPT回顾,请点击链接:http://t.cn/RdTSv7M

摘要

如果团队开发成员经常集成他们的工作,每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建来验证,从而尽快地发现集成错误。那么这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

背景

在2015年10月我加入了一家创业公司。创业公司的工作方法就像打开冰箱门做一顿饭,看到冰箱里有什么就做什么,更不要说什么持续集成了。

当创业公司不断壮大,就会出现各样的问题。持续集成是通过平台串联各个开发环节,实现和沉淀工作自动化的方法。持续集成是一个持续的过程,不能一步到位。它是不断完善、不断迭代去修复问题,当新的需求或问题出现的时候再去满足它。自动化就是能交给机器的都交给机器去做。

为什么要做持续集成

线上代码和代码仓库不同步。加盟公司后,我发现上线部署是通过FTP直接上传代码,使用文件比较工具进行代码合并。由于配置不一样,修改的人不一样,经常导致代码仓库和线上代码不统一。每次上线之前代码都要做一次线上线下手工合并。

缺少自动化测试。每次上线仅仅依赖人工测试,测试用例难以覆盖所有被影响的功能,常常出现初级的接口问题,直到产品上线用户反馈后才能发现问题。

只有程序员才能上线。活动页面的文案需要运营同学反复推敲,频繁修改习以为常。可每次修改文案都需要研发同学介入才能部署生效。为修改一个字,研发就需要陪运营熬到很晚。

自动化的需求

自动编译:自动引入各种依赖(开发依赖、包依赖、配置依赖)。资源自动转码、合并、压缩。自动处理配置文件。

自动部署:静态资源自动上传CDN服务器。应用文件自动上传和同步到应用服务器。

自动测试:自动进行单元测试、集成环境测试。

自动监控:构建异常、测试异常、运行异常自动通知相关负责人。

团队协作的需求

成员快速体验最新版本。第一时间部署内测版本,并自动通知团队成员。

策划直接修改文案上线。面向用户的说明文档,如仅文案修改不需要介入研发人力,即可完成线上更新。

设计师直接更新素材。设计师可以直接更新图片资源,图片自动切割、转码、上线。

数值工程师直接更新配表。数值工程师指游戏场景中的设计装备、属性和等级数值关系的人。数值配置通常是一份Excel文件。需要自动编译、更新和推演。

适配各种运行环境

本机环境local:应用能最少依赖在本机运行。能够及时修改和预览代码。能够模拟运行环境(接口或数据)。

开发环境develop:一般Web项目上线前,都会有一个局域网的开发环境供团队成员测试和体验。开发环境有完整的沙盒数据与线上隔离。方便打印完整日志、提供特权。

线上环境online:线上环境也叫生产环境,直接面向用户。访问的是真实数据,测试和体验时需非常谨慎。通常会上线多个版本,方便测试和回滚。

敏捷开发的需求

时间上要小步快跑,推进每次迭代速度,沉淀工作方法。

空间上要将各个岗位的工作汇集和串联实现自动化。

怎么做持续集成

CI需要的工具

统一的代码仓库GitLab;

构建平台Jenkins、Travis CI;

构建工具Gulp、FIS3;

部署工具rsync。

创建CI项目

进行基础设置,指定代码仓库和相关授权用户,设置构建触发器,设置构建脚本,设置构建异常通知。

构建实例

简单文案更新由运营同学完成。运营同学不需要安装其它软件,直接在浏览器中修改GitLab项目文件(通常是HTML中的文案),保存即刻更新上线。

数值工程师配表。数值工程师通过修改Excel文件,更新数值配置。

设计师发布CDN资源。在GitLab中可直接拖拽文件上传。转码、部署自动完成。

集群服务自动部署和测试。高并发的Web应用,通常都有很多分片(可以理解为多个主机)。代码需要同步到各个分片上,而各个分片可能有微小差异,不一定每次代码迭代全都能正常运行。我们将每一个分片提出一个测试端口,上线前各个分片均做一次测试用例覆盖,确保集成服务的稳定性。

使用成本

学习和使用成本

持续集成几乎覆盖了开发环节和运行环境方方面面,普通项目组成员不一定都能接触。所以我给组内的同学下放更多的内网环境权限。当然我们也可以自行安装相关环境。

线上环境隐私保护

线上环境的操作需要十分谨慎,一些配置有很高的保密性。包括但不限于第三方支付授权码、第三方应用授权码、文件部署授权码、数据库用户身份,也就是各种重要的私密配置。

区分不同运行环境

本机运行、开发环境(个人开发环境、稳定版、开发版)、线上环境(预上线、灰度上线),都需要通过配置或环境变量区分。

构建过程自身异常

就构建本身也可能出现异常。例如构建机器软硬件异常(网络中断、磁盘满了、编译依赖升级失败),还有节假日不在办公环境。

错误覆盖线上项目的风险

克隆构建任务也是有风险的,因为有相同的部署配置,处理不好会覆盖之前的线上代码,导致线上事故。

实践经验

项目规范

无论是前端项目还是后端项目(PHP、NodeJS、Go),我们都用package.json来定义。方便统一项目名称、版本、构建脚本的来源。

构建过程使用跨平台的脚本

可以选用PHP、NodeJS、Python等跨平台的脚本,方便运行到各种环境中。不建议使用VBScript或JScript,仅能在Windows直接运行的脚本。

编写小成本测试用例

编写测试用例也不一定要引入重型的测试框架,其实只要进程以非零状态退出就可以中断构建过程。NodeJS用process.exit(1);,PHP用exit(1);。

手动构建

为避免开发期成员部署项目互相干扰,给每个成员分配了一个独立端口。代码不需要提交到仓库,通过手动部署相应项目。

总结

上图是不同的开发过程。从需求阶段,到开发、测试、上线,再到运维,信息层贯穿了整个工作流。

产品和研发会变更项目成员、项目文档或一些基本信息,做一个项目管理。

研发和设计师会不断地更新素材、文案和代码以及开发文档,所有东西都会进入代码仓库。

每次代码变更都会通知构建平台,构建平台从代码仓库中拉取代码和配置进行构建。构建完成后就把构建好的文件部署到各个环境中去。

测试完就可以发布了,上线后进行同步,最后进行自动化测试。这就是整个上线流程。

我今天的分享就到这里,感谢聆听!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,195评论 25 707
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,982评论 3 119
  • 成长就是把好吃的最后一口留给别人,而不是习惯性的给自己时,内心仍为对方感到开心和满足
    夏达先生vne阅读 190评论 0 1
  • 这是书上的一段话,感觉很经典 在读书的年龄时,你必须完成学业,才能有自己的小心思去做这做那。回到家时你会听到父母的...
    不知栈桥阅读 252评论 0 4
  • 尿布的折叠视频: 1、尿布在洗干净,脱水后,晾晒前一定要用力甩一甩,这样晾干的尿布会比较平整,方便折叠。 2、晒的...
    愿你我都幸福阅读 1,022评论 0 1