原文出自Hackernoon
作者:CodeClimate
京东智联云开发者社区编译
如果开发人员的变更集在集成时并没有实现长期部署就绪的状态,那么你的团队其实就没有真正的实践持续交付。 想要完全优化产品开发周期,你需要在团队中强调无缝部署的重要性,使每位工程师都对主要生产线负责,使主要生产线保持在可发布状态。 真正的持续交付中很多团队大概率都会遇到的以下三类阻碍: 在整个开发过程中采用自动化测试(而不仅仅是在最后一步)。虽然在哪里测试以及测试对象取决于各种各样的因素,但将测试尽早融入到开发过程中,能够有效防止在开发者投入大量工作之前及时发现问题。 不要过度测试。过度测试可能会导致过长的构建时间,并且会制造出自动化瓶颈。我们建议你应确保测试的范围充分,这样一来如果系统在半夜里出了故障,你们也无需叫醒工程师来处理。 使用特性切换和灰度发布。如果系统中存在尚未解决的部署风险,请使用特性切换在内部或对少量客户群样本进行更改。如想进一步了解相关研究,请查看Launch Darkly关于有效特性管理的完整版电子书。 让项目整体风险减低——如果测试基础架构是可靠的(下面有更多关于这一点的内容),并且开发人员也同意该基础结构的可靠性,那么即便在程序发布后有需要更改也变得更加轻松。 对单个开发人员的影响更大——当开发人员有权参与到产品生产中时,他们会感到对工作拥有更多的所有权。由于对速度的期望,持续交付使自上而下的计划周期变得更加精细,并使开发人员能够做出更多与功能实现相关的选择。 团队间抱怨与指责会减少—— 因为对某个功能的所有权不会单独集中在一个人身上,所以软件开发过程变得更加需要团队成员彼此之间的协作。当开发人员决定将他们的更改发布到产品中时,功能的“分布式”所有权会消除掉一部分由于功能更改上线带来的焦虑和潜在可能出现的“责备”。 在小而离散的变化中工作——当开发人员确定“Pull请求”时,他们应该思考“我可以为实现此功能而采取的最轻巧且有价值的步骤是什么?”当他们确定范围并构建了“Pull请求”后,应将其部署到生产环境中。他们应该避免长时间运行功能分支。 始终优先考虑最接近完成的工作—— 让开发人员尽可能地减少进行中的工作。如果你在使用看板图,则意味着你要对最接近完成的项目进行优先排序。如果你的团队想把安全性全程融入到软件交付的过程中,你应考虑如下操作:
让团队中的安全专家参与软件规划和设计过程。每当处理特别敏感数据的功能在持续交付流程中减弱时,请在计划和设计过程中让你的安全团队参与进流程中来。这样,在你的团队构建功能时,安全注意事项就融入了整个流程并成为团队的首要考虑因素。自动源代码扫描(SAST):由于80%的攻击针对应用程序层,SAST一直是确保应用程序安全的最佳方法之一。自动化的SAST工具可检测所有最具威胁性的应用程序风险,例如身份验证失败,敏感数据暴露和配置错误。自动化动态测试(DAST):通常被称为黑盒测试,这些测试试图从外部渗透应用程序。任何DAST工具都会帮助发现两个最常见的风险 -- SQL注入攻击(SQLi)和跨站脚本攻击(XSS)。
依赖于常见漏洞(CVE)的自动测试:CVE是由网络安全局和基础结构安全局维护的代码字典,你可以把CVE作为参考,以确保你的自动测试涵盖了足够的范围。为团队构建安全且可重用的基础架构。在实现了上面的几项操作之后,你的安全团队可以运用他们的专业知识,以模块或原语的形式为团队创建工具。这样一来,未经过安全培训的开发人员也能够编写出默认为安全的系统。
安全团队的工作不能完全由机器代替,例如渗透测试。但是,如果你将安全性纳入整个开发流程中,人为工作便不会在开发流程的最后阶段成为瓶颈,导致功能无法推向客户。
02
克服操作过程中的障碍
| 建立持续交付的组织一致性|
| 为你的团队提供最佳实践的变革 |
03
克服技术工具相关障碍
| 优化你的工具 |
1、你的软件版本很不稳定
2、你的软件版本速度非常缓慢
1、你的监测不彻底
2、你的检测结果没有得到很好的调整04
软件交付的“圣杯”