Azure devops-更新json文件-Powershell脚本

时间:2019-11-15 09:28:29

标签: powershell azure-devops azure-powershell

我创建了powershell脚本来使用变量更新json文件。 Json文件位于Azure devops存储库中,json文件名为var.json。 我将在azure devops中使用此解决方案,因此我建立了管道并在azure devops的变量选项卡中设置测试变量:

enter image description here

在我的脚本中,我具有参数和变量块,如下所示:

param(
    [Parameter (Mandatory=$true)]
    [String] $FileRes
)
#env variable
$Path = $Env:BUILD_SOURCESDIRECTORY

# Download variables from Json file
$JsonBase = @()
$JsonPath = "$Path\Var.json"
$JsonBase = Get-Content $JsonPath | out-string | ConvertFrom-Json

$JsonBase.FileNames[0].value = $FileRes

在我的脚本中,我使用命令:$JsonBase | ConvertTo-Json | Set-Content -Path $JsonPath将输出定向到json文件。

Json文件结构:

{
    "FileNames":  [
                      {
                          "value":  "AAAbbbccc123",
                          "value1":  "www",
                          "value3":  "swd",
                          "value4":  "xvb"
                      }
                  ]
}

管道末端的状态正常,所有步骤均为绿色,但是var.json文件未根据需要更新。仍然有旧值-> "value": "AAAbbbccc123"

1 个答案:

答案 0 :(得分:1)

实际上,它已被替换,但是您需要在输出存储库中看到此更改。

为清楚起见,您可以使用私有代理来运行此版本。然后转到相应的本地存储库,并在构建完成后检查Var.json文件:

enter image description here

在脚本中,您Set-Content进入$(Build.SourcesDirectory)\Var.json下的文件,而不是VSTS repos中存储的文件。因此,要检查它是否被成功替换,请转到您的output repos,即代理人。

有时,如果您使用的是托管代理,则您可能无法查看详细的输出存储库,因为在管道完成后,主机映像将由服务器回收。

这时,您可以在其中添加另一个脚本以打印出JSON文件内容,然后可以检查它是否被成功替换:

$content= Get-Content -Path $JsonPath
Write-Host $content

enter image description here


此外,请对脚本进行一些更改:

$JsonBase.FileNames[0].value = "$(FileRes)"

由于您在变量标签中指定了值,因此请使用$(FileRes)而不是$FileRes。并且不要忘记双引号""

更新

要将输出存储库更改同步回VSTS存储库,请尝试按照以下步骤操作:

enter image description here

(1)第一个命令行任务:

git config --global user.email "xxx@xx.com"
git config --global user.name "Merlin"

cd $(Build.SourcesDirectory)
git init

(2)在powershell任务中,执行set-content脚本。

(3)在第二个命令行任务中,执行git push以推送更改:

git add Var.json
git commit -m "aaaa"
git remote rm origin
git remote add origin https://xxx@dev.azure.com/xxx/xxx/_git/xxxx
git push -u origin HEAD:master

enter image description here

此外,要在管道中成功运行git脚本。除了启用“允许脚本访问........”之外,您还应该遵循此permission setting.