开发人员编码环境

已完成

在平台工程中,一个常见的挑战是确保开发人员可以快速且一致地设置其编码环境,尤其是在新开发人员加入团队、开发人员在项目之间切换或需要扩展时。 自动设置开发人员环境可以简化载入过程,并消除因配置不当或依赖项损坏而丢失的时间。 通过提供预配置的环境或设置脚本,团队可以专注于开发,而不是浪费时间来排查环境不一致问题。

管理开发人员环境的方法可能会有所不同,但通常包括与组织需求相符的虚拟化、容器化和标准化模板。 这包括完全虚拟化的 Windows 环境以及适用于 Linux 开发的云托管容器。 此外,创建促进一致性、最佳做法和安全性即代码的“开始正确”模板对于维护跨团队扩展的明确、可重复的过程至关重要。 这可确保开发工作流不仅顺利启动,而且继续遵循最佳做法,使项目保持正常状态并符合安全性和运营标准。

自动设置开发人员编码环境

开发人员编码环境引导和规范化可能是工程系统中的主要挑战。 关键问题包括:

  • 载入时间长:新开发人员需要数周时间才能参与,尤其是在项目之间转移开发人员或引进承包商时。
  • 不一致:开发人员环境和 CI 系统之间的差异通常会导致“在我的计算机上一切正常”问题。
  • 环境不稳定:试验或升级框架和软件可能会中断现有配置,从而导致可能冗长且复杂的故障排除。
  • 代码评审延迟:代码评审所需的配置更改可能会降低开发速度,因为稍后需要撤消这些更改。
  • 所有利益干系人事项增加:非开发角色(如运营商、QA 和商业赞助商)也需要接受培训并参与进来,从而导致更多的延迟。

为了解决这些问题,通过工具、脚本或容器化/虚拟化环境以标准化和自动化开发人员环境的设置可以帮助做到这一点。 根据特定项目或组织需求定制的预配置环境可以确保一致性、减少设置时间并提高整体工作效率。

适用于 Windows 和 Linux 的编码环境

针对 Windows 进行工作站更换或完全虚拟化时,虚拟机 (VM) 通常会提供最佳功能。 此方法有利于 Windows 客户端开发、管理 .NET 完整框架 Web 应用程序或维护 Windows 服务。 你可以使用云托管的 VM(如 Microsoft Dev Box),它提供与桌面管理软件集成的完整的 Windows 工作站虚拟化。 或者,可以使用本地 VM 与 HashiCorp Vagrant 等工具来管理环境,还可以使用 HashiCorp Packer 为 Vagrant 和 Dev Box 生成 VM 映像。

对于面向 Linux,工作区虚拟化更适合,它侧重于特定于项目的环境或特定于应用程序的环境,而不是替换完整的桌面。 云托管容器是一个常见的选择,包括 GitHub Codespaces 等选项,它提供与 VS Code、JetBrains IntelliJ 和基于终端的工具兼容的基于云的开发容器环境。 如果云选项不满足你的需求,VS Code 的 SSH 或远程隧道支持连接到自承载 Linux VM。 此外,如果希望在本地运行开发容器,则本地容器是一个选项。 VS Code 和 IntelliJ 为这些环境提供可靠的支持。 为提高灵活性,你还可以使用云托管的 VM,以在其中直接通过 SSH 连接到自托管 Linux VM。 如果开发人员专用于 Windows,则适用于 Linux 的 Windows 子系统提供了一个方便的本地 Linux 开发解决方案。 可以跨团队导出和共享 WSL 分发。 基于云的服务(如 Microsoft Dev Box)还支持 WSL 进行 Linux 开发。

使用应用程序模板实现一致性和标准化

为了促进整个开发团队的一致性、标准化和最佳做法,组织可以使用应用程序模板作为“一切即代码”方法的一部分。 这些模板可以简化开发,确保团队保持在已建立的规范路径上。 对于采用 monorepo 模式的组织,可以使用 Azure Developer CLI (azd) 之类的工具创建模板,这些模板不仅包括应用程序源设置,还包括环境配置和 CI/CD 工作流。

创建用于开发的模板时,应考虑各种关键领域以确保模板全面且一致,并遵循最佳做法:

  • 示例源代码:包括示例源代码,指导开发人员使用推荐的语言、应用程序模型、服务、API、SDK 和体系结构模式。
  • 生成和部署脚本:合并脚本,提供一致的方法来触发生成并在本地或沙盒环境中部署。 确保包含 IDE 内或编辑器调试配置,以便与 CI/CD 管道同步。
  • CI/CD 配置:提供用于生成和部署应用程序的工作流或管道,从而利用可重用的集中式工作流。 将这些模板视为“立即开始”模板,并确保它们允许在需要时进行手动触发。
  • 基础结构即代码 (IaC) 资产:包括建议的配置和对集中管理的模块的引用,以确保基础结构设置遵循最佳做法。
  • 安全性即代码和策略即代码资产:添加与安全性相关的配置文件(如 CODEOWNERS 和 dependabot.yaml),以将安全性直接纳入开发过程。 应提供用于安全扫描的计划工作流(包括 Microsoft Defender for Cloud 等工具)以在 CI/CD 管道中嵌入安全性,并增强供应链安全性。
  • 可观测性、监视和日志记录:为监视工具提供设置配置,例如用于代理部署的 IaC 或用于监视仪表板的配置即代码。 包括用于日志记录和分布式跟踪的示例代码,以确保部署后可以有效地监视应用程序。
  • 编码环境设置:为 linters、格式化程序和 IDE 添加配置文件,并为虚拟化开发环境(如 devcontainer.json、devbox.yaml 或 Docker 相关文件)设置脚本。
  • 测试配置:使用 Microsoft Playwright Testing 或 Azure 负载测试等工具提供用于单元测试和更广泛的测试方案的文件。

协作工具设置:如果受支持,请包含任务/问题模板或 PR 模板作为代码。 或者,你也可以选择提供使用可用的 CLI 或 API 来更新系统或配置协作工具(如 Microsoft Teams 或 Slack)的工作流。