Azure Pipelines 比较 Key Vault Secrets 的状况

Azure Pipelines compare Key Vault Secrets in Condition

我有一个简单的值存储在我的 Azure Pipelines 可以访问的 Key Vault 中。

当我提取值并将其与提供的参数进行比较时,比较总是失败,即使我明确地正确设置了它。我下面的逻辑是否有错误导致比较失败,或者这是我在 Azure Pipelines 中根本无法做到的事情?

- task: AzureKeyVault@1
  displayName: "Download Key Vault Data"
  inputs:
    azureSubscription: 'Azure: MY_SERVICE_CONNECTION'
    KeyVaultName: 'myKeyVault23123'
    SecretsFilter: 'my-actual'
    RunAsPreJob: false

- bash: echo "EXECUTION REQUIRED ${DESIRED} vs ${ACTUAL})"
  condition: and(succeeded(), ne('${{ parameters.desired }}', '$(my-actual)'))
  displayName: "Detected: Necessary"
  env:
    ACTAUL: $(my-actual)
    DESIRED: ${{ parameters.desired }}

- bash: echo "execution NOT required ${DESIRED} vs ${ACTUAL})"
  condition: and(succeeded(), eq('${{ parameters.desired }}', '$(my-actual)'))
  displayName: "Detected: Unnecessary"
  env:
    ACTAUL: $(my-actual)
    DESIRED: ${{ parameters.desired }}

如果我在 Key Vault 中明确设置 my-actual,我的检查仍然失败。我试着把它放在脚本中,并且 运行 也连续几次:

- task: AzureCLI@2
  displayName: Setting Value Explicitly
  inputs:
    azureSubscription: "Azure: MY_SERVICE_CONNECTION"
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: az keyvault secret set --vault-name myKeyVault23123 --name my-actual --value "${{ parameters.desired }}"
    addSpnToEnvironment: true
    useGlobalConfig: true

如果您的变量是机密,那么它总是被标记为 *** 以保护您的机密。所以你看到 EXECUTION REQUIRED *** vs ***.

是完全正常的

我也对这些值进行了测试:

  • parameters.desired = test, my-actual = test 我得到了 EXECUTION REQUIRED *** vs )
  • parameters.desired = test123test, my-actual = test I got EXECUTION REQUIRED ***123*** vs )

奇怪的是,第一个管道没有进入 execution NOT required,但值是相同的。因此我要说的是,在条件下使用秘密是不可能的。

我仍然收到相同的消息,但是我通过此管道实现了正确的行为:

parameters:
- name: desired
  displayName: Desired
  type: string
  default: test

trigger:
- master

pool:
  vmImage: ubuntu-latest

steps:
- bash: |
    echo '$(my-actual)'
    echo '${{ parameters.desired }}'

- bash: |
    echo "##vso[task.setvariable variable=skipsubsequent]false"
    if [ "${{ parameters.desired }}" == "$(my-actual)" ]; then
      echo "##vso[task.setvariable variable=skipsubsequent]true"
    fi

- bash: echo "EXECUTION REQUIRED ${DESIRED} vs ${ACTUAL})"
  condition: and(succeeded(), eq(variables['skipsubsequent'], 'false'))
  displayName: "Detected: Necessary"
  env:
    ACTAUL: $(my-actual)
    DESIRED: ${{ parameters.desired }}

- bash: echo "execution NOT required ${DESIRED} vs ${ACTUAL})"
  condition: and(succeeded(), eq(variables['skipsubsequent'], 'true'))
  displayName: "Detected: Unnecessary"
  env:
    ACTAUL: $(my-actual)
    DESIRED: ${{ parameters.desired }}