Azure Pipelines yml - 变量不会在 AzureResourceManagerTemplateDeployment@3 的 overrideParameters 部分中被替换
Azure Pipelines yml - Variable doesn't get substituted in overrideParameters part of AzureResourceManagerTemplateDeployment@3
动态创建的变量不会作为 AzureResourceManagerTemplateDeployment@3
的一部分进行插值
overrideParameters
.
示例模板:
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
variables:
resourceGroupName: '...'
storageAccountName: 'actualAccountName'
subscriptionId: '...'
location: '...'
steps:
- task: PowerShell@2
displayName: "Set AzurePipeline var 'sasToken' to 1234"
inputs:
targetType: 'inline'
script: |
$token = 1234;
Write-Host "##vso[task.setvariable variable=sasToken;]$token"
- task: PowerShell@2
displayName: "Testing that sasToken is set"
inputs:
targetType: 'inline'
script: |
Write-Host "Token is: $(sasToken)"
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'AzureRMServiceConnection'
subscriptionId: '$(subscriptionId)'
action: 'Create Or Update Resource Group'
resourceGroupName: '$(resourceGroupname)'
location: $(location)
templateLocation: 'Linked artifact'
csmFile: 'azuretemplates/azuredeploy.json'
overrideParameters: >-
-appServiceTemplateUri https://$(storageAccountName).blob.core.windows.net/templates/linked-appservice-template.json?$(sasToken)
deploymentMode: 'Incremental'
如您所见,有一个 override parameters
部分,我在其中尝试使用各种方式附加 $sasToken
。
到目前为止我已经尝试过:
- $(sasToken)
- ${{ variables.sasToken }}
- $[ variables.sasToken ]
None 这些工作,sasToken
总是空的。
输出 url 如下所示:
https://actualAccountName.blob.core.windows.net/templates/linked-appservice-template.json?$(sasToken)
注意:$(storageAccountName
) 被替换了,而 $(sasToken)
没有。
我做错了什么?
抱歉,我的示例比使用作业和任务的实际 yml 过于简单。
解决方案:
使用以下方法创建的变量:
"##vso[task.setvariable variable=sasToken]$token"
默认范围为 job
为了在作业之间共享变量,需要执行几个步骤:
- job: buildJob #1. name your source job
steps:
- task: PowerShell@2
name: obtainSasTokenTask #2 name your source task
inputs:
targetType: 'inline' #4 add isOutput=true;
script: '##vso[task.setvariable variable=sasToken;isOutput=true]$token'
- job: build #5 name your target job
dependsOn: ['buildJob'] #6 create a dependency on prev job
variables: #7 create scoped variables an reference your sasToken
sasToken: $[dependencies.buildJob.outputs['obtainSasTokenTask.sasToken'] ]
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: | #8 use your local $(sasToken)
Write-Host "Token is: $(sasToken)"
这是一个糟糕的多步骤过程,但我还没有找到更清晰、更不容易出错的语法。
动态创建的变量不会作为 AzureResourceManagerTemplateDeployment@3
的一部分进行插值
overrideParameters
.
示例模板:
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
variables:
resourceGroupName: '...'
storageAccountName: 'actualAccountName'
subscriptionId: '...'
location: '...'
steps:
- task: PowerShell@2
displayName: "Set AzurePipeline var 'sasToken' to 1234"
inputs:
targetType: 'inline'
script: |
$token = 1234;
Write-Host "##vso[task.setvariable variable=sasToken;]$token"
- task: PowerShell@2
displayName: "Testing that sasToken is set"
inputs:
targetType: 'inline'
script: |
Write-Host "Token is: $(sasToken)"
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'AzureRMServiceConnection'
subscriptionId: '$(subscriptionId)'
action: 'Create Or Update Resource Group'
resourceGroupName: '$(resourceGroupname)'
location: $(location)
templateLocation: 'Linked artifact'
csmFile: 'azuretemplates/azuredeploy.json'
overrideParameters: >-
-appServiceTemplateUri https://$(storageAccountName).blob.core.windows.net/templates/linked-appservice-template.json?$(sasToken)
deploymentMode: 'Incremental'
如您所见,有一个 override parameters
部分,我在其中尝试使用各种方式附加 $sasToken
。
到目前为止我已经尝试过:
- $(sasToken)
- ${{ variables.sasToken }}
- $[ variables.sasToken ]
None 这些工作,sasToken
总是空的。
输出 url 如下所示:
https://actualAccountName.blob.core.windows.net/templates/linked-appservice-template.json?$(sasToken)
注意:$(storageAccountName
) 被替换了,而 $(sasToken)
没有。
我做错了什么?
抱歉,我的示例比使用作业和任务的实际 yml 过于简单。
解决方案:
使用以下方法创建的变量:
"##vso[task.setvariable variable=sasToken]$token"
默认范围为 job
为了在作业之间共享变量,需要执行几个步骤:
- job: buildJob #1. name your source job
steps:
- task: PowerShell@2
name: obtainSasTokenTask #2 name your source task
inputs:
targetType: 'inline' #4 add isOutput=true;
script: '##vso[task.setvariable variable=sasToken;isOutput=true]$token'
- job: build #5 name your target job
dependsOn: ['buildJob'] #6 create a dependency on prev job
variables: #7 create scoped variables an reference your sasToken
sasToken: $[dependencies.buildJob.outputs['obtainSasTokenTask.sasToken'] ]
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: | #8 use your local $(sasToken)
Write-Host "Token is: $(sasToken)"
这是一个糟糕的多步骤过程,但我还没有找到更清晰、更不容易出错的语法。