你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

创建可重复利用的开发箱自定义

Microsoft Dev Box 自定义是自定义开发箱的配置即代码方法。 在本文中,你将了解如何通过使用任务目录和配置文件安装软件、添加扩展、克隆存储库等来自定义开发箱。 这些任务将在创建过程的最后阶段应用于新的开发箱。 无需创建自定义虚拟机 (VM) 映像即可添加设置和软件。

自定义项对开发团队非常有用。 开发人员团队主管可以使用自定义来预配置特定开发团队所需的软件,并创作仅应用与团队相关的任务的配置文件。 使用此方法,开发人员可以创建最适合其工作的开发箱,而无需要求 IT 人员进行更改或等待工程团队创建自定义 VM 映像。

通过使用自定义项,可以自动执行常见的设置步骤、节省时间并减少配置错误的可能性。 一些示例任务包括:

  • 使用 WinGet 包管理器安装软件。
  • 设置 OS 设置,例如启用 Windows 功能。
  • 配置应用程序,例如安装 Visual Studio 扩展。

你可以分阶段采用自定义,从简单但实用的配置到自动化过程进行构建。 这些阶段包括:

  1. 使用示例配置文件创建自定义开发箱
  2. 编写配置文件
  3. 从代码存储库共享配置文件
  4. 在目录中定义新任务
  5. 使用 Azure Key Vault 中的机密

重要

Microsoft Dev Box 中的自定义功能目前为预览版。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

先决条件

为自定义功能配置 Microsoft Dev Box 所需的权限

若要执行创建开发箱并应用自定义功能所需的操作,需要拥有特定权限。 下表描述了配置自定义所需的操作和权限或所需的角色。

操作 权限/角色
将目录附加到开发人员中心 具有开发人员中心参与者权限的平台工程师。
在开发箱创建过程中,使用开发人员门户上传和应用 yaml 文件 开发箱用户
创建配置文件 任何人都可以创建配置文件。
将任务添加到目录 添加到托管目录的存储库的权限。

使用示例配置文件创建自定义开发箱

使用默认快速入门目录和示例配置文件开始使用自定义功能。

附加快速入门目录

将包含自定义任务的目录附加到开发人员中心意味着你可以在该中心创建一个开发箱,并引用该目录中的自定义任务。 Microsoft 在 GitHub 上提供了一个示例存储库,其中包含一组标准的默认任务,可帮助你入门,称为“快速入门目录”。

若要将快速入门目录附加到开发人员中心,请执行以下操作:

  1. 登录到 Microsoft Dev Box 开发人员门户

  2. 在左侧菜单中的“环境配置”下选择“目录”,然后选择“添加”。

  3. 在“添加目录”中,选择“开发箱自定义任务”作为快速入门目录。 然后选择“添加”。

  4. 在开发人员中心选择“目录”,并验证目录是否显示。

    Azure 门户的屏幕截图,显示了“添加目录”窗格,其中突出显示了 Microsoft 的快速入门目录和开发箱自定义任务。

    如果连接成功,则“状态”将显示为“同步成功”。

创建自定义开发箱

现在,你有一个目录,它定义了你的开发人员可以使用的任务。 你可以从配置文件引用这些任务并创建自定义开发箱。

  1. 从示例存储库下载示例 yaml 配置。 此示例配置会安装 Visual Studio Code,并将 OrchardCore .NET Web 应用存储库克隆到开发箱。

  2. 登录到 Microsoft Dev Box 开发人员门户

  3. 选择“新建”>“开发箱”。

  4. 在“添加开发箱”中,输入以下值,然后选择“继续”:

    设置
    名称 输入开发箱的名称。 开发箱名称在项目中必须是唯一的。
    Project 从下拉列表中选择一个位置。
    开发箱池 从下拉列表中选择一个池,该列表包括该项目的所有开发箱池。 选择附近的开发箱池,以获得最低延迟。
    应用自定义项 选择“应用自定义项”。

    显示开发人员门户中开发箱自定义选项的屏幕截图,其中突出显示了“上传自定义文件”。

  5. 在“自定义开发箱”页上,选择“上传自定义文件”,然后选择“从文件添加自定义项”。

    显示“自定义开发箱”页的屏幕截图,其中突出显示了“上传自定义文件”和“从文件添加自定义项”。

  6. 浏览到下载的示例 yaml 配置文件的位置,然后选择“打开”。

  7. 检查配置文件是否在“上传自定义文件”下列出,然后选择“验证”。

    显示“自定义开发箱”页的屏幕截图,其中列出了上传的自定义文件并突出显示了“验证”。

  8. 在 Dev Box 验证配置文件后,选择“继续”。

    显示自定义任务验证成功消息的屏幕截图,并突出显示了“继续”。

  9. 在“开发箱创建摘要”页上,Dev Box 会显示将应用的任务。 选择创建

    显示“开发箱创建摘要”页的屏幕截图,其中突出显示了“创建”按钮。

创建过程完成后,新的开发箱已安装 nodejs 和 Visual Studio Code。

有关更多示例,请参阅 GitHub 上的开发人员中心示例存储库

提示

作为开发人员门户的替代方法,可以使用 Dev Home 创建、自定义和连接到开发箱。 Dev Home 是一个本机 Windows 应用,提供了可用于管理开发箱的位置。 要详细了解 Dev Home,请参阅使用 Dev Home 创建可重用的开发箱自定义项

什么是配置文件?

开发箱自定义功能使用 yaml 格式化文件来指定一个任务列表,以在创建新开发箱时从目录中应用该列表。 这些配置文件包含一个或多个“任务”,用于标识目录任务并提供要安装的软件的名称等参数。 然后,开发人员可以使用相应配置文件创建新的开发箱。 以下示例使用 winget 任务来安装 Visual Studio Code,并使用 git clone 任务克隆存储库。

# From https://github.com/microsoft/devcenter-examples
$schema: 1.0
tasks:
  - name: winget
    parameters:
      package: Microsoft.VisualStudioCode
      runAsUser: true
  - name: git-clone
    description: Clone this repository into C:\Workspaces
    parameters:
      repositoryUrl: https://github.com/OrchardCMS/OrchardCore.git
      directory: C:\Workspaces

什么是任务?

任务执行特定操作,例如安装软件。 每个任务都包含一个或多个 PowerShell 脚本,以及一个 task.yaml 文件,该文件提供参数并定义脚本的运行方式。 还可以在 task.yaml 文件中添加 PowerShell 命令。 可以将特选任务的集合存储在附加到开发人员中心的目录中,其中每个任务位于单独的文件夹中。 开发箱支持将 GitHub 存储库或 Azure DevOps 存储库用作目录,并以递归方式扫描目录的指定文件夹以查找任务定义。

Microsoft 提供了一个快速入门目录,可帮助你开始使用自定义功能。 它包括一组默认的任务,用于定义设置任务:

  • 使用 WinGet 包管理器安装软件。
  • 使用 WinGet 配置部署所需的状态配置 (DSC)。
  • 使用 git-clone 克隆存储库。
  • 配置应用程序,例如安装 Visual Studio 扩展。
  • 运行 PowerShell 脚本。

使用现有的 WinGet 配置文件自定义开发箱

WinGet 配置采用配置即代码方法来定义所需的软件和配置设置集,以将 Windows 环境设为编码就绪状态。 这些配置文件还可用于设置 Dev Box,方法是使用上文所述 Microsoft 提供的快速入门目录中包含的 WinGet 任务。

以下示例演示了调用现有 WinGet DSC 文件的开发箱自定义文件。

tasks:
    - name: winget
      parameters:
          configure: "projectConfiguration.dsc.yaml"

要了解有关 WinGet 配置的详细信息,请参阅 WinGet 配置

编写配置文件

你可以通过创建自己的配置文件来定义要应用于开发箱的新任务。 你可以在 Visual Studio Code 中测试配置文件并进行任何需要的更改,而无需为每个测试创建单独的开发箱。

在创建和测试自己的配置文件之前,必须有一个目录,其中包含附加到开发人员中心的任务。 你可以使用 Visual Studio Code 扩展查找附加目录中的任务。

  1. 创建开发箱(或使用现有的开发箱)进行测试。

  2. 在测试开发箱中,安装 Visual Studio Code,然后安装 Dev Box v1.2.2 VS Code 扩展

  3. 从示例存储库下载示例 yaml 配置文件,并在 Visual Studio Code 中将其打开。

  4. 使用命令面板发现目录中可用的任务。 从“视图”>“命令面板”中,选择“开发箱:列出此开发箱的可用任务”。

    Visual Studio Code 的屏幕截图,显示了命令面板,其中突出显示了此开发箱的“Dev Box 列表”可用任务。

  5. 使用 f5/命令面板在 Visual Studio Code 中测试配置。 从“视图”>“命令面板”中,选择“开发箱:应用自定义任务”。

    Visual Studio Code 的屏幕截图,显示了命令面板,其中突出显示了“Dev Box 应用”自定义任务。

  6. 配置文件会立即运行,将指定的任务应用到测试开发箱。 检查更改并检查 Visual Studio Code 终端,看看任务执行期间是否生成了任何错误或警告。

  7. 成功运行配置文件后,请与开发人员共享,以便在创建新开发箱时上传该文件。

提示

作为 Visual Studio Code 的替代方法,可以使用 Dev Home 在图形用户界面中创建和验证配置文件。 要详细了解 Dev Home,请参阅使用 Dev Home 创建可重用的开发箱自定义项

注意

创建和上传文件的能力不是安全风险;上传的文件只能应用附加到开发人员中心的目录中定义的设置。 如果未在该目录中定义任务,开发人员将收到一个错误,指出任务未定义。

共享代码存储库中的配置文件

将配置文件命名为 workload.yaml 并将其上传到开发人员可访问的存储库(通常是其编码存储库),使配置文件可无缝供开发人员使用。 创建开发箱时,可以指定存储库 URL,并将配置文件与存储库的其余部分一起克隆。 开发箱会在存储库中搜索名为 workload.yaml 的文件,如果找到,则执行列出的任务。 此配置提供了在开发箱中无缝执行自定义选项的方法。

  1. 创建名为 workload.yaml 的配置文件。

  2. 使用代码将配置文件添加到专用 Azure Repos 存储库的根目录并提交。

  3. 登录到 Microsoft Dev Box 开发人员门户

  4. 选择“新建”>“开发箱”。

  5. 在“添加开发箱”中,输入以下值,然后选择“继续”:

    设置
    名称 输入开发箱的名称。 开发箱名称在项目中必须是唯一的。
    Project 从下拉列表中选择一个位置。
    开发箱池 从下拉列表中选择一个池,该列表包括该项目的所有开发箱池。 选择附近的开发箱池,以获得最低延迟。
    应用自定义项 选择“应用自定义项”。

    显示开发人员门户中开发箱自定义选项的屏幕截图,其中突出显示了“上传自定义文件”。

  6. 在“自定义开发箱”页上,选择“选择存储库中的自定义文件”,在“Azure DevOps 存储库 URL”中,输入托管要应用的配置文件的存储库 URL,然后选择“继续”。

    显示“自定义开发箱”页的屏幕截图,其中包含“从存储库选择自定义文件”和“Azure DevOps 存储库 URL”。

  7. 在“开发箱创建摘要”页上,Dev Box 会显示将应用的任务。 选择创建

创建过程完成后,新的开发箱已安装 nodejs 和 Visual Studio Code。

新的开发箱已克隆存储库,并应用了配置文件中的所有说明。

在目录中定义新任务

在目录中创建新任务可以创建针对开发团队定制的自定义项,并围绕可能的配置添加防护措施。

  1. 创建存储库来存储任务。

    (可选)你可以在自己的存储库中创建快速入门目录副本,将其用作起点。

  2. 通过修改现有的 PowerShell 脚本或创建新脚本,在存储库中创建任务。

    若要开始创建任务,可以使用 GitHub 上的开发人员中心示例存储库PowerShell 文档中提供的示例。

  3. 将存储库作为目录附加到开发人员中心

  4. 按照编写配置文件中的步骤为这些任务创建配置文件。

使用 Azure Key Vault 中的机密

可以在 yaml 配置中使用 Azure Key Vault 中的机密来克隆专用存储库,也可以使用你创作的任何需要访问令牌的自定义任务。

若要配置 Key Vault 机密,以便在 yaml 配置中使用,

  1. 请确保你的开发人员中心项目的托管标识在密钥保管库上具有 Key Vault 读者角色和 Key Vault 机密用户角色。

  2. 向应在开发箱自定义期间使用机密的每个用户或用户组授予 Key Vault 机密的机密用户角色。 授予该角色的用户或组必须包括开发人员中心的托管标识、你自己的用户帐户,以及开发箱自定义期间需要机密的任何用户或组。

有关详细信息,请参阅:

可以按以下格式引用 yaml 配置中的机密,以 git-clone 任务为例:

$schema: "1.0"
tasks:
   name: git-clone
   description: Clone this repository into C:\Workspaces
      parameters:
         repositoryUrl: https://myazdo.visualstudio.com/MyProject/_git/myrepo
         directory: C:\Workspaces
         pat: '{{KEY_VAULT_SECRET_URI}}'

如果想要克隆专用 Azure DevOps 存储库 (Azure Repos),则无需在 Key Vault 中配置机密。 相反,可以使用 {{ado}}{{ado://your-ado-organization-name}} 作为参数。 这会在创建对存储库具有只读权限的开发箱时代表你提取访问令牌。 快速入门目录中的 git-clone 任务使用访问令牌克隆你的存储库。 下面是一个示例:

tasks:
   name: git-clone
   description: Clone this repository into C:\Workspaces
      parameters:
         repositoryUrl: https://myazdo.visualstudio.com/MyProject/_git/myrepo
         directory: C:\Workspaces
         pat: '{{ado://YOUR_ADO_ORG}}'

如果你的组织的策略要求将 Key Vault 与 Internet 隔离,则可以将 Key Vault 设置为允许受信任的 Microsoft 服务绕过防火墙规则。

显示 Azure 防火墙配置的屏幕截图,其中选择了“允许受信任的 Microsoft 服务绕过此防火墙”。

若要了解如何允许受信任的 Microsoft 服务绕过防火墙,请参阅配置 Azure Key Vault 网络设置