从json文件导入Azure DevOps管道变量

10
我想使用json文件存储powershell脚本使用的变量。在Azure DevOps中,我已经配置了流水线,其中包含一个带有变量列表的powershell脚本。我想使用json文件并将所有变量存储在该文件中。我想将json文件存储在Azure仓库中,并在启动流水线时使用它。我不想使用变量组。我找到了这个解决方案[Json to Variable]https://marketplace.visualstudio.com/items?itemName=OneLuckiDev.json2variable&targetId=02fbae5c-cc01-4c8b-a90f-7393a3156347 ,但我读到了一些关于此任务的不好的意见。是否有任何方法可以使用json文件作为存储变量的位置,或者我可以使用不同的文件格式? 更新: enter image description here

1
这个扩展有什么问题吗?先试用一下,然后再询问。 - Shayki Abramczyk
3
为什么不直接使用PowerShell读取json文件呢?如果你想将这些作为环境变量在后续的流水线步骤中使用,那么可以像这样使用 echo 命令设置变量:echo "##vso[task.setvariable variable=a]20" : https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#set-in-script - Pero P.
1个回答

10
为什么不直接使用 Powershell 内置的 cmdlet:ConvertFrom-Json。参考这篇官方文档,了解该命令的描述:Powershell: ConvertFrom-Json
您可以添加该脚本:
Get-Content "{JSON file path}" | out-string | ConvertFrom-Json

Get-Content 会将 JSON 文件读取为字符串数组,而 ConvertFrom-Json 则会将这些字符串转换成 PSCustomObject 对象。然后您可以使用简单的点符号(.)调用该对象,并按照此格式在任务脚本中使用它。

以下是一个简单示例供您参考:

$data = Get-content {your JSON file path}| out-string | ConvertFrom-Json
Write-Output $data.ts


嗨,这正是我正在寻找的,我已经使用管道内联脚本进行了测试,它运行良好。谢谢! - tester81
还有一个问题,为什么我仍然收到错误消息“Get-Content:找不到路径'D:\ Variables.json',因为它不存在。”我使用管道内联脚本测试了这个解决方案,并且它有效。现在在我的powershell脚本中,我正在使用此-->$JsonFilePath = "$($Build.SourcesDirectory)\Variables.json" $JsonDataBase = Get-Content $($JsonFilePath) | out-string | ConvertFrom-Json并遇到错误,文件存储在devops repo中。 - tester81
@tester81。根据您的脚本配置,我假设您的Variable.json位于存储库的根路径中,对吗?请将您的路径脚本更改为$JsonFilePath = "$(Build.SourcesDirectory)\Variables.json" $JsonDataBase = Get-Content $JsonFilePath | out-string | ConvertFrom-Json。您使用的方法不正确,因为正确的路径值应该是d:\a\1\s\...而不是D:\.... - Mengdi Liang
@tester81。这是我在PowerShell上的简单示例:https://imgur.com/a/Rc0SVsW。如果方便的话,您能展示一下您的脚本吗? - Mengdi Liang
我在脚本中使用了环境变量 --> $RepoPath = $Env:BUILD_SOURCESDIRECTORY,问题得到了解决。 - tester81
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接