从部署管道发布 Bicep 代码

已完成

在自动执行模板规格或 Bicep 模块的发布过程时,需要确保通常由手动执行的所有操作都可以自动执行并在管道中运行。 在本单元中,你将应用以前学到的原理从部署管道发布模板规范和 Bicep 模块。

模板规格和模块

借助 Bicep 可轻松重用代码。 跨部署重用 Bicep 代码的两种常见方法包括:

  • 模板规格,针对完整解决方案的部署进行优化。 例如,假设你已定义了一组安全强化的资源,以便根据公司的规范部署完整的虚拟机。 可以将此代码发布为模板规格。然后,你的同事就可以使用你的模板规格部署一个完整的虚拟机(甚至可从 Azure 门户进行部署)。
  • 模块,设计成其他部署的组件。 例如,假设你已创建了一个用于创建存储帐户的 Bicep 文件。 你可能在许多其他部署中需要存储帐户,因此可以将 Bicep 文件发布到注册表并将其用作整个组织部署中的模块。

在模板规格和 Bicep 模块之间做出决策时,一条很好的经验法则是:如果模板将按原样在整个组织中进行部署,则模板规格可能是更好的选择。 但如果可能在多个父模板中重复使用此模板,Bicep 模块应该更能满足你的需求。

验证管道中的可重用代码

与常规 Bicep 部署不同,在创建模板规格或模块时,不会将资源直接部署到 Azure。 而是会发布模板规格或模块。 然后,可以在另一个部署中使用模板规格或模块。 然后,该部署将部署已定义的资源。 因此,验证和测试模板规范和 Bicep 模块的方式可能与用于常规 Bicep 部署的过程不同。

对 Bicep 代码进行 Lint 分析是一个很好的做法。 linter 检测语法问题,如果你没有遵循推荐的做法,它会向你发出警告。

除了 Lint 分析,可能还需要考虑使用预检验证来测试模板规格和模块。 甚至可以考虑将模板规格和模块部署到 Azure 并测试它们所创建资源的行为是否符合预期。 但是,从部署管道中运行这些类型的测试可能很困难,原因有两个:

  • 预检验证和部署需要 Azure 环境来部署资源。 可能需要维护一个专用的 Azure 订阅或资源组以用于部署和测试你的模块。
  • 许多模板规格和模块要求指定一组参数。 可能需要为模板规格或模块创建一组测试参数,以便在部署时使用。

需要确定是否包括部署和测试模板规格和模块的管道步骤。 在此 Microsoft Learn 模块中,我们将对 Bicep 代码进行 Lint 分析,但不包括其他形式的测试。 若要测试模板规格和模块,请考虑如何将它们部署到 Azure。 另请考虑是使用专用订阅还是资源组来部署资源。

提示

建议查看使用 Azure Pipelines 测试 Bicep 代码,详细了解如何在自动化管道中测试 Bicep 文件。

身份验证和授权

当你自行将模板规格发布到 Azure 时,需要向 Microsoft Entra 用户授予对包含模板规格资源的资源组的访问权限。 同样的,当你将 Bicep 模块发布到注册表时,需要向 Microsoft Entra 用户授予组织用于其 Bicep 模块的 Azure 容器注册表实例的写入权限。

使用自动化部署管道时,同样的原则也适用。 但是,由于你不是运行部署的人员,因此需要确保为管道的服务主体授予对用于发布模板规格的资源组的适当访问权限,或对用于发布模块的容器注册表的访问权限。

提示

将模块发布到注册表时,运行部署的服务主体可能不需要很多权限。 如果注册表使用 Microsoft Entra 授权,服务主体只需对注册表具有 AcrPush 权限。

请考虑使用安全最小特权原则。 仅向管道的服务主体提供对容器注册表的访问权限,而不是对资源组或订阅的访问权限。

从管道发布模板规格和模块

使用 Azure CLI 从自己的计算机发布模板规格时,请使用如下所示的命令:

az ts create \
  --name StorageWithoutSAS \
  --resource-group MyResourceGroup \
  --location westus3 \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1 \
  --template-file main.bicep

可以将此 Azure CLI 命令转换为管道步骤:

- task: AzureCLI@2
  name: Publish
  displayName: Publish template spec
  inputs:
    azureSubscription: $(ServiceConnectionName)
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az ts create \
        --name StorageWithoutSAS \
        --resource-group MyResourceGroup \
        --location westus3 \
        --display-name "Storage account with SAS disabled" \
        --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
        --version 1 \
        --template-file main.bicep

该管道使用相同的过程来发布你自己要使用的模板规格。

同样,当你使用 Azure CLI 从自己的计算机发布 Bicep 模块时,可以使用如下命令:

az bicep publish \
   --file module.bicep \
   --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

也可以将此 Azure CLI 命令转换为管道步骤:

- task: AzureCLI@2
  name: Publish
  displayName: Publish Bicep module
  inputs:
    azureSubscription: $(ServiceConnectionName)
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az bicep publish \
        --file module.bicep \
        --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

提示

在本示例中,Bicep 注册表的主机名 (toycompany.azurecr.io) 嵌入到管道步骤定义中。 这不是一种好的做法。 可以使用环境变量来设置这样的配置设置。 你稍后将在此 Microsoft Learn 模块中了解其工作原理。

本单元介绍了如何从管道发布模板规格。

使用模块或模板规格

在之前的 Microsoft Learn 训练模块中,你了解了如何部署模板规格中定义的资源,以及如何使用存储在注册表中的 Bicep 模块。 无论是手动发布模板规格和模块,还是从部署管道发布,你都以相同的方式使用和部署它们。

例如,可以使用 az deployment group create Azure CLI 命令或 Azure PowerShell 的 New-AzResourceGroupDeployment cmdlet 将模板规格或 Bicep 文件部署到资源组。