azure 参数化的Yaml和二头肌

uqdfh47h  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(93)

我有下面的设置#1有二头肌模板(它部署容器注册表和发布二头肌文件)#2有yaml作为模板(有几个任务的模板,所以不是调用多个任务,我们从这里调用模板,反过来执行多个任务)。
现在在第一个repo中有一个主管道,它调用另一个yaml来部署acr并在其中发布bicep模板。要部署acr,它调用模板,其中AzureResourceManagerTemplateDeployment@3是任务之一。然后,它还有一个任务,运行一个内联脚本来发布二头肌文件。如下图所示:

// not showing all params and task details
deploy:
          steps:
          - template: templatename
            parameters:
              azureResourceManagerConnection: 
              subscriptionId: 
              resourceGroupName:     
              deploymentMode:

          - task: AzureCLI@2
            displayName: 'Publish all bicep templates'              
            inputs:
              scriptType: 'pscore'
              scriptLocation: inlineScript
              inlineScript: |
                Write-Host "Start executing script"
                  
                az bicep install
                
                $registryName = 'mycr'
                $modulePrefix = ''
                $version = 

                az bicep publish

主二头肌

resource containerRegistry 'Microsoft.ContainerRegistry/registries@2021-09-01' = {
  name: name
  location: location
  sku: {
    name: skuname
  }
}

上面的名字来自参数json文件

"acrName": {
      "value": "mycr"
    },

现在,我需要在两个不同的订阅在不同的租户这一设置。我需要相同的yaml文件和二头肌文件工作如上所示。因此,在布尔变量的基础上,让我们说IsOld。我会决定我应该选择租户1还是租户2。
但我不能为容器注册表使用相同的名称。我不知道该怎么办?例如,如果我使用变量组,我可以将变量组中的变量IsOld的值赋给名为containerRegName的变量。但是,在AzureCLI任务中,该如何处理它,因为名称是作为脚本中的变量传递的?我应该如何发挥参数二头肌有正确的名称的基础上管道参数IsOld?
P.S.我知道这是非常令人困惑的,所以请随时问任何问题或细节。

q43xntqr

q43xntqr1#

但我不能为容器注册表使用相同的名称。我不知道该怎么办?
Azure容器注册表名称需要全局唯一,这是因为创建了公开指向注册表的DNS。建议的做法是在Container Registry Name上添加唯一字符串的后缀。这确实意味着在名称的末尾会出现一些“随机”字符,但它确实有助于满足唯一性要求。
您可以使用uniquestring函数使名称具有确定性,提供使其唯一的因素(通常是ResourceGroupId,但您可以使用tenantId)。

param nameseed string = 'yourappreg'

var altContainerRegName = 'cr{nameseed}${uniqueString(resourceGroup().id, nameseed, deployment().name)}'
var containerRegName = 'cr{nameseed}${uniqueString(subscription().tenantId)}'

resource containerRegistry 'Microsoft.ContainerRegistry/registries@2021-09-01' = {
  name: containerRegName 
  location: location
  sku: {
    name: skuname
  }
}

output id string = containerRegistry.id
output name string = containerRegistry.name
output loginServer string = containerRegistry.properties.loginServer

由于注册表的名称是未知的,您将以bicep输出名称,然后在其他CI/CD管道步骤中使用这些输出。

相关问题