【问题标题】:Get Build status by Commit SHA1通过 Commit SHA1 获取 Build 状态
【发布时间】:2015-09-18 19:12:57
【问题描述】:

我们的团队正在使用 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 中使用。

【问题讨论】:

  • TFS 2015 尚未发布。您是在运行候选版本,还是您错误地标记了问题?
  • 是的,我正在运行 RC。我会更新这个。

标签: rest tfs continuous-integration teamcity tfs-2015


【解决方案1】:

我不相信没有迭代就可以做到,这有点烦人

您可以通过哈希查看更改

/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,但您可以轻松地将脚本定制为使用来宾。我已经使用 httpAuth 以防其他人使用它。

希望对你有帮助

【讨论】:

  • 好的,这就是我写的;)谢谢!
【解决方案2】:

TeamCity 问题跟踪器中的相关功能请求:https://youtrack.jetbrains.com/issue/TW-40540。投票给它。 当前的解决方法是请求构建并将其修订包含在响应中,然后在客户端找到必要的构建。 请求可能如下所示:

.../app/rest/builds?locator=buildType(id:XXX)&fields=build(id,href,revisions(revision))

【讨论】:

    【解决方案3】:

    我在寻找同样的东西,偶然发现了这个问题。我不知道你是否还需要这个,但是我在 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 字段中的值。

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      teamcity 的最新版本允许使用“版本”定位器,这样以下内容将返回版本 SHA 与查询匹配的构建。

      http://teamcity:8111/app/rest/changes?locator=version:SHA_HASH

      【讨论】:

      • 这将返回更改,而不是构建。
      【解决方案5】:

      我在 TeamCity 2019.2 上,我能够直接搜索 builds 端点以查找特定提交:

      TEAMCITY_URL/app/rest/builds/revision:SHA_HASH.

      不确定它是在哪个版本中实现的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        • 1970-01-01
        • 2015-06-09
        • 2019-02-21
        • 2023-03-19
        相关资源
        最近更新 更多