第3章 DevSecOps转型——从研发入手
江宇宁和老汪一起研究了DevSecOps落地的实现和运营模型,并且对各个研发团队做了非常认真和细致的调研之后,一份详细的DevSecOps转型解决方案横空出世了。由于能用于DevSecOps转型上的资源非常有限,需要在前期集中力量和资源在最重要的领域进行投入。深思熟虑之后,作为整个软件开发生命周期的重要产出部分,开发阶段最终被江宇宁和老汪选为DevSecOps改进的第一步。接下来伴随而来的是大规模新的开发和安全工具的引入、研发规范的制定、流程的自动化、最佳实践的梳理以及相关人员的意识和能力培训。然而,在整个DevSecOps转型第一步的目标和方向上。宇宁和老汪陷入了困惑。
“宇宁,咱们先不说DevSecOps。DevOps的核心就是快速交付,你看最近几年大家都在谈论互联网公司技术如何先进,交付速度多么快,比如谷歌、亚马逊都是用发布频率来衡量他们的研发效能。所以,我们是不是也要以头部互联网公司为学习对象,然后我们的目标也按照这个思路来?”老汪拿着解决方案边思考边说道。虽然老汪的态度很明确,但话语之间也含有一丝迟疑。
江宇宁没有直接回答老汪的问题,因为提到头部互联网公司,他的老同学周天所在的灰石网络也在进行DevSecOps的落地。而正在几天前,他俩还在老地方——猫头鹰咖啡馆讨论过这个话题。此刻,江宇宁的思绪回到了几天前与周天交谈时的场景。
……
“还是你厉害,毕竟是研发效能专家啊!”江宇宁对着周天竖起大拇指称赞道。原来,在交流之后,江宇宁发现周天所在的灰石网络的DevSecOps推动进度,尤其是DevOps方面,已经走在了德富银行前面。
“刚才你提到短短的半年期间,你们的交付速度提高了几乎一倍,甚至有些团队都可以实现日发布这么频繁了?”江宇宁兴奋地问道。
“的确是的。”周天回应道,“这半年的进步还是蛮大的。”
“来来来,赶紧介绍一下你们是如何实现的!”江宇宁有点急不可耐了。
“其实也是我们找准了方向,或者说也是业务本身的需求。”周天不紧不慢地说,“还有一点,可能互联网行业的工作模式已经是比较敏捷的,或者说是天生适合敏捷,不像你们传统行业,更多场景还是瀑布模式,所以存在所谓的向敏捷模式转型。”
“果然是专家,真是一针见血!”江宇宁又一次竖起了大拇指,“的确,我们的业务性质决定了这种稳扎稳打的传统工作模式,所以从流程和团队协作上也就很难快起来……那你们都做了哪些改进啊?”
“我们和你们一样,一开始在开发阶段进行了定位。首先我们发现大家的工作模式并不统一,而且在使用工具上也是各自一套,有些甚至还在本地进行编译构建,然后直接打包上传,这样岂不是毫无章法可言。”周天愤愤地说道,“所以我们的首要目标就是让所有团队,至少大部分团队使用统一的工具平台,然后遵循统一研发流程和研发规范。”
“所以你们先打造了统一的工具平台?”江宇宁问道。
“是的。我们这边团队重复造轮子的现象非常严重,这不仅造成了资源的浪费,而且还让DevSecOps的推广非常迟缓。因此建设统一的工具平台为所有团队提供服务就成了首要任务。然而……”周天画风突转,紧锁眉头。
“然而什么?”江宇宁也突然紧张了起来。
“哈哈,老同学,不要那么紧张。”看着江宇宁的表情,周天忍不住笑了起来,“困难和挑战不一直是我们推动DevSecOps的家常便饭吗!”
“哈哈,好啦好啦,别卖关子啦。赶紧说一下你们面临的问题是什么。”江宇宁继续催促着。
“你好像对我们碰到的问题比我们的成就更感兴趣嘛。”周天继续笑道。
“那肯定了,你们踩过的坑我可不想再踩第二遍。毕竟圣斗士是不会被同样的招数打倒第二次的。嘿,哈,快说快说……”江宇宁双手比划了起来,貌似回到了小时候和周天在看完《圣斗士星矢》漫画后,两人学里面的动作互相打斗时的场景。
“好啦好啦,都30多岁的人了,你怎么还是这么调皮。”周天被江宇宁搞得哭笑不得,“我们后来发现,建设统一工具平台本身并不难,难在如何让团队放弃自己的一套工具栈,而使用你搭建好的统一工具平台。因为,虽然迁移到统一工具平台上让团队本身减少了购买和支持工具的成本,但他们也同时失去了管理员权限,很多工具层面的配置、插件安装等工作都要经过我的团队才能实现,无形之中增加了一个需要等待的流程和环节。”
“的确,任何事情都有它的双面性。”江宇宁补充道。
“是的,我们当时花了很大的精力去说服各个团队,并且通过开发一些工具和脚本,尽量实现迁移自动化,从而最小化团队迁移的成本。其次,当团队开始使用我们的统一工具平台后,我们尽量提供快速反应机制,并且开放了一些权限给团队,给予他们更多的自主权,争取让他们不会认为我的团队或者这套统一工具平台成为他们整个研发流程的瓶颈。”
“的确,如果服务不够好的话,我宁可退回自己搞一套的思路。”江宇宁表示赞同。
“是的,这是人之常情。所以既然我们要让团队做出改变,首先必须要站在他们的角度去思考问题,尽量减少对他们的影响,并且还得让他们看到改变的好处,他们才会愿意配合你进行下去。”周天表情严肃地总结到。
“接下来呢?”江宇宁继续刨根问底。
“哈哈,别急别急。”周天又一次被江宇宁的紧追不舍逗笑了,“当大家使用上统一工具平台之后,我们就开始做一系列改进,包括给团队建立标准化CI流水线以提高流程自动化程度,进行统一的源代码管理,并且给团队推荐适合他们的分支策略,以及使用统一制品库进行制品的统一管理等。通过工具层面的自动化、标准化和统一化,以及相关最佳实践的推广,使得我们在研发侧的交付速度得到了明显的提高。这也就是你看到的我们今天第一步的一些成果。”
“第一步能把工具统一,实现开发流程的标准化和自动化,这个已经相当不容易了!”江宇宁啧啧称赞道。
“但是……”周天看了看夜空中那个残缺的月亮,“我们也有很多没有做到位的地方。”
“哦?原来你是个完美主义者,我还没发现呢。”江宇宁半开玩笑地说道。
“我不是开玩笑。一开始对于DevSecOps落地的计划,我们是根据业务需求来的。你也知道,互联网发展速度很快,竞争非常激烈。所以业务侧对于产品能否快速投放市场的需求很大。因为早一天投放产品到市场上给客户,相比竞品我们就多了一分竞争力,也许可以更早、更多地占有市场。这也是为什么我们把提高交付速度放在了第一位。很多DevSecOps改进方案也是基于优先改进速度。但是,这样也造成了一些潜在的问题……”
“是不是忽略了质量和安全?”江宇宁补充道。
“哈哈,厉害厉害,果然是安全专家。”周天肯定了江宇宁的猜测,“由于团队对于交付速度的偏重,当我们在推动质量和安全相关的最佳实践时,比如代码质量分析、单元测试、代码评审,还有代码安全扫描和第三方安全扫描方面都碰到了很大的阻力。总之,任何影响了速度的改进工作,都被暂时性地忽略了……”
“其实我可以理解这种业务驱动的方式,毕竟任何工作都是以支持业务为优先考虑的。”
……
江宇宁从回忆中回过神来,他用了两秒在心中确认了一下自己的看法,然后把头转向老汪说道:“你说的没错,速度的确是DevOps追求的核心目标之一,也是各大头部互联网公司研发效能的亮点。但是,我觉得我们在有限的资源条件下做出的第一步改进,其方向应该还是得考虑业务需求,而不是盲目地追求互联网的‘速度’。”
江宇宁的一番话似乎也点醒了老汪:“对啊,你说得太对了。我们是银行,哪方面是改进的重点?追求互联网的交付速度是不是真的有意义?这个得根据业务需求来判断。”
“是的。”江宇宁顿了一下,然后发表了自己的观点,“我觉得,对于咱们银行来说,首要是保障系统的稳定性和安全性,毕竟我们的业务不是IT,不是做产品。交付速度的提高会带给我们一定的竞争力,但也许并不是业务最需要的。而且在我们金融行业,试错的成本很高,有些时候可能根本容不得你试错。所以对于敏捷和DevOps强调的实验性地试错,从错误中学习和改进的方式,我们可能无法像互联网公司那样直接拿来用,而是得结合我们的具体场景进行改良才行。”
“还有,对于业务来说,我们是成本中心,如果通过DevSecOps提高了效能和安全性,从而帮助公司减少了成本或者减少了安全泄露的损失,这个也会是业务欢迎和支持的。”老汪接着进行补充。
“是的是的!汪总说得太对了!还是你看到了我们这行的本质!”江宇宁调皮地说道。
“你这家伙,又开始……”面对江宇宁的调侃,老汪似乎早已习惯了。不过刚才的讨论,的确让气氛变得轻松了很多,因为现在江宇宁和老汪的心中已基本确定了DevSecOps转型的第一步是在研发侧。剩下的,就是将他们的想法与IT部门领导还有业务部门做最终确认了。讨论会议结束后,江宇宁的笔记本上,留下了下面几行字:
“质量和安全优先,速度其次”
“安全编码”
“代码评审和质量分析”
“源代码管理和安全”
“安全能力和意识”
“代码和第三方安全扫描”
……
在DevOps时代,工程师们追求如何更快,并且质量更好地把创意变成可供客户体验使用的产品,这一过程与传统的研发安全管控理念有较大冲突,一不留神就会出现安全问题或安全团队成为持续交付的拦路虎,为了解决这一问题,业界推出了DevOps的升级版——以安全的左移(Shift Security Left)为核心理念的DevSecOps。从实践角度来说,DevSecOps在开发阶段主要包括了安全意识和能力提升、安全编码、静态应用程序安全测试、软件成分分析、源代码和制品库安全管理等方面。