我想要这样的流量
- task: AzureCLI@2
displayName: "Export Service Principal credentials"
inputs:
scriptType: bash
scriptLocation: inlineScript
connectedServiceNameARM: ${{ parameters.serviceConnection }}
addSpnToEnvironment: true
inlineScript:
if [[ -n "$idToken" ]]; then
echo "##vso[task.setvariable variable=ARM_OIDC_TOKEN;issecret=true]${idToken}"
fi
if [[ -n "$servicePrincipalKey" ]]; then
echo "##vso[task.setvariable variable=ARM_CLIENT_SECRET;issecret=true]${servicePrincipalKey}"
fi
然后根据它们是否实际导出来使用它们。但它不起作用:
- bash: |
echo $TEST_OIDC # $[variables.ARM_OIDC_TOKEN]
echo $TEST_SECRET # $[variables.ARM_CLIENT_SECRET]
env:
TEST_OIDC: $[variables.ARM_OIDC_TOKEN]
TEST_SECRET: $[variables.ARM_CLIENT_SECRET]
我已经尝试过使用宏表达式,但由于仅设置这 2 个变量之一,Azure Devops 将另一个变量保留为字符串。
- bash: |
echo $TEST_OIDC # ***
echo $TEST_SECRET # $(ARM_CLIENT_SECRET)
env:
TEST_OIDC: $(ARM_OIDC_TOKEN)
TEST_SECRET: $(ARM_CLIENT_SECRET)
我需要提供一些愚蠢的解决方法,只是为了让它发挥作用:
- bash: |
if [[ -n "$TEST_OIDC" && "$TEST_OIDC != '$(''ARM_OIDC_TOKEN) ]]; then # '$('' to skip variable expansion
echo $TEST_OIDC # ***
fi
[[ -n "$TEST_SECRET" && "$TEST_SECRET != '$(''ARM_CLIENT_SECRET) ]]; then # '$('' to skip variable expansion
echo $TEST_SECRET # print nothing as expected
fi
env:
TEST_OIDC: $(ARM_OIDC_TOKEN)
TEST_SECRET: $(ARM_CLIENT_SECRET)
看来您正在将
different type service connection
定义为 AzureCLI@2
任务中的参数,并希望相应地设置环境。
您可以使用
predefine
empty value
两个变量,如果它没有被日志命令覆盖(echo "##vso[task.setvariable...
),在这种情况下它将不显示任何内容,而不是 $(ARM_CLIENT_SECRET)
。
pool:
vmImage: ubuntu-latest
parameters:
- name: serviceConnection
default: ARMConn4
variables:
- name: ARM_OIDC_TOKEN # predefine the variables value
value: ''
- name: ARM_CLIENT_SECRET
value: ''
steps:
- task: AzureCLI@2
displayName: "Export Service Principal credentials"
inputs:
azureSubscription: '${{ parameters.serviceConnection }}'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
if [[ -n "$idToken" ]]; then
echo "##vso[task.setvariable variable=ARM_OIDC_TOKEN;issecret=true]${idToken}"
fi
if [[ -n "$servicePrincipalKey" ]]; then
echo "##vso[task.setvariable variable=ARM_CLIENT_SECRET;issecret=true]${servicePrincipalKey}"
fi
addSpnToEnvironment: true
- bash: |
echo $TEST_OIDC
echo $TEST_SECRET
env:
TEST_OIDC: $(ARM_OIDC_TOKEN)
TEST_SECRET: $(ARM_CLIENT_SECRET)
输出: