Azure Devops Pipeline - 如何根据上一个任务中设置的变量设置环境变量

问题描述 投票:0回答:1

我想要这样的流量

  - 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)
azure-devops azure-pipelines
1个回答
0
投票

看来您正在将

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)

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.