我有下面的设置#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.我知道这是非常令人困惑的,所以请随时问任何问题或细节。
1条答案
按热度按时间q43xntqr1#
但我不能为容器注册表使用相同的名称。我不知道该怎么办?
Azure容器注册表名称需要全局唯一,这是因为创建了公开指向注册表的DNS。建议的做法是在Container Registry Name上添加唯一字符串的后缀。这确实意味着在名称的末尾会出现一些“随机”字符,但它确实有助于满足唯一性要求。
您可以使用uniquestring函数使名称具有确定性,提供使其唯一的因素(通常是ResourceGroupId,但您可以使用tenantId)。
由于注册表的名称是未知的,您将以bicep输出名称,然后在其他CI/CD管道步骤中使用这些输出。