我有多个要链接的ARM模板。但是,当我使用"[uri(deployment().properties.templateLink.uri, 'transform.json')]"
时,出现一条错误消息,告诉我在本地运行或通过Azure DevOps管道运行时,deployment()提供的对象不包含templateLink。
因此,我然后尝试将路径发送到在Azure DevOps "[concat(parameters('templateDirectory'), '/transform.json')]"
中构建项目时创建的工件,然后在调用模板时将其作为参数提供。
但是后来我得到了这个错误
At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.
Details:
BadRequest: {
"error": {
"code": "InvalidContentLink",
"message": "The provided content link 'file:///D:/a/r1/a/_Infrastructure/ARM/shared/transform.json' is invalid or not supported. Content link must be an absolute URI not referencing local host or UNC path."
}
} undefined
Task failed while creating or updating the template deployment.
所以我的问题是,通过Azure DevOps管道进行部署时,应该如何处理模板的链接?
我是否必须在构建步骤中将其复制到存储中,以便在部署步骤中可以使用http或https访问它,如果可以,最好的方法是什么?似乎有点复杂。
答案 0 :(得分:3)
因此,如果要使用deployment().properties.templateLink.uri
,则必须从URL而不是从本地磁盘部署模板。
嵌套模板始终必须从url部署。因此,如果您想使用上述方法,则必须将所有内容上传到可公开访问的某个位置(或必须通过URL(例如SAS令牌)进行身份验证)。
我通常要做的-在部署前运行一个简单的powershell脚本,将所有模板上传到一个公共位置,然后我仅使用部署功能。
答案 1 :(得分:1)
如果要生成ARM,请在上面进行扩展
要么
使用AzureResourceManagerTemplateDeployment@3
部署生成的模板,您可以覆盖这样的变量
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
... other values
deploymentMode: 'Validation'
overrideParameters: '-LinkedTemplatesBaseUrl "$(BASE_URL)" -LinkedTemplatesUrlQueryString $(SAS_TOKEN)'
必须在LinkedTemplatesBaseUrl
文件中定义LinkedTemplatesUrlQueryString
和*-parameters.json
仅在从安全存储中提取时使用LinkedTemplatesUrlQueryString
(这是首选方式)
您可以使用AzureFileCopy@4
复制模板
steps:
- task: AzureFileCopy@4
name: AzureFileCopyTask
inputs:
SourcePath: '$(System.DefaultWorkingDirectory)/build_dir/*.json'
azureSubscription: $(AZURE_SUBSCRIPTION)
Destination: 'AzureBlob'
storage: $(STORAGE_ACCOUNT)
ContainerName: $(STORAGE_CONTAINER)
CleanTargetBeforeCopy: true
BlobPrefix: $(STORAGE_PREFIX)
并使用提及的here
这样的输出变量