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

时间:2019-05-30 10:29:08

标签: powershell azure-devops azure-pipelines-release-pipeline

TL; DR:使用解密的变量组中的秘密值搜索并替换文本文件中的占位符。

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

变量列表中的变量是机密,因此我想用变量的解密值覆盖文件中的占位符。

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

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

2 个答案:

答案 0 :(得分:1)

因此,我发现,只要为变量组配置了Base64 token(在创建新的PAT时单击“显示所有范围”),就可以调用GET https://dev.azure.com/{organization}/{project}/_apis/distributedtask/variablegroups/{groupId}?api-version=5.1-preview.1到{ {3}}我需要。

尽管有get the variable group,但以上内容不会返回秘密值。

建议的方法是创建一个hack/workaround for this (involving multiple pipeline steps)

由于我需要通过重复的查找替换将解密后的密钥值传递到应用程序中,因此我在一个Release流水线步骤中实现了Powershell脚本,并在下一步中使用了输出。

答案 1 :(得分:0)

Visual Studio Marketplace中的Tokenization任务可以很好地完成此工作。您需要将其安装到Azure DevOps组织中,可以在https://marketplace.visualstudio.com/items?itemName=TotalALM.totalalm-tokenization

上找到它。

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

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

>

“令牌化”任务将以明文形式将所有加密值写入文件,但在发布日志中它们将被混淆。

如果要将变量存储在变量组中,只需将其链接到版本定义,然后将范围设置为适当的环境即可。