一、背景
在现今的社会中,每个公司都是软件公司,无论是通过台式机、云服务还是移动设备,软件都已成为世界各地、各个公司日常工作的工具。例如,汽车是带轮子的计算机,空调是数据终端,而银行在手机中提供服务,等等。
在这个新的世界中,软件更新可以满足客户的需求。每一个交付都是您更新,或破坏,与客户间信任的机会。如何才能保证您的每个更新都以最快的速度提供一流的服务?
这就是为什么DevOps对您的公司很重要。当您加快高质量软件的交付速度时,客户会大呼过瘾,并且您可以对市场需求的变化迅速做出反应。DevOps通过减少在测试、评估和发布等各阶段之间,以及与相关干系人之间的摩擦,来加快高质量软件的交付速度。识别并解决这个过程中的痛点可以推进DevOps的成功建设。
良好的制品仓库可以促进软件在DevOps流程中的运转。它存储了过程中所有的二进制制品(artifacts,也称为工件),同时也保留了有关它们的信息,从而减少了不确定性,并使自动化工具能够自由、快速地运行。
在加速软件交付的过程中通常会遇到下述的六大障碍,而良好的制品仓库可以帮助解决它们,以实现从代码到客户的快速、持续的软件更新与发布。
二、障碍一,您了解您所有的构建吗?
您的开发人员团队每天都可以生成许多构建,而您能全部跟踪和掌握所有的构建吗?
如果没有全面的解决方案,那您可能会知道哪个版本是最新的,但却无法确认哪个版本才是最好的。您也无法可靠地追溯构建的历史,并掌握组成该交付版本的各个部分都是来自何处。
当构建失败时,您能够识别并回退有问题的部分吗?您如何才能查明哪些构建存在问题,以及问题出现在构建过程中哪个位置,以便您或开发人员可以快速提供修复。
解决方案:通用记录系统
为您所有的构建建造一个制品中心,作为所有在DevOps流水线中运转的制品的唯一真实来源。在中心的仓库中管理和版本化所有构建的产出,意味着您可以轻松找到功能最佳、最新的构建。
制品仓库能够跟踪制品使用的位置,及其先前的所有版本,从而提供了丰富的数据,来帮助您追溯所有构建的来源及其祖先。您可以快速查看一个版本与另一个版本之间的差异,了解每个版本的制作方式,并找到可帮助您修复错误版本的参考。
三、障碍二,您的过程中有人工操作吗?
在DevOps过程中,每个需要人工介入的地方都会带来风险。例如,人工的检验会增加延迟,生产环境的重复构建会带来不确定性,必须手动更改、维护和执行的用于工具管理或构建部署的脚本会浪费时间,而且容易出错。这些成本昂贵的过程,任何一个都会减慢正确的软件版本发布到最终用户的速度。
解决方案:自动化和流程管理
如上一部分所讲,保管您所有构建和制品的中央制品仓库为构建管理提供了便利。但如果同时它也可以收集有关制品的信息,这将赋予您更多的能力。您对制品的了解越多,就越能实现更好的自动化,并使您的构建工具能够做出明智的决策,从而统一并加速整个部署过程中的软件交付。
您的制品仓库应该能够为您的构建工具提供丰富的、灵活的查询和命令接口,以便它们可以不在您的干预下自动完成工作。如果它使用标准的、平台无关的访问机制,如REST API,则您可以任意选择最适合您的CI服务器。
一旦您能够实现DevOps流程的自动化,就可以更好地确保发布到生产中的每个版本都遵循相同的流程,并且符合通用标准。
四、障碍三,您规范管理了所有的构建依赖吗?
现在的软件应用开发的特点,一是多语言并存,二是架构在公共框架、公共库的基础之上。从而开发人员在构建过程中为这多钟开发语言和技术都拉取了大量的外部依赖,而每种语言和技术对于依赖的管理都有其自己的要求和接口。您将如何管理它们?
这些外部资源可以随时更改,并且对其质量的控制和管理程度参差不齐,有的根本就没有保证。您如何确定每个版本中的用到了哪些依赖?如何可靠地复用其中的某个依赖?如何检测悄然发生的有害更新?
而且,您的构建过程不可能跑得比访问这些远程资源的链接快,繁重的网络负载会减慢构建速度,而访问的中断会导致您原来可靠的构建失败。
解决方案:依赖管理
使用本地制品仓库来代理存储外部依赖的远程资源,进而将所有外部依赖纳入统一管理。借助制品仓库对这些外部依赖的本地缓存,可以保证始终以所需的版本、最快的速度来完成构建。
更好的是,一旦您的制品仓库掌握了这些外部依赖,它就可以像其他制品一样,为这些外部依赖保存和维护相同的信息。通过跟踪依赖的历史记录和使用过程,就能始终确认每个构建中都采用了哪个版本的依赖项。
五、障碍四,您是如何在DevOps流程中传递交付版本的?
许多DevOps流程中,在测试、验证和发布的每个阶段,都需要基于全部或部分源代码进行重新构建。这就导致每个新版本都需要花费更多的时间,并且可能需要每个干系人进行手动评估和触发。更糟的是,随着开发人员持续地更改共享代码,每次重新构建都会带来不确定性,不得不在每个阶段重复相同的质量检查。
一旦某个构建通过了当前检查,您如何将其实际推进到下一阶段?手动将该构建推送到下一阶段的过程很容易出错。而且,您还需要一种在整个DevOps过程中向整个团队传达该构建状态的方法。
解决方案:元数据和升级管理
如障碍二的解决方案中所述,本地制品仓库不仅管理了所有构建及其制品,还管理了制品相关的信息,也可称为制品的元数据。这些元数据可以帮助您对该制品的质量进行检验,来源进行跟踪。
在DevOps流程中,各个阶段之间交付版本的推进,推荐的最佳实践是避免重复构建,而是采用制品升级的方式。也就是说,在前一个阶段完成质量检查后,制品带着其元数据,一起升级到下一个阶段。下一个阶段首先根据元数据对该制品进行质量检查和评测,确认达到质量标准再开始本阶段的工作。
升级的方式,使得每个阶段都直接基于制品开展工作,避免重复构建,在提升效率的同时,也降低了不确定性的风险。同时,针对元数据的检测,既保证了制品在各个阶段的一致性,避免篡改,又有助于提升质量检测的自动化程度,减少人工的介入,提高效率的同时,也降低了出错风险。
六、障碍五,您是如何满足客户不断增长的需求的?
为了满足客户日益增长的需求,您需要今天多做,明天做得更多。这会加重许多业务团队的负担,进而可能会减慢整个开发流程。
而基础架构中的任何单点故障都可能是灾难性的。地理位置分散的团队需要始终能够以相同的速度获得相同的资源,任何业务更新或容量升级造成的服务中断都会浪费大量的生产时间。
解决方案:企业级支持
企业级支持的解决方案可提供适应您的规模及成长的能力和灵活性。
可以在云平台中工作的制品仓库可以帮助您无限地扩展存储和计算的成本。您的制品仓库可以使用的云供应商越多,您获得的控制权就越大。SaaS订阅选项可确保您的资源始终可用并且是最新的。
高可用、多活的集群配置可以确保高负载下制品仓库的响应能力。其冗余还为灾难恢复提供了容错支持,并实现了零宕机的升级和维护。
支持多站点复制同步的制品仓库可以为跨地域的分布式团队提供全球范围内DevOps过程中资源、信息的快速分享。
七、障碍六,您适应变更的成本有多高?
响应所有的客户意味着在多个运行系统中使用多种语言进行开发。某个部门可能用Go为云平台编写代码,而另一个部门则可能用Java为移动设备编写代码。但是每种语言和技术都有其自己的要求和支持的工具。
您将为DevOps使用哪种基础架构?现在,在您自己的数据中心中安全运行可能是最有意义的。而未来,您可能需要云平台的灵活性,或者将它们结合起来以获得各自的优势。您将可以自由选择最适合您需求的供应商,并在需求变化时灵活地进行更改。
解决方案:混合云的解决方案
支持混合云架构的制品仓库可以帮助您的交付过程自动化,无论您使用的是哪种语言或运行于何种平台。通过REST API进行访问,可以方便、灵活地与您已经在使用的工具进行对接。
作为DevOps系统的核心,您的制品仓库在云平台中的功能必须与在本地自己的服务器上的性能相同。在任何环境间都能够轻松地升级构建、推进交付的解决方案可以有效地帮助您在功能强大的混合云中实现DevOps。对所有主要提供商(例如AWS、Google Cloud、Azure、阿里云等)的集成支持,可以帮助您实现避免供应商绑定的多云策略。
您也应该能够自主地选择付款方式。您需要的解决方案应该是,无论您选择固定的许可费用还是灵活的SaaS订阅,都能够帮助您自由地构建现在和将来使用的系统。
五、总结
功能齐全的制品仓库将帮助您实现自动化的软件交付流程,并支持您采用新的工作方式。它可以为您提供对流程的控制和洞察力,从而可以解决出现的问题并不断改进您的方法。经过稳健的设计后,您的制品仓库可以灵活地适应企业的特殊需求。
同样重要的是,您需要一个可以在您的DevOps建设过程中成为良好合作伙伴的解决方案提供商。他们应该了解不同的方法和行业趋势。
JFrog的Artifactory制品仓库是端到端DevOps平台的核心,用于自动化管理、保护、分发和监视所有类型的制品。Artifactory得到了近6000家客户的信任,其中包括了世界500强中93%的客户。亚马逊、Facebook、谷歌、华为、VMware等世界顶级品牌都依靠JFrog来管理其制品,推进其DevOps进程。
希望Artifactory同样能够帮助您解决上述的六大障碍,成功建设DevOps体系,实现高质量、快速、持续的软件发布流程。