我正在尝试创建 azure 管道,其中一部分是使用任务 AzureResourceGroupDeployment,它将 overrideParameters 作为字符串的格式:'-key value'
我想组合多个参数并为多个项目使用 yaml 模板,所以这部分需要来自 azure 变量组值和键列表的组合来调用这些值。
基本上我有一个数组:
["foo", "bar"]
我喜欢将其转换为字符串:
"-foo fooValue -bar barValue"
foo和bar是键。
fooValue和barValue来自使用相同键名 foo 和 bar 映射的变量组。
我知道yaml 中有一个Each-expression,但不确定如何使用它将数组组合为单个字符串作为变量。
我也尝试制作 powershell 脚本,但它不会返回 $-signs 以便 yaml 稍后解析。
yaml 文件的一部分:
parameters:
varGroup: '' # variable group
overrideParamKeys: [] # list of keys to put in arm. example: ['foo', 'bar'] converts to '-foo $(foo) -bar $(bar)'
stages:
- stage: 'deploy_${{ parameters.environment }}'
displayName: ${{ parameters.environment }}
variables:
- group: '${{ parameters.varGroup }}' # use variable groupo
- name: armOverrideParamValues
value: ''
pool:
name: Azure Pipelines
vmImage: 'windows-2019'
jobs:
- job: 'setup_arm_variables'
condition: gt(length('${{ join('', parameters.overrideParamKeys) }}'), 0)
steps:
- pwsh: |
Write-Host "overrideParamKeys $Env:overrideParamKeys"
function Combine-ArmOverrideKeys {
param (
[Parameter(Mandatory=$true)]
[string]
$keysString
)
$keys = $keysString.Split(", ")
$valString=""
foreach($key in $keys) {
$valString += " -$key \$($key)"
}
return $valString.Trim();
}
$armOverrideParamValues = Combine-ArmOverrideKeys -keys $Env:overrideParamKeys
Write-Host armOverrideParamValues $armOverrideParamValues
displayName: "Combining arm override keys to variable 'armOverrideParamValues'"
name: armOverrideParamValues
env:
overrideParamKeys: ${{ join(', ', parameters.overrideParamKeys) }}
- job: test_variables
steps:
- echo: variables.armOverrideParamValues $variables.armOverrideParamValues
# ...other job with task AzureResourceGroupDeployment using overrideParameters with value from variables.armOverrideParamValues
我想到了:
使用 powershell 脚本将键 ["foo", "bar"] 的字符串数组转换为参数字符串模板“-foo ${foo} -bar ${bar}”,然后将在运行时使用它从可变组。结果 armOverrideParamVals 可以放在任务 AzureResourceGroupDeployment 输入 overrideParameters 中。
parameters:
varGroup: '' # variable group
overrideParamKeys: [] # list of keys to put in arm. example: ['foo', 'bar'] converts to '-foo $(foo) -bar $(bar)' Azure variable-group names are not case sensitive, arm template parameters are and start lowercase.
environment: '' # env you are deploying to. example dev, test, prod
stages:
- stage: 'deploy_${{ parameters.environment }}'
displayName: ${{ parameters.environment }}
variables:
- group: '${{ parameters.varGroup }}'
- name: armOverrideParamValues
value: ''
pool:
name: Azure Pipelines
vmImage: 'windows-2019'
jobs:
- job: 'setup_arm_variables'
steps:
- ${{ if eq(join('', parameters.overrideParamKeys), '') }}:
- script: echo no overrideParamKeys
- ${{ if not(eq(join('', parameters.overrideParamKeys), '')) }}:
# joins overrideParamKeys to a string as -key ${key}
# which will be converted at runtime in deployment stage to key value.
# that will be then passed in to the armOverrideParameters of AzureResourceGroupDeployment
- pwsh: |
Write-Host "overrideParamKeys $Env:overrideParamKeys"
function Combine-ArmOverrideKeys {
param (
[Parameter(Mandatory=$true)]
[string]
$keysString
)
$keys = $keysString.Split(", ")
$valString=""
foreach($key in $keys) {
if($key -eq " " -or $key -eq "") {
continue
}
$valString += " -$key " + '"$' + "($key)" + '"'
}
return $valString.Trim();
}
$armOverrideParamValues = Combine-ArmOverrideKeys -keys $Env:overrideParamKeys
Write-Host armOverrideParamValues $armOverrideParamValues # for debug
Write-Host "##vso[task.setvariable variable=armOverrideParamValues;isOutput=true]$armOverrideParamValues"
displayName: "Combining arm override keys to variable 'armOverrideParamValues'"
name: combineArmOverrideKeys
env:
overrideParamKeys: ${{ join(', ', parameters.overrideParamKeys) }}
- deployment: 'deploy_arm'
displayName: 'Deploy ARM Templates: ${{parameters.armFilePath}}'
${{ if not(eq(join('', parameters.overrideParamKeys), '')) }}:
dependsOn: ['setup_arm_variables']
variables:
# gets the parameter template which is in format "-key ${key}"
${{ if not(eq(join('', parameters.overrideParamKeys), '')) }}:
armOverrideParamVals: $[dependencies.setup_arm_variables.outputs['combineArmOverrideKeys.armOverrideParamValues']]
${{ if eq(join('', parameters.overrideParamKeys), '') }}:
armOverrideParamVals: ''
# rest of the deployment
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句