写点什么

使用亚马逊云科技 DevOps 工具构建 InnerSource 生态系统

  • 2021 年 12 月 30 日
  • 本文字数:3883 字

    阅读完需:约 13 分钟

使用亚马逊云科技DevOps 工具构建 InnerSource 生态系统

InnerSource 这一术语表示组织采用开源方法(尽管是为了开发专有软件)的新兴实践。本篇文章将讨论如何构建模型 InnerSource 生态系统,以利用多种亚马逊云科技服务(例如 CodeBuildCodeCommitCodePipelineCodeArtifact 和 CodeGuru),以及其他亚马逊云科技服务和开源工具。


什么是 InnerSource?为什么它越来越受欢迎?


大多数软件公司在其产品中都使用开源软件 (OSS),因为它是实现软件标准化并通过重复使用和时间检验的优质代码来提高成本效益的绝佳机制。一些组织可能允许按原样使用它,而另一些组织则会利用审查机制来确保开源软件符合组织的安全、质量等标准。这种对开放源码软件的信心来自于这些社区项目的管理和维持方式,以及它们所培育的开放、协作和创造的文化。


许多构建封闭源代码软件的组织现在都在尝试效仿这些开发原则和实践。人们可能更多的是讨论(而不是采用)这种方法,它通常被称为“InnerSource”。InnerSource 是在组织范围内进行协作式软件开发的绝佳工具,同时保持其对知识产权和合法性检查的关注。它通过知识和人才共享,提供了超越组织孤岛范围的协作和创新途径。组织获得的益处是以很低的成本获得更高的代码质量和更快的上市速度。


InnerSource 生态系统的构成要素是什么?


支持协作的基础设施和流程是 InnerSource 生态的核心。这些系统(参见下图)通常包括支持代码托管、同行评审、拉取请求 (PR) 批准流程、问题跟踪、文档、沟通与协作、持续集成和自动化测试等功能的工具。该系统的另一个主要组成部分是一个入口门户,使员工能够发现 InnerSource 项目并加入社群,从可重用代码的普通用户开始,而后成为贡献者和提交者。


典型的 InnerSource 生态系统


InnerSource 并不像乍看上去那样简单


本篇文章重点详述了为 InnerSource 系统建立所需工具的技术解决方案,主要用于启用开发工作流和基础架构。但是,企业中 InnerSource 计划的秘诀还需要许多其他要素。


InnerSource 角色和使用案例


InnerSource 依靠社群协作和实现可采用性的低进入门槛而兴起。进而它需要进行文化改造。在从战略上决定可以来自内部的项目以及适当的许可模式的同时,企业应该利用能够吸引社群、维护者和第一批贡献者的种子产品来启动该计划。这些用户中有很多最终将通过精英制度被提升为值得信赖的提交者。


在设定的时期内,组织应计划从基础设施特定模型转移到特定于项目的模型。在特定于项目的 InnerSource 模型中,特定软件资产由其他业务部门资助的专门团队负责。而在基于基础设施的 InnerSource 模型中,组织提供了必要的基础设施来创建包含代码和文档存储库、通信工具等的生态系统。这使组织中的任何人都可以创建新的 InnerSource 项目,尽管每个项目发起者都负责维护自己的项目。他们可以首先建立一个实践社群,并指定一个核心团队,为 InnerSource 项目的内部客户提供持续的支持。拥有一支由专门资源组成的团队将清楚地表明组织对维持该倡议的长期承诺。组织应通过定期的新手训练营、培训和认可计划来宣扬这种文化。


最后,在 InnerSource 项目中采用模块化架构的重要性不容低估。这种架构可帮助开发人员更好地理解代码,并有助于代码重用和并行开发,在这种情况下,多个贡献者可以处理不同的代码模块,同时避免代码合并期间的冲突。


使用亚马逊云科技服务的模型 InnerSource 解决方案


本篇文章讨论了一种将各种服务编织在一起以便为 InnerSource 系统创建必要的基础架构的解决方案。尽管它不是一个成熟的解决方案,并且可能缺少组织在自己的系统中可能需要的其他组件,但它可以为您提供良好的开端。


模型解决方案的最终目标是启用如下图所示的开发人员工作流。


InnerSource 的典型开发人员工作流


InnerSource-verse 的核心是分布式版本控制(本例中为 Amazon CodeCommit)。为了保持系统的透明度、开放性和参与性,我们必须有一种可以让用户搜索项目并获得鼓励他们为自己喜欢的项目做出贡献的发现机制(下图中的步骤 1)。


模型 InnerSource 系统的架构图


为此,该模型解决方案利用 InnerSource 门户的开源参考实现。该门户使用爬网程序对来自 Amazon CodeCommit 的数据编制索引,并列出具有相关元数据的可用项目,例如所需的技能、活动分支的数量和平均提交次数。对于 Amazon CodeCommit,您可以使用我们在开源代码库中创建的爬网程序实现,网址为https://github.com/aws-samples/codecommit-crawler-innersource


该门户的主要功能是提供使用“贡献”链接为项目做贡献的选项。这可以显示一个用以“申请为贡献者”(下图中的步骤 2)的弹出窗体,提交后会向项目维护者/提交者发送电子邮件(或创建 TT),后者可以创建具有特定存储库访问权限的  Amazon IAM(下图中的步骤 3)用户。请注意,弹出窗体功能内置于该门户的开源版本中。不过,添加一个包含相关操作(发送电子邮件、开 TT 等)的窗体也非常简单。


InnerSource 门户对 CodeCommit 存储库编制索引并提供鸟瞰图


贡献者在获得访问权限后,登录 Amazon CodeCommit,将 InnerSource 项目的主线分支(上图中的步骤 4)克隆到修复或功能分支中,然后开始更改/添加代码。完成后,贡献者将代码提交到分支并提交 PR(上图中的步骤 5)。拉取请求是一种向现有存储库提供代码的机制,然后在接受纳入之前对其进行同行评审和测试。


PR 会触发 CodeGuru 审核(上图中的步骤 6),以添加对 PR 的评论形式的建议。此外,它还会触发 CodeBuild 进程(上图中的步骤 7 到 10),并将构建结果记录在 PR 中。此时,可以由项目存储库的受信任提交者或所有者对代码进行同行审查。批准数量将取决于 Amazon CodeCommit 中配置的审批模板规则。提交者可以批准 PR(上图中的步骤 12),然后将代码合并到主线分支 - 也就是在他们验证代码符合其用途,通过了所需的测试,并且不会中断构建之后。他们还可以依靠 CodeBuild 流程进行的完整性测试的批准投票。或者,构建过程可以在 PR 合并提交时部署最新的主线代码(上图中的步骤 14)。


为了保持与下游用户和贡献者的进度、错误和功能请求相关的所有通信的透明度,可能需要一个沟通工具。此解决方案未显示与任何开箱即用的问题/错误跟踪工具的集成。但是,这些工具中有多种可从 Amazon Marketplace 获得,其中一些提供论坛和 Wiki 附加组件以引发讨论。标准项目文档可以保存在存储库中,方法是使用 README.md 文件的结构来提供项目任务详细信息,并使用 CONTRIBUTING.md 文件来指导潜在的代码贡献者。


模型解决方案中使用的亚马逊云科技服务概览


模型解决方案使用以下亚马逊云科技服务:

  • Amazon CodeCommit:一种完全托管式源代码控制服务,用于托管安全且高度可扩展的私有 Git 存储库。

  • Amazon CodeBuild:一种完全托管式构建服务,可编译源代码、运行测试并生成可随时部署的软件包。

  • Amazon CodeDeploy:一种自动将代码部署到任何实例的服务,包括 EC2 实例和本地运行的实例。

  • Amazon CodeGuru:一款开发工具,可提供智能建议,以提高代码质量并识别应用程序中成本最高的代码行。

  • Amazon CodePipeline:一种完全托管式持续交付服务,有助于您自动化发布管道,以实现快速可靠的应用程序和基础设施更新。

  • Amazon CodeArtifact:一项完全托管式工件存储库服务,可让您轻松安全地存储、发布和共享软件开发过程中使用的软件包。

  • Amazon S3:一种对象存储服务,可提供行业领先的可扩展性、数据可用性、安全性和性能。

  • Amazon EC2:一项在云中提供安全、可调整大小的计算容量的 Web 服务。它旨在简化开发人员的 Web 规模计算。

  • Amazon EventBridge:一种无服务器事件总线,通过使用从应用程序和 AWS 服务生成的事件来简化大规模事件驱动型应用程序的构建。

  • Amazon Lambda:一种让您在运行代码时无需预置或管理服务器的无服务器计算服务。


千里之行,始于足下

InnerSource 可能并不适合每个组织,但对于那些希望鼓励质量和创新文化以及通过加强协作来清除孤岛的人来说,这是重要的一步。它需要领导层的支持来赞助工程倡议,以及倡导打造开放透明的文化,赋予整个组织的开发人员自主权,以便为团队之外的项目做出贡献。最适合 InnerSource 的组织已经参与了开源计划,拥有熟练使用 CI/CD 工具的工程团队,并愿意采用 OSS 做法。他们应该从小规模开始,然后在取得成功后再接再厉。


结论


越来越多的企业通过建立 InnerSource 来采用开源文化开发专有软件。这灌输了创新、透明度和协作,从而实现了具有成本效益的高质量软件开发。本博客讨论了在 InnerSource 生态系统中构建开发人员工作流(从项目发现到 PR 批准和部署)的模型解决方案。其他功能(例如集成的问题跟踪器、实时聊天和 Wiki/论坛)可以进一步丰富此解决方案。

如果您需要帮助,亚马逊云科技专业服务可以帮助您在企业中调整和实施此模型 InnerSource 解决方案。此外,我们的咨询服务可以帮助建立治理模型,通过基于体验的加速 (EBA) 方加快 OSS 文化的推广。


本篇作者

Debashish Chakrabarty

亚马逊云科技专业服务的高级互动经理

负责管理有关 DevOps、安全性和现代化的复杂项目,并帮助 ProServe 客户加快对亚马逊云科技服务的采用。他喜欢在自己的技术领域苦苦钻研。除工作之外,Debashish 还是印地语播主和博主。他还是 Amazon Prime 的超级粉丝,并喜欢与家人共度时光。

Akash Verma

亚马逊云科技专业服务的云顾问

喜欢学习新技术,通过使用亚马逊云科技产品和服务提供解决方案来帮助客户解决复杂的技术问题并推动业务成果。在工作之余,Akash 喜欢旅行,与新朋友互动以及品味不同的美食。他还喜欢园艺,看单口喜剧和听诗。


🔔 上周抽奖活动的中奖名单来啦

恭喜以下小伙伴们!

请大家速速填写好收货信息

亚马逊小亚已经迫不及待想要与你们见面啦




用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
使用亚马逊云科技DevOps 工具构建 InnerSource 生态系统