gpt4 book ai didi

rest - 通过提交 SHA1 获取构建状态

转载 作者:行者123 更新时间:2023-12-02 21:15:17 25 4
gpt4 key购买 nike

我们的团队正在使用 TeamCity 进行持续集成,并使用 Git-TFS (TFS2015 RC) 进行版本控制。

我想检查 TeamCity 是否已(成功)构建了特定的提交,因此可以重新集成。

可以使用其 REST API 查询 TeamCity 版本,例如:

GET http://teamcity:8000/guestAuth/app/rest/builds/18

结果包含一些显示 git commit SHA 的 xml:

<revisions count="1">
<revision version="96b1db05b64ecc895da070137e93cde3d2cadfa1">
<vcs-root-instance [...]/>
</revision>
</revisions>

事实上,这些信息理论上是可用的,这让我希望可以通过此特定信息查询 TeamCity 版本,例如:

GET http://teamcity:8000/guestAuth/app/rest/builds/revision:96b1db05b64ecc895da[...]

但这会产生#400 BAD REQUEST响应。我在 TeamCity 9 Documentation 中找不到,无论这是否可能。我宁愿不迭代所有构建来检查它们是否包含此特定提交。

注意:此功能现已由 JetBrains 实现,并在 TeamCity 9.1 EAP4 中提供。现在。

最佳答案

我不相信这可以在没有迭代的情况下完成,这有点烦人

您可以通过哈希查看更改

/httpAuth/app/rest/changes?version:SHA_HASH

您可以通过构建定位器找到更改

/httpAuth/app/rest/changes?locator=build:(id:BUILD_ID)

但你不能走相反的路,否则这可以简单地完成。

buildLocator 不允许您使用修订维度进行查询,因此我看不到任何解决方法

如果您还没有自己编写以下脚本,那么它可能对您有用 - 将其保存到名为 get-build-status-by-git-commit.ps1 的文件中,以便它与最后的示例一起使用

# -----------------------------------------------
# Get Build Status By Git Commit
# -----------------------------------------------
#
# Ver Who When What
# 1.0 DevOpsGuys 01-07-15 Initial Version

# Script Input Parameters
param (
[ValidateNotNullOrEmpty()]
[string] $TeamCityServer = $(throw "-TeamCityServer is mandatory, please provide a value."),
[ValidateNotNullOrEmpty()]
[string] $ApiUsername = $(throw "-ApiUsername is mandatory, please provide a value."),
[ValidateNotNullOrEmpty()]
[string] $ApiPassword = $(throw "-ApiPassword is mandatory, please provide a value."),
[ValidateNotNullOrEmpty()]
[string] $GitSha = $(throw "-GitSha is mandatory, please provide a value.")
)

function Main()
{
$CurrentScriptVersion = "1.0"
$ApiCredentials = New-Object System.Management.Automation.PSCredential($ApiUsername, (ConvertTo-SecureString $ApiPassword -AsPlainText -Force))

Write-Host "================== Get Build Status By Git Commit - Version"$CurrentScriptVersion": START =================="

# Log input variables passed in
Log-Variables
Write-Host

# Set initial query url
$queryBuilds = "/httpAuth/app/rest/builds?fields=nextHref,build(id,status,revisions)"

while($queryBuilds)
{
$buildsToCheck = Api-Get "$TeamCityServer$queryBuilds"
$queryBuilds = $buildsToCheck.builds.nextHref;
foreach($build in $buildsToCheck.builds.build)
{
if ($build.revisions.revision.version -eq $GitSha) {
Write-Host "STATUS: "$build.status
Exit 0
}
}
}

Write-Host "================== Get Build Status By Git Commit - Version"$CurrentScriptVersion": END =================="
}

function Log-Variables
{
Write-Host "TeamCityServer: " $TeamCityServer
Write-Host "GitSha: " $GitSha
Write-Host "Computername:" (gc env:computername)
}

function Api-Get($Url)
{
Write-Host $Url
return Invoke-RestMethod -Credential $ApiCredentials -Uri $Url -Method Get -TimeoutSec 20;
}

Main

您可以通过以下方式使用它

.\get-build-status-by-git-commit.ps1 "http://teamcity:8000/" username password 96b1db05b64ecc895da070137e93cde3d2cadfa1

这是使用 httpAuth,但您可以轻松地定制脚本以使用 guest。我使用了 httpAuth,以防它对其他人有用。

希望这有帮助

关于rest - 通过提交 SHA1 获取构建状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com