云效(原RDC)如何耦合进我们的业务

简介: 最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品。 我会把我最近3个月的使用体会分成5个部分:使用RDC的动机、PHP项目集成、JS项目集成、JAVA项目集成、Docker类项目集成这5.

最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品。

我会把我最近3个月的使用体会分成5个部分:使用RDC的动机、PHP项目集成、JS项目集成、JAVA项目集成、Docker类项目集成这5个分支来写

因为近期RDC的迭代比较频繁,所以我的分享会比较的浅,点到为止,仅供参考,目录:

1、RDC如何耦合进我们的业务

2、如何构建一个基于Composer的PHP项目

3、如何构建一个基于NodeJS的前后端项目

4、如何构建一个基于Maven的Java项目

5、RDC + 容器服务完成持续集成


一、现有架构梳理

在没有切入RDC之前,我们公司的持续集成主要是通过以下的方式进行全流程:

应用环境: 基于Docker集群。

代码存储: 存放在 code.aliyun.com,阿里基于gitlab搭建。

构建打包: 使用Jenkins来进行构建。

上线发布: 部分通过Jenkins发布,部分通过自定义脚本实现。

我们之前的开发方式是基于微服务的方式进行开发,所以虽然按项目进行人员分组,但是具体的开发、测试、运维智能都是面向微服务,导致了代码分支的管理上有更严格的要求。我们的每一个代码库(服务,也可以理解为应用)都分为3个分支 dev、rc、release ,含义如下:

dev 开发分支: 主要用于工程师们日常开发后的合并归总,比如基于dev创建一个新分支 dev-hanmeimei 用来存放员工韩梅梅的相关代码,当韩梅梅开发完成后,提交合并到dev分支即可。原则上不直接修改dev分支的内容,防止出现污染和冲突。dev里的代码会自动的发布到日常测试环境,进行测试。

rc 预发分支: 当dev分支的内容通过测试后,从dev合并到rc,然后进行线上测试,完成预发。此分支也不可进行人为干预和修改,只接受合并请求。

release 线上分支: 正式代码,rc线测完成后合并到release分支,此分支也不可进行人为干预和修改,只接受合并请求。有一种特殊情况支持直接干预,比如线上出现了很严重的bug,再走一遍合并流程已经太迟了,直接拉release分支创建一个release-bug分支,然后把bug修复完成后直接与release合并。

_1


二、下面说说我们的在上述的这一套架构中遇到的问题:

因为各种各样的原因,我们已经使用上述的架构大约18个月以上了,所以积累下的问题特别的多,有些问题忍忍也就过去了,有些问题却逐渐带来了严重的影响。

1.成本问题

先从代码管理方式来说,因为我们的代码管理模式是dev--->rc--->release的方式,需要一层层的进行合并,而我们不能向所有技术人员开放所有分支的合并权限,那就意味着需要至少有一个人来进行代码的审查及合并工作,这是一个人力成本的问题。

然后说说硬件投入,我们之前的jenkins服务一共有3个机器组成,1个管理,2个构建。这一套2核4G内存大概一年15000元左右,对公司来说属于必要成本,谈不上贵,但也不算便宜。

随着使用逐渐发现,特定时间的代码push频率提高,原有的构建机器出现资源争抢,后来就改成了错时构建(不侦听push),每5分钟一次,对效率有着轻微的影响。

2.管理问题

因为开发负责的服务/应用不一样,从企业内部管理的角度来说,不可能给所有开发人员开启所有代码仓库的权限,那必须要有人对开发、测试人员的git权限进行维护,这一点其实很痛苦。人员离职、入职时需要把某些员工移入仓库,移出仓库,还有时需要提权/降权。我们一直没能解决这个问题,都是人肉维护git权限,比较累,效率也很低。

3.效率问题

之前说过,我们有专人对代码的合并进行审查和管理,但是因为快速迭代,导致每天会频繁的审查和接受合并。从代码安全性角度来说这是不得已而为之的一件事,低效,但是安全。

另外,在版本发布时,有些版本是自动发布的,有些产品比较重要,需要手动进行发布。这样一来,发布也需要牵扯一些精力,这个权限不可能下放给工程人员,但是放在PM或者PL手里又产生了大量的流程时间成本,目前没有很好的解决,还是人肉处理,比较累。


三、带着问题出发,通过RDC完成持续集成

留意到阿里云的RDC产品主要是之前使用过阿里云的另一个产品CRP(据说今年即将停止维护了),他同样支持类似jenkins的功能,而且无需自己提供服务器。

一开始没完全切换到CRP的原因是我们的业务需要Docker部署,CRP到中后期才对Docker完成支持,而那时我们已经切换到jenkins上去了,所以就搁置了。

1.通过RDC有效降低成本

RDC是一个阿里云提供的云服务,目前是免费的,未来即便商业化,应该也会大幅度低于自建系统的成本,不用特别担心。

它直接打通了阿里云Code可以完成触发构建。

不需要自备额外的机器进行构建。仅此一项对我来说一年至少节省1.5万元。

之前公司使用禅道等一些产品管理需求、BUG、文档等,接入RDC后它自带项目和产品管理,节约了办公这块的成本,且支持钉钉接入,手机使用还是蛮方便的。

2.通过RDC解决管理问题

代码仓库的权限问题一直使我们公司的心病,因为人员离职/入职导致需要调整每一个仓库的权限。同时我们又是微服务架构,导致一个应用可能会有N个仓库,调整起权限来简直是心累。

庆幸的是,我们公司一直是全员通过钉钉办公,而RDC支持对接钉钉及其组织架构。那么通过RDC+钉钉我们做到了下面这些事情:

1.只需要在钉钉里维护员工入职、离职即可,离职后相关项目权限自动就没了。(省心+1)

2.在RDC里为你的阿里云Code代码仓库分好git组,然后把对应的钉钉用户丢到某个组下即可完成批量授权/降权。(省心+2)

RDC接入钉钉这个功能,我和RDC&CRP团队喊了快1年,总算是支持了,这也是我觉得RDC一定能更好用的一个主要原因,产品多了、业务复杂之后你才能体会到内部管理时的碎片化有多痛苦,而RDC+钉钉我觉得能有效缓解这种痛苦。

3.通过RDC解决效率问题

通过RDC可以完成整个持续集成的工作流,并且RDC的最新版本已经可以自定义流水线了,可以有针对性的完成构建、自动部署、手动部署、开关式部署。

一些不太重要的业务,在流水线里设置成自动发布,一些比较重要的业务设置成手动发布。而且未来发布相关的操作很可能在钉钉里就能直接完成,这样一来其实已经减少了大量的中间流程,变相提高了效率。

重要的是,可以针对性的设置多个流水线,相当灵活,而且现在的构建和部署自由度很高。

另外,钉钉聊天记录可以直接转RDC的项目需求,我觉得这个功能简直好用到突破天际。


四、备注

开篇就说到这里,主要是聊一聊我们自己公司遇到的一些问题,以及为什么选择RDC。

上面写的东西,可能有一部分大家能找到共鸣,也可能看完不知所云,因为每个团队遇到的问题是不同的,感受和痛点也不同。

我不是要向大家推销RDC这个产品,那是阿里云团队的事情,我也不觉得RDC是完美的,仅仅是因为我们选择了RDC进行持续集成相关的工作,把这个过程分享给大家,仅供参考。

后面的几个分享中偏技术性多一些,主要介绍一下构建过程中遇到的一些小坑及应对方式。

博客原文:http://qipangzi.com/archives/79

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
jenkins Java 持续交付
云效(原RDC)+ 容器服务完成持续集成
最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品。 我会把我最近3个月的使用体会分成5个部分:使用RDC的动机、PHP项目集成、JS项目集成、JAVA项目集成、Docker类项目集成这5.
18093 0
|
JavaScript Shell 持续交付
云效(原RDC)如何构建一个基于NodeJS的前后端项目
最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品。 我会把我最近3个月的使用体会分成5个部分:使用RDC的动机、PHP项目集成、JS项目集成、JAVA项目集成、Docker类项目集成这5.
7124 0
|
新零售 Java 大数据
RDC品牌升级为云效,打造一站式企业协同研发云
2017年10月11日起,研发协同RDC品牌全新升级,品牌名也正式更名为云效,成为云效公有云解决方案。
|
持续交付 PHP 开发工具
云效(原RDC)如何构建一个基于Composer的PHP项目
最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品。 我会把我最近3个月的使用体会分成5个部分:使用RDC的动机、PHP项目集成、JS项目集成、JAVA项目集成、Docker类项目集成这5.
6422 0
|
19天前
|
运维 Devops
云效产品使用报错问题之yaml流水线里的 ${CI_COMMIT_REF_NAME} 失效如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
云效产品使用报错问题之yaml流水线里的 ${CI_COMMIT_REF_NAME} 失效如何解决
|
19天前
|
运维 Devops 测试技术
云效产品使用报错问题之云效度量的缺陷累积流图,缺陷的“已完成”这条线未更新,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
19天前
|
运维 Kubernetes JavaScript
云效产品使用报错问题之gitlab库导入到云效失败如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
19天前
|
运维 Kubernetes JavaScript
云效产品使用报错问题之流水线发布uniapp的应用失败如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
19天前
|
缓存 Kubernetes Devops
云效产品使用报错问题之不知道云效api需要什么权限如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。

热门文章

最新文章