gpt4 book ai didi

Azure DevOps 将部分变量替换为 KeyVault 中的值

转载 作者:行者123 更新时间:2023-12-02 08:19:06 24 4
gpt4 key购买 nike

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

给定一个值为 this-is-my-secret 的 KeyVault key kvSecret,我想要另一个值为 this 的变量 foo -是你的 secret

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

最佳答案

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

出现此问题的原因是替换表达式会在编译时扩展。

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

因此,当执行replace操作时,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)'

结果:

enter image description here

关于Azure DevOps 将部分变量替换为 KeyVault 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70380555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com