TeamCity-使用powershell迭代vcs根

TeamCity-使用powershell迭代vcs根,powershell,teamcity,Powershell,Teamcity,我试图在TeamCity中创建一个meta runner来使用powershell生成元数据文件,我想知道是否有一种方法可以迭代不同的vcs路线 我的代码: $fileName = "metadata.json" $vcsArray = @() for ($i = 0; $i -le 5; $i++) { $vcsObject= @{ "VCSNumber"="%build.vcs.number.Proj_App_TcTestApp%" } $vcsArray

我试图在TeamCity中创建一个meta runner来使用powershell生成元数据文件,我想知道是否有一种方法可以迭代不同的vcs路线

我的代码:

$fileName = "metadata.json"

$vcsArray = @()
for ($i = 0; $i -le 5; $i++)
{
    $vcsObject= @{
        "VCSNumber"="%build.vcs.number.Proj_App_TcTestApp%"
    }
$vcsArray += $vcsObject
} 
    $content = @{
        "TeamCityBuildLogUrl" = "http://teamcity.hps.com/viewLog.html?buildId=%teamcity.build.id%&tab=buildResultsDiv&buildTypeId=%system.teamcity.buildType.id%";
        "TeamCityProjectName" = "%system.teamcity.projectName%";
        "TeamCityBuildNumber" = "%system.build.number%";
        "BuildDateGenerated" = (Get-Date).ToString();
        "TeamCityExecutionAgentName" = "%teamcity.agent.name%";
        "VCSes" = $vcsArray
    }
}

$content = $content | Add-Member @{"VCS Version2" = "testValue"} -PassThru # How to add more members dynamically.
$content = ConvertTo-JSON $content

New-Item $fileName -type file -force -value "// Metadata file generated by TeamCity`n"
Add-Content $fileName $content

cat $fileName # Test afterwards
当我添加另一个根时,根的名称最终成为标识符,这使得迭代它们变得困难,因为我从技术上不知道根的名称

下面是一个示例用例: 我有两个风投的根:

%build.vcs.number.Proj_App_TcTestFW%
%build.vcs.number.Proj_App_TcTestApp%
理想情况下,我希望像这样迭代:

$vcsArray = @()
foreach ($vcsRoot in vcsRoots)
{
    $vcsObject=@{
        "VCSName"= $vcsRoot;
        "VCSNumber"= "%build.vcs.number." + $vcsRoot%
    }

    $vcsArray += $vcsObject
}
但似乎我必须在我的脚本中硬编码这些名字,所以我现在不知所措

TeamCity是否以我可以迭代的方式公开VCS路线

谢谢
Alex

好的,我没有实际的TeamCity体验,但看起来您可以通过发出REST命令获得根目录列表:

Invoke-WebRequest -Uri 'http://teamcity.hps.com/httpAuth/app/rest/vcs-roots' -Method Get
它将返回一个包含根列表的XML响应:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<vcs-roots count="1">
     <vcs-root id="TestProject1_TestProject1perforce"
               name="test-project1-perforce"
               href="/httpAuth/app/rest/vcs-roots/id:TestProject1_TestProject1perforce"/>
</vcs-roots>

这就是你要找的吗

参考资料: