我可以在 VSTS 中枚举变量组吗?

Can I enumerate a variable group in VSTS?

TL;DR: 在文本文件中搜索占位符并将其替换为变量组中机密的解密值。

我想使用 PowerShell 脚本在发布管道中接收变量组,然后遍历列表,对要发布的文件执行搜索和替换。

变量列表中的变量是机密所以我想用变量的解密值覆盖文件中的占位符

变量的值是特定于环境的,所以我不想在构建时提供这些值,也不想在存储的工件中包含解密的值。

被搜索替换的文件将在发布时用于执行,但不会部署到主机,因此将在管道执行完成后销毁。

来自 Visual Studio Marketplace 的标记化任务可以很好地完成这项工作。您需要将它安装到您的 Azure DevOps 组织中,它位于 https://marketplace.visualstudio.com/items?itemName=TotalALM.totalalm-tokenization

默认情况下,标记化任务使用双下划线来标​​识占位符。它将替换与发布定义中的变量名称匹配的任何文本,只要它被双下划线包围。

因此,如果您想将名为 MySecretVariable 的变量的值写入您的文件,您需要在文件中添加一个占位符,如 __MySecretVariable__ 到您希望写入该值的位置。

令牌化任务将以纯文本形式将任何加密值写入文件,但在发布日志中它们将被混淆。

如果您将变量存储在变量组中,只需 link 发布定义并将范围设置为适当的环境。

所以,我发现,只要我有Base64 token configured for Variable Groups (click 'Show all scopes' when creating a new PAT) then I can call GET https://dev.azure.com/{organization}/{project}/_apis/distributedtask/variablegroups/{groupId}?api-version=5.1-preview.1 to get the variable group我就需要。

然而,上面的内容不会 return 秘密值,尽管有 hack/workaround for this (involving multiple pipeline steps)

建议的路线是创建一个 Key Vault in Azure and perform the processing either in Powershell or code.

因为我需要通过重复 find-replace 将解密的密钥值传递到我的应用程序中,所以我在一个发布管道步骤中实现了一个 Powershell 脚本,并在下一步中使用输出。