![](/img/trans.png)
[英]Azure DevOps Yaml: Gaining secret variable out of Azure KeyVault Task from Variable
[英]Azure DevOps replace part of variable with value from KeyVault
我有一个 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)'
不过,output 是this-is-my-secret
。
我已经测试了您的 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)'
结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.