首页   >   Q   >
    企业DevOps平台建设解决方案

企业DevOps平台建设解决方案

2020-08-20

当前软件交付的挑战

越来越多的企业开始使用云服务,业务发展的速度越来越快,但整体软件交付的效率相对较低。业务发展的述求与研发效率之间形成了巨大的矛盾。
企业上云成为标配:86%企业已经使用云服务,79%企业利用云平台开发应用程序,10%的企业了解云计算平台,正在准备相关开发。
软件交付效率越来越高:在2018年,48%的团队(高效能团队)可以做到每天至少部署一次,7%的团队可以做到每天按需部署多次(精英级团队)。
团队间交付效率差异巨大:交付效率最高的精英团队可以在每天多次部署的情况下做到85%以上的变更成功率,而交付效率最低的团队则数周才能部署一次,且变更成功率不到50%。

来源: DORA - State of DevOps 2018

企业面临的现实问题

但是,针对处在快速发展的企业来说,人员规模的不断扩大,与流程规模和工具发展的不匹配,在跨越到精英团队的路上,总是存在着诸多现实的问题:
1.跨职能协同,角色多,人员多,难于协同。每个人都感觉,推动一件事情真的是太难了
2.发布流程不规范,好的实践又难于推广。大家都知道有问题,可一旦要改进,却总是有这样那样的原因
3.发布时间长,需要人工介入多,无论从时间成本,还是由于人工介入带来的风险都很大

4.缺少建设工程效能的有效抓手。想要建设提升,但缺少方法和抓手,更缺好用的工具软件交付要求越来越高和企业面临的现实问题,双重迭加,这就像开着拖拉机参加拉力赛。那是一种想要快,却加不上速的无力感,看着竞争对手消失在视线中。怎么破呢?答案是DevOps。
DevOps是什么
那什么是DevOps,它能帮助我们解决什么问题呢?
DevOps是一套集组织文化、团队协作、工程实践和工具为一身的工作方式,以帮助企业高效、快速、高质量地交付应用程序和服务为目的,从而更好地实现客户价值。它的出现,正是希望能帮助企业跨越业务高速发展和研发低效交付的鸿沟。

DevOps包含一系列的方法、实践和工具,最主要的为:
需求协作:如精益看板
代码协作:如代码分支规范和代码托管工具
软件交付:如持续交付和CICD工具


软件交付过程中隐含着两条主线,一条是需求价值流,另一条是代码变更流。其中:
需求价值流:关注项目协同,以需求为价值单元,拉通端到端的交付过程,以流动效率为核心,组织跨职能协同。
代码变更流:关注代码发布协同,以代码变更为流动单元,基于发布流水线,拉通开发、测试、运维所有职能,持续、快速、高可靠地发布软件。
通过工具分别创建需求交付看板和发布流水线,我们首先实现了需求和代码的顺畅流动。通过将需求价值流和代码变更流拉通整合,迈入DevOps。
云效一站式DevOps方案
云效企业级一站式DevOps解决方案,提供从“需求->开发->测试->发布->运维”端到端的协同服务和研发工具,支持多种部署形态。

通过人工智能、自动化技术的应用,致力于成为数字企业的研发效能引擎,助力企业持续、快速、高质量地交付软件。

步骤
1.晨会上团队基于精益看板进行需求、任务对齐,完成任务指派
2.开发同学根据特性开发,创建变更分支
3.通过线下或云端开发环境进行编程工作,然后提交代码
4.代码自动触发自动的代码扫描,并做完分支级别的验证,发送给指定的代码评审员进行评审
5.完成评审的代码自动触发集成发布流水线,自动化的完成构建,生成Docker镜像,分别在开发环境、集成环境及预发环境进行部署,完成相应的验证工作;验证完之后处于待发布状态,触发上线审核流程,运维完成审核发布上线
6.过程中任何问题通过钉钉,遵循no news is good news的原则,自动化地及时反馈到指定负责人,做到准确反馈、即时响应,快速恢复。尽量避免垃圾短信式反馈,过多的噪音,反而会降低协作的效率。

开启您的DevOps之旅
有了一个初始的DevOps项目空间,这个时候,团队的研发协作活动,就可以在这个空间里展开了,开始我们的DevOps之旅吧。
基于需求看板,进行项目协作

初始化的项目空间里,在【需求】部分是空的,这个时候,我们可以通过新建需求的方式,创建新的需求。

创建一个新需求

需求页面点击蓝色【+】号快速创建需求,默认的任务类型为模板中配置好的【需求】,便于项目成员以用户故事的形式来描述需求;

基于看板组织需求协作


整个项目协作的过程,以需求价值流来驱动研发协作。从待处理->已选择->分析中->就绪(待开发)->开发中->待测试->测试中->待发布->已发布,完整地将需求协作的过程可视化出来。前后拉通所有职能,促进各个角色围绕需求,以流动效率为核心组织协作。
需求看板打通从项目协作到软件发布的全链路,代码提交和发布信息及时同步到需求卡片,集中及时的工作状态同步,解决了沟通中基本靠吼的问题。
基于特性分支,组织代码协作

团队的每日工作总是基于需求看板进行组织。晨会上,对当天的工作进行安排,需求指定到具体负责的团队同学身上。打开一个需求详情,通过设置需求中的“执行者”字段,将需求安排给具体的开发者。


当任务被安排给相应开发者之后,开发者会同时收到钉钉通知及DevOps项目空间的站内通知。这个时候,开发者就可以正式自己开发之旅了。

开发工作,从创建特性分支

开发者打开一个需求,在需求详情页中,点击“新建分支”,来为该需求创建与之对应的特性分支。


在代码库中,选择对应的代码库,分支名称会给出默认的名称,一般开发者可以根据自己所负责的需求的名称进行修改。选择创建该特性分支的来源,一般为master,开发者可以根据自身团队分支模式,来确定分支的创建来源。

完成特性分支的创建,我们可以看到代码库里已经多了一个刚刚创建的分支,同时,在需求看板中,找到刚刚创建分支的需求,在其下方,已经多了一个分支名称,及该分支当前的执行集成和发布状态。


同时,在需求看板页面上,可以看到该需求与之对应的特性分支名。


本地执行开发编码工作
根据创建的特性分支,将代码clone到本地。
➜ /Users/erizhang/workspace >git clone git@codeup.teambition.com:tbdemo/gameoflife.gitCloning into 'gameoflife'...remote: Counting objects: 3, done.remote: Total 3 (delta 0), reused 0 (delta 0)Receiving objects: 100% (3/3), done.Plain Text
执行 git checkout 分支名 切换到指定的特性分支,进行代码的编写工作。
当完成代码的编写,执行 git commit -m "commit msg" 进行代码的检入,如果该特性分支还没创建(即没有在需求卡片上创特性分支),可以通过在commit message里,带上需求ID的方式,将该分支与需求卡片建立关联,如 git commit -m "#id" 。由于创建了特性分支,该需求会自动从“待处理”进入到“开发中”。
代码提交,发起代码协同
静态扫描
执行 git push remote remote/feature-branch 的方式,将本地的代码提交到远端的对应分支上。由于设置了代码提交触发扫描检查,该提交过程,将自动触发代码的扫描。


通过代码库内置的代码规约扫描及代码安全敏感信息扫描,将每次代码提交进行即时的扫描,并快速反馈给开发者,在第一时间将问题拦在代码库之外。如果设置了代码质量红线,本次代码提交便不能往下执行。
除了自动的代码检查机制外,人工代码评审是一种社交化的编程手段,通过小组或结对代码评审的方式,可以促进团队内部知识共享,提高团队整体水平,确保团队统一规范。
注:代码评审的发起,可以是在分支合入到另一个分支之前进行触发,也可以是当开发分支有新的代码变更时候触发。此处,我们以基于特性分支的集成发布为例,即在代码通过自动检查之后,触发代码评审工作。
代码评审
在代码通过自动扫描后,系统会通过钉钉或站内信,通知到指定的代码评审员。评审员根据链接,打开代码变更的提交,进入代码评审流程。

如果是合并请求前的代码评审,同样可以在创建合并请求时,指定代码评审员,代码评审员根据钉钉或站内信通知,打开链接进行代码评审。
代码平台提供了友好的代码阅读功能,评审员可以在Web代码编辑上,对代码进行评审,并且可以在指定某行进行备注,提交评审反馈。当开发者收到代码评审员的反馈后,进行代码的修改,重新发起代码的提交->自动扫描->代码评审流程。

基于发布流水线,组织软件交付

当特性分支完成代码质量的检查:自动代码扫描和人工代码评审。此时,该代码变更会触发发布流水线。发布流程水线的作业是规范统一的发布流程,所有的变更都是经过该流水线进行发布,确保了版本的一致性及质量的一致性。
云效提供了可视化的流水线,将发布的整个流程拉通,并行任务展现在同一个阶段上。横向上,端到端拉通;纵向上,各并行任务同时展现出来。整个运行的状态一目了然地可视化。
流水线状态强关联需求看板状态
发布分支构建部署到测试环境后,测试同学开始进行测试验证,根据测试结果反馈信息;

如果某个特性分支此时处在测试阶段,那么与之对应的需求看板,将自动设置为“测试中”,这种需求的状态设置,不再由开发者手工设置。而研发团队各职能基于需求看板,就能准确地清楚哪此需求,走到了什么阶段,其对应的代码变更是由何分支,以什么时间进行发布的,成功与否,零散的信息将系统地展现在需求协作看板上,真正做到全职能协作。

随时随地进行发布审核
当流水线通过测试阶段,此时,软件处于可发布状态。软件遵循按需发布的原则,其发布上线,需要进行人工审核干预。通过打通流水线与反馈审核流程,流水线可以自动将审核信息通过钉钉消息发送给审核者,内容包含具体的变更信息及状态。审核者在任何时候任何地点,都可以通过手机快速完成审核工作。


审批通过开始生产环境部署,此时可以将需求状态置为【发布中】;

无人值守地部署生产环境
审核一旦通过,系统将自动发起部置生产环境流程,整个部署不再需要人工的参与。流水线运行过程直观展示,企业可完整看到当前流水线运行所处阶段和场景;


通过需求页面查看流水线整体执行情况,生产环境部署验收通过后,可将需求状态置为“已完成”。

小结:以需求看板为阵地,组织所有协同
基于需求看板,无论是需求的状态,还是需求相关联的代码分支、变更发布状态,都记录在需求卡片上,所有变更都可追溯,变更的详细信息记录包括分支、提交、合并请求等。
无论是产品经理、开发者、还是测试,需求看板为产品交付的节奏和进度建立了整体视角,需求卡片为与之对应的代码和变更建立了下钻的详细深度。

项目流水线页面可以直观查看流水线执行情况;

1. 全自动,即时通知,随时响应
2. 完善的权限管理,平台可靠
3. 代码扫描、安全扫描、全方位的测试组件扩展
4. 卡点设置,质量守护是纱窗,不是苍蝇拍

从DevOps到SecDevOps,全面保障企业资产安全

在前面,我们拉通需求和代码变更流,做到了持续、快速地交付软件。随着互联网时代安全风险的日益增加,安全问题成为交付过程中不可忽视的一个重要问题。为此,云效提供了从平台安全到代码安全的全面保护。

平台安全能力

事前预防

在企业设置中开启IP白名单验证,杜绝非法来源的访问。

事中监测

配置代码安全通知,当一些异常行为出现的时候及时通知企业管理员。

事后追溯
查看代码库操作审计日志,追溯问题的来龙去脉。

代码安全能力
代码安全扫描
云效流水线内建了语言安全扫描能力,通过将安全扫描集成进流水线,可以有效避免越权、内存溢出等常见漏洞。


集成代码规约

代码规约是减少常见代码问题的非常有效的手段。代码平台内建了阿里巴巴Java代码规约(P3C)的支持,在代码库中开启Java代码规约扫描后,可以看到每次代码提交的规约扫描报告,并可作为代码合并的卡点,有效提升代码质量。


敏感信息检测
很多安全问题都与程序员不小心将敏感信息提交到了代码库中有关,为了减少这种风险,代码库集成了敏感信息检测功能,通过智能化的规则判断,及时发现敏感信息泄露风险。开启敏感信息扫描后,我们在每次提交后可以看到敏感信息扫描报告,同时,它也可以作为代码合并的卡点之一。

结语

提升企业交付能力最好的时候是刚创立的时候,其次是现在。认清方向、选对工具,每一家企业都可以拥有精英团队的交付能力。

展开阅读全文 icon
其他推荐内容