将多个 Bicep 模板发布到 Container Registry

Publish Multiple Bicep Templates to a Container Registry

我们正在将基础架构从使用 ARM 模板过渡到 Bicep 模板。我们有一个包含我们所有模板文件的专用存储库,我们希望将其发布到中央存储库以供我们组织中的其他存储库使用。

以前使用 ARM 模板时,我们将包含所有模板的文件夹发布到 Azure 存储帐户,然后其他存储库可以使用带有 SAS 令牌的模板 blob url 引用该文件夹。我们希望用二头肌模板做点什么,这样我们就不需要单独发布每个模板了。目前,az cli 和 powershell 命令仅包含使用 --file 参数一次发布一个文件的功能:

az bicep publish --file storage.bicep --target br:exampleregistry.azurecr.io/bicep/modules/storage:v1

我看到的唯一可能性是在 powershell 中使用 foreach 语句遍历文件夹中的每个文件并单独发布:

foreach ($file in Get-ChildItem)
{
  az bicep publish --file $file.name --target br:exampleregistry.azurecr.io/bicep/modules/$filename:$version
}

问题:

有没有人想出一种更优化的方法来在一次操作中发布多个二头肌模板?

  • 据我所知,您所做的似乎是发布多个二头肌的方式 遍历每个二头肌文件的 acr 模板。
  • 您还可以查看此 自动维护私人二头肌模块 使用 Azure Pipelines 注册,其中已发布的是 与文件夹中的二头肌文件相比,每次只 non existing ones are published 到注册表。
  • 此处ACR用于创建私有Bicep注册表以供共享 模块和 build pipeline 用于将模块发布到 ACR 当添加新模块或修改或更改现有模块时。

我在使用 foreach 循环时遇到了一些问题。以下代码对我有用:

azure-pipelines.yml:

jobs:
  - job: modules
    displayName: 'Publish Bicep Modules'
  pool:
    name: 'myBuildingPoolName'

steps:
  - task: AzureCLI@2
    displayName: 'Publish/Update Modules to Registry'
    inputs:
      azureSubscription: $(ServiceConnectionName) # Pipeline paramater
      scriptType: 'pscore'
      scriptLocation: inlineScript
      inlineScript: |
        az bicep install
        $registryName = '$(RegistryName)' # Pipeline paramater
        $version = '$(Version)' # Pipeline paramater
        
        # bicep files are in the modules folder
        $modules = Get-ChildItem -Path ./Modules/*.bicep -Recurse -Include *.bicep
        foreach ($module in $modules){
            $moduleName = $module.BaseName.ToLower()
            Write-Host "Adding new module ${moduleName} with version $version"
            az bicep publish --file $module.FullName --target br:${registryName}.azurecr.io/bicep/modules/${moduleName}:${version}
        }

另外请确保您已安装 Azure CLI 和 Powershell,以防您使用自托管 docker AgentPool:

Dockerfile:

#Install Azure-CLI
RUN curl -LsS https://aka.ms/InstallAzureCLIDeb | bash \
&& rm -rf /var/lib/apt/lists/*

#Install Powershell
RUN wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
RUN dpkg -i packages-microsoft-prod.deb
RUN apt-get update
RUN add-apt-repository universe
RUN apt-get install -y powershell