【问题标题】:Azure DevOps replace part of variable with value from KeyVaultAzure DevOps 将部分变量替换为 KeyVault 中的值
【发布时间】:2021-12-16 14:18:29
【问题描述】:

我有一个 Azure Devops 管道,它尝试用 Azure KeyVault 中的值替换部分字符串变量值。

给定一个值为 this-is-my-secret 的 KeyVault 机密 kvSecret,我想要另一个值为 this-is-your-secret 的变量 foo

jobs:
- job: WebApp
  pool:
    vmImage: 'windows-latest'
  variables:
    foo: $[replace(variables['kvSecret'], 'my', 'your')]

  steps:
  - task: AzureKeyVault@2
    inputs:
      azureSubscription: 'foo'
      KeyVaultName: 'myKeyVault'
      RunAsPreJob: true

由于日志记录被屏蔽,我通过写入文件进行了测试:

  - task: PowerShell@2
    inputs:
      targetType: 'inline'
      script: |
        New-Item $(build.artifactstagingdirectory)\test.txt
        Set-Content $(build.artifactstagingdirectory)\test.txt '$(foo)'

  - task: PublishBuildArtifacts@1
    inputs:
      pathToPublish: '$(Build.ArtifactStagingDirectory)'

输出是this-is-my-secret

【问题讨论】:

    标签: azure azure-pipelines


    【解决方案1】:

    我已经测试了你的 YAML 定义,变量 foo 应该是空的。

    这个问题的原因是替换表达式会在编译时被扩展。

    当管道运行时,将下载 Key Vault 中的变量。

    因此在进行替换操作时,kvSecret变量为空,foo变量也为空。

    为了解决这个问题,您需要在 Agent Job 中添加一个脚本来执行替换操作。

    这是一个例子:

    jobs:
    - job: WebApp
      pool:
        vmImage: 'windows-latest'
        
      steps:
      - task: AzureKeyVault@2
        inputs:
          azureSubscription: 'xx'
          KeyVaultName: 'xx'
          SecretsFilter: '*'
          RunAsPreJob: true
    
      - task: PowerShell@2
        inputs:
          targetType: 'inline'
          script: |
            $newvalue = "$(kvSecret)" -replace "my", "your"
            echo $newvalue 
            echo "##vso[task.setvariable variable=foo]$newvalue"
            
      - task: PowerShell@2
        inputs:
          targetType: 'inline'
          script: |
            echo "$(foo)"
            New-Item $(build.artifactstagingdirectory)\test.txt
            Set-Content $(build.artifactstagingdirectory)\test.txt -value '$(foo)'
      - task: PublishBuildArtifacts@1
        inputs:
          pathToPublish: '$(Build.ArtifactStagingDirectory)'
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多