yaml - Azure DevOps Pipeline 动态列出变量组的成员
问题描述
我正在尝试让 YAML 管道构建一个 JSON 文件以用作Cypress.env.json
. 一些值需要来自变量组(最终绑定到 Azure Key Vault)。我希望它是动态构建的,因此如果将秘密添加到 Key Vault 并通过变量组公开,它将作为 JSON 文件的新属性写出,而无需修改 YAML 管道。我希望我在这个答案中找到了一个技巧,它描述了一个名为的未记录函数convertToJson
,它允许将管道对象作为 JSON 字符串传递给脚本。所以我试了一下:
- job:
variables:
- group: DevVariableGroup
steps:
- bash: echo "${{ convertToJson(variables) }}"
displayName: 'Get an Object - Bash'
只要我得到一个包含所有在编译时可用的变量的 JSON 字符串,这就是有效的。不幸的是,变量组提供的变量不在其中。我只能convertToJson
使用模板语法使函数工作,而不是宏或运行时语法。
我想不出另一种方法来动态访问变量组提供的变量。有什么建议么?
解决方案
我想我会回到这个问题并分享我们找到的解决方案,以防它对其他人有帮助。机密保存在 Key Vault 中,并使用AzureKeyVault@1 任务进行检索。这会将值下载到变量中,因此无需依赖变量组来公开 Key Vault 的内容。一旦它们是变量,我们就可以使用replacetokens@3 任务。因此,我们更改了用于填充值的 JSON 文件,以便它可以处理该任务。
两项任务让我们得到了我们需要的东西。
- task: AzureKeyVault@1
displayName: 'Read vault'
inputs:
azureSubscription: ${{ parameters.azureSubscription }}
KeyVaultName: $(keyVaultName)
SecretsFilter: '*'
RunAsPreJob: false
- task: replacetokens@3
inputs:
targetFiles: '**/cypress.json'
encoding: 'auto'
writeBOM: true
actionOnMissing: 'warn'
keepToken: false
tokenPrefix: '#{'
tokenSuffix: '}#'
useLegacyPattern: false
enableTransforms: false
enableTelemetry: true
推荐阅读
- azure - Using If-Condition ADF V2
- qt - 如何将 Mimedata 保存到文件中
- javascript - 如何在 d3.js 中获取没有子元素的元素的工具提示
- sql - 使用通配符访问 SQL IN 函数
- automated-tests - 我想使用我的 Robotframework 上传文件,但我的文件上传填充没有 ID
- angular - Angular OnPush 不更新模板
- c# - 如何让我的应用程序运行或等到我的“任务”完成?
- r - R:如何计算最近 2 年
- jdbc - 尽管用户存在且凭据正常,但 Ping-Connection-Pool 向 DB 抛出拒绝访问
- javascript - 如何在reactjs中获取下拉输入的默认值