五分之四
作者:Dan Cohn, 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司实验室
通常情况是怎样的?
作为终端用户或客户支持工程师, 没有什么比听到一个开发者说, “但它在我的机器上运行.这句话经常出现在桌面应用程序的上下文中,令人难以置信的是,它并不是 working as advertised despite running perfectly on the developer’s own machine. 毕竟,代码执行是确定的,对吧? 用户一定是做错了什么. 也许是硬件或操作系统的问题.
具有讽刺意味的是, 软件开发人员也经常听到“它能在我的机器上工作”之类的话, 通常当他们第一次加入一家公司或一个新团队时. 想象一下这是怎么发生的:一个新员工加入, 熟悉门道, 渴望成为团队中有贡献的一员. 带着笔记本电脑和, 如果幸运的, 内部wiki链接的百科全书, 文档, 和入门指南, 他们开始处理他们的第一个用户故事或软件缺陷. 那就是麻烦开始的时候. 现有的代码无法编译. 或者它最终编译了,但应用程序不会启动. 然而,不知何故,它似乎对团队中的其他人都很有效.
我跳过了下载的入门先决条件, 安装, 以及配置各种工具和应用程序, 可能有几十个. 在花了很多时间为编码和测试建立一个“本地环境”之后, 结果发现什么都没用, 会让人非常沮丧. 而不是调试自己的代码, 新开发人员发现自己在调试开发环境. 新员工会想:“我是不是错过了一步? 忘记安装什么? 也许我下载了一个错误的工具版本. 文件过期了吗? 这应该不难……”
还有一种情况是,澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司勇敢的新手认为一切都很好,并提交了在他们的系统上工作的代码,但不知何故无法构建或, 更糟的是, 在集成环境中的行为不同. 这样就开始了故障排除过程, 这不仅消耗了新员工的时间,而且往往也消耗了最有经验的团队成员的时间.
澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司怎样才能避免这些困难呢? 答案似乎很简单:构建一个共同的开发环境, 理想情况下,它可以支持多个团队甚至整个公司. 有几种“传统”方法可以做到这一点:
- 在笔记本电脑上创建一个工作环境,并拍一张照片.
- 构建一个预先安装所有内容的虚拟机(VM)映像.
- 编写一个加载和配置环境的“安装”脚本.
它们的问题在于它们是固定的. 当您需要升级工具或在环境中引入新内容时会发生什么? 如何在不干扰所有开发人员工作的情况下向他们推出更新?
冷静点,码头来救你了!
澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司在码头工人镜像中找到了一个很好的替代方案. 码头工人 用可移植的软件包交付软件的工具叫做容器吗. 它已经存在了10年,它的优点是在一个称为注册中心的集中存储库中维护版本控制的映像. 容器图像由层组成, 使得添加或替换图层成为可能,而无需在需要更新时重新构建整个图像. 在发布新版本的开发环境之后, 用户只下载新的图层, 哪个比整个图像小得多. 码头工人还可以一次下载(或“拉取”)多个层, 哪一种通常能更好地利用网络带宽,并在更短的时间内完成下载.
与虚拟桌面或虚拟机不同,下载新版本后不需要“重新启动”. 启动一个新的容器相对较快,因为它利用了已经启动并运行的操作系统内核. 容器具有几乎可以在任何地方运行的优势, 包括物理机器, 虚拟机, 云环境. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司的开发人员混合使用了Windows和Mac笔记本电脑,以及Linux虚拟机和一些基于云的虚拟桌面. 容器化环境的美妙之处在于它在每个系统上的行为(在大多数情况下)都是相同的.
当我在赞美基于容器的开发的优点时, 我再加一个, 这一点很重要:持续集成(CI)系统可以很容易地使用相同的容器映像来执行构建和执行测试. 这意味着“本地”构建的代码几乎可以保证在CI环境中正确构建(假设两者使用相同的版本)。. 生成的可执行文件也应该表现一致.
和虚拟机一样, 容器的另一个好处是它们与主机是隔离的. 你在容器内做的任何事情都不能“砖头”你的笔记本电脑. 如果某件事发生了可怕的错误(就像它经常发生的那样), 您只需重新启动环境. 如果需要,您甚至可以回滚到以前的版本.
澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司是如何运作的
如果你读过本系列之前的文章,你就会知道澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司有一个 Git-based monorepo 和使用 巴泽尔是一个通用的构建工具. 总体主题是一致性和可用性,以获得一流的开发人员体验,目标是提高工程生产力. 一个“包含电池”的标准开发人员环境使澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司能够实现这一目标. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司称之为军刀工程环境,简称S2E.
S2E是基于linux的,除了集成开发环境(IDE)之外,它预先配置了所有东西。. (稍后我将讨论缺失的IDE.)澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司为开发人员提供了一个安装向导,引导他们完成下载环境和任何先决条件的步骤(特别是, 码头工人桌面(Mac或Windows). 这些安装好之后, 它们运行一个命令行工具,在终端窗口中启动环境. 部分文件系统在S2E和桌面之间共享. 例如, 两个地方都有源文件, 因此它们可以被Visual Studio Code等桌面工具编辑.
澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司有一个内部容器注册表,其中包含8+ GB的S2E映像. “sabre2”单变量包含 码头工人file 以及创建映像所需的其他文件(就像澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司维护的任何其他源代码一样). 每当发生更改时,自动CI流程就会构建并验证映像. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司大约每周发布一个新版本.
分层
澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司面临的一个有趣的挑战是如何将更新对容器映像的影响最小化. 这是什么意思呢? 好吧,假设澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司想要添加一个新工具,比如“gcloud”,用于与Google Cloud服务进行接口. 如果澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司把它添加到码头工人file的开头, 它将导致所有后续层被重建, 导致巨大的下载. 如果澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司把它添加到码头工人file的末尾, 初始版本将是可管理的, 但是,每当有影响前一层的变化时,新层将被重建, 比如更新澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司的一个内部工具. 因为Google Cloud SDK相当大, 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司不希望在环境的每个版本中嵌入一个新的副本. 这意味着澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司可能希望将它安装在码头工人file的中间位置.
升级现有的工具怎么样? 如果安装步骤在码头工人file的早期,那么更新将非常大. 也许澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司可以在文件后面添加一个步骤来重新安装工具(覆盖旧版本)。, 但这将增加图像的整体尺寸,并可能在以后的道路上造成困难. 另一个选择是一起批量升级- 一次更新多个工具-这样澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司只偶尔付出代价(希望不是那么频繁)。.
没有完美的答案,因为澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司无法预测未来. 然而, 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司可以建立一些经验法则:大型和/或不经常更新的工具应该靠近码头工人file的顶部. 经常更改的工具或文件应该靠近底部,除非它们相对较大, 在这种情况下,他们更接近中间.
挑战
不幸的是, 码头工人不利于像ide(集成开发环境)这样的图形化工具。. 可以在容器中运行基于gui的应用程序, 但它很麻烦,需要Linux机器或虚拟机. 出于这个原因,澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司要求开发人员在S2E之外安装ide. 这样做的好处是,开发人员可以选择自己喜欢的ide或编辑器. 他们可以在桌面上编辑文件,然后在容器内执行构建和git提交. 这是通过卷挂载某些目录实现的, 因此它们在主机和码头工人环境之间共享. 这种方法的一个缺点是IDE的一些特性是不可用的,除非您安装额外的工具, 比如编译器和sdk, 在主机系统上. 这在某种程度上违背了自包含开发环境的目的, 但是作为一个实际问题, 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司认为这是一个很好的妥协.
避免在主机系统上安装更多工具的一种方法是将IDE的图形化“前端”或“瘦客户机”连接到在容器内运行的后端. 例如,Visual Studio Code通过其 远程开发 功能.
您可能会认为性能是另一个挑战. 事实证明,现代虚拟化的性能是合理的. 在非linux系统上, 虽然, 你必须适当地配置码头工人 Desktop, 所以它有足够的内存和CPU来完成它的工作, 特别是在使用它来构建和运行应用程序时. 此外,在操作系统之间共享文件是有成本的. 需要进行一些调优,以确保正确配置具有高I/O活动的卷(如构建缓存). 尤其是在mac电脑上, 将源代码目录配置为“缓存”是很有帮助的,这样码头工人就可以针对基于容器的读取和基于主机的写入对它们进行优化. 在Windows上, 如果要从Windows Subsystem for Linux (WSL)启动容器,你必须启用码头工人的WSL 2引擎。. 当使用Git Bash或其他基于windows的终端时,必须禁用它.
旁注:在Linux容器中工作不利于桌面应用程序的开发.g.,适用于Windows或Mac应用程序). 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司在澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司有一些这样的应用. 目前,他们使用现有的平台和工具,而不是采用基于容器的开发.
另一个挑战是我所说的“厨房水槽问题”. 开发人员通常有他们自己喜欢的工具, 和, 当然, 一个项目的需求可能与另一个不同. 把所有可能的编译器都塞满是不现实的, SDK, 壳牌, 并将电动工具变成人人共享的公共平台. 它会造成一个巨大而笨拙的形象. 此外, 给开发者提供如此多的选择将降低一致性并增加平台支持成本.
澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司的方法一直是尊重对具有广泛适用性或占用空间小的工具的要求,并推迟对其他工具的要求. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司还简化了在启动时加载附加工具或自定义的过程. 结果是, 这个平台相对来说是可管理的, 尽管澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司已经包含了相当多的功能(超过100个工具).
未来会怎样?
尽管面临挑战, 基于容器的开发使澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司能够以更快的速度进行操作,并专注于为客户构建高质量的软件. 通过澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司内部开发者社区的贡献, 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司继续为每个使用环境的人增加价值. 当你拥有一个共同的平台和每周发布的节奏时,这很容易实现.
尽管如此,澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司正在超越容器,并创建基于的下一代环境 女水妖 和女水妖包管理器. 女水妖是一个专门用于生成一致性的工具, 用于构建和部署的可靠系统. 事实证明,它既是澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司今天所拥有的一种替代,也是一种补充.
在对容器的优点赞不绝口之后,你可能想知道为什么澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司要朝着一个新的方向发展. 主要原因很简单,就是追求一流的开发者体验. 女水妖使澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司能够在虚拟机上运行环境,而无需承担容器的小而重要的开销. 尽管容器是便携式的, 不同主机操作系统之间存在配置和性能差异, 主要是由于文件共享.
当开发者开始接收基于“苹果芯片”(带有ARM64处理器架构)的macbook时,澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司遇到了严重的问题。. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司的映像是基于Intel x86的,不能很好地与新的硬件和“qemu”仿真层配合使用. 这是澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司探索其他选择的巨大动力. 幸运的是,码头工人最近补充道 罗塞塔2支持 在苹果发布MacOS 13之后. 这似乎在很大程度上消除了澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司在M1和M2笔记本电脑上运行环境的困难.
使用女水妖,澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司可以更容易地添加、删除和升级单个软件包. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司不再需要担心图层无效和产生大量的图像下载. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司可以在容器中安装女水妖,并在将基于docker的用户转换为虚拟机时继续支持他们. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司也可以继续在基于kubernetes的构建系统中使用容器.
说到构建系统,这是澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司本系列下一篇也是最后一篇文章的主题. 澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司将把所有的部分放在一起- Git, monorepos, 巴泽尔, 和容器—— ,看看澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司是如何构建一个支持数百个用户和微服务的集中式CI系统的.
请阅读本系列的其余部分:
-
Article
2022年11月17日
更快地交付软件- 巴泽尔是monorepos的最佳构建工具吗?
3 / 5作者:Dan Cohn, 在monorepo中开发软件的主要原因之一是便于重用- 不仅是源代码重用,而且是社区使用…
-
Article
2022年8月31日
更快地交付软件: 如何让Git与单线程一起工作
5集之2作者:Dan Cohn, 这个系列的第一篇文章讲述了澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司在澳门十大电子游戏app下载-v.2.3-澳门十大电子游戏有限公司是如何开始多年的努力来提高整个公司软件开发人员的效率和士气的。.