通过 Commit SHA1 获取构建状态
Get Build status by Commit SHA1
我们的团队正在使用 TeamCity 进行持续集成,并使用 Git-TFS (TFS2015 RC) 进行版本控制。
我想检查 TeamCity 是否已经(成功)构建了一个特定的提交,因此可以重新集成。
可以使用 REST API 查询 TeamCity 构建,例如:
GET http://teamcity:8000/guestAuth/app/rest/builds/18
结果包含一些 xml,显示 git 提交 SHA:
<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,以防它对其他人有用。
希望对您有所帮助
TeamCity 问题跟踪器中的相关功能请求:https://youtrack.jetbrains.com/issue/TW-40540。投票给它。
当前的解决方法是请求构建并将其修订包含在响应中,然后在客户端找到必要的构建。
请求可能如下所示:
.../app/rest/builds?locator=buildType(id:XXX)&fields=build(id,href,revisions(revision))
我在寻找同样的东西并偶然发现了这个问题。我不知道您是否还需要这个,但是我在 TeamCity v10 中找到了 API。但是为此
你必须知道你的BuildTypeID
https://${teamcity.domain}/app/rest/buildTypes/id:${BuildTypeID}/builds/revision:${COMMIT_SHA}
您可以从 TeamCity UI 找到您的构建类型 ID,方法是转到您的特定构建,然后
Edit configuration settings >> General Settings
然后是 构建配置 ID 字段中的值。
希望对您有所帮助。
最新版本的 teamcity 允许 'version' 定位器,因此以下内容将 return 在版本 SHA 与查询匹配的地方构建。
http://teamcity:8111/app/rest/changes?locator=version:SHA_HASH
我使用的是 TeamCity 2019.2,我能够直接在 builds
端点搜索特定提交:
TEAMCITY_URL/app/rest/builds/revision:SHA_HASH
.
不确定它是在哪个版本中实现的。
我们的团队正在使用 TeamCity 进行持续集成,并使用 Git-TFS (TFS2015 RC) 进行版本控制。
我想检查 TeamCity 是否已经(成功)构建了一个特定的提交,因此可以重新集成。
可以使用 REST API 查询 TeamCity 构建,例如:
GET http://teamcity:8000/guestAuth/app/rest/builds/18
结果包含一些 xml,显示 git 提交 SHA:
<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,以防它对其他人有用。
希望对您有所帮助
TeamCity 问题跟踪器中的相关功能请求:https://youtrack.jetbrains.com/issue/TW-40540。投票给它。 当前的解决方法是请求构建并将其修订包含在响应中,然后在客户端找到必要的构建。 请求可能如下所示:
.../app/rest/builds?locator=buildType(id:XXX)&fields=build(id,href,revisions(revision))
我在寻找同样的东西并偶然发现了这个问题。我不知道您是否还需要这个,但是我在 TeamCity v10 中找到了 API。但是为此
你必须知道你的BuildTypeID https://${teamcity.domain}/app/rest/buildTypes/id:${BuildTypeID}/builds/revision:${COMMIT_SHA}
您可以从 TeamCity UI 找到您的构建类型 ID,方法是转到您的特定构建,然后
Edit configuration settings >> General Settings
然后是 构建配置 ID 字段中的值。
希望对您有所帮助。
最新版本的 teamcity 允许 'version' 定位器,因此以下内容将 return 在版本 SHA 与查询匹配的地方构建。
http://teamcity:8111/app/rest/changes?locator=version:SHA_HASH
我使用的是 TeamCity 2019.2,我能够直接在 builds
端点搜索特定提交:
TEAMCITY_URL/app/rest/builds/revision:SHA_HASH
.
不确定它是在哪个版本中实现的。