Javascript 使用团队城市';s rest API在构建阵列中为每个构建提取更多信息

Javascript 使用团队城市';s rest API在构建阵列中为每个构建提取更多信息,javascript,html,api,knockout.js,teamcity,Javascript,Html,Api,Knockout.js,Teamcity,正如标题中提到的,我正在使用Knockout JS、HTML和CSS为Teamcity服务器上的构建创建一个监视器 在我遇到显示每种类型(部署、selenium测试和编译)的最新版本的面板问题之前,它一直进展顺利 问题是,我使用的Team city API url检索有关每个构建的信息列表,包括状态、名称、描述和类型,但没有为我提供“触发”变量 我当前使用的API url如下所示: Settings.buildsUrl = Settings.proxy + Settings.teamCityUr

正如标题中提到的,我正在使用Knockout JS、HTML和CSS为Teamcity服务器上的构建创建一个监视器

在我遇到显示每种类型(部署、selenium测试和编译)的最新版本的面板问题之前,它一直进展顺利

问题是,我使用的Team city API url检索有关每个构建的信息列表,包括状态、名称、描述和类型,但没有为我提供“触发”变量

我当前使用的API url如下所示:

Settings.buildsUrl = Settings.proxy + Settings.teamCityUrl + '/guestAuth/app/rest/builds?locator=running:any,branch:branched:any,count:20';
在我的HTML中,我有以下foreach,用于显示最新版本的主面板,但由于TeamCity的XML中没有“触发”,因此我无法显示谁触发了当前版本

<div class="dev-panel-history">
    <ul data-bind="foreach: { data: mostRecentDevs }">
            <li data-bind="attr: { class: lowerStatus() }, css: { running: isRunning() }">
                <div class="build-branch"  data-bind="text: description()"></div>
                <div class="build-type" data-bind="text: buildType"></div>
                <div class="clear"></div>
                <div class="build-status" data-bind="text: isRunning() ? '' : status"></div>
                <div class="clear"></div>
                <!-- ko if: hasProgress() -->
                   <div class="progress-container" data-bind="attr: { 'data-progress' : percentageComplete() }"></div>
                <!-- /ko -->
            </li>
        </ul>
    </div>


您需要为每个构建进行另一次REST调用,以获取更多构建细节

在您已经获得的数据集中,您说您拥有每个构建的“状态、名称、描述和类型”。嗯,在这些属性旁边还有一个“href”属性。正如您提取每个构建的“状态”值一样,获取该构建的“href”值:它看起来类似于
/guestAuth/app/rest/builds/id:12345
。现在使用此URL进行新的REST调用。这将只为您提供该构建的更多详细信息,包括谁触发了该构建

是的,不幸的是,这意味着您必须对每个构建进行REST调用。我认为您现在使用的调用无法获得详细的构建结果


另外,不要假设每个构建都是由用户触发的:如果一个构建是由您的VCS触发的,或者是按计划触发的,那么它就不会有“触发者”名称。(您也可以在TC GUI中看到这一点:只有有人使用Run |…按钮将其设置为关闭时,才会触发生成。)

您需要为每个生成进行另一次REST调用,以获取更多生成详细信息

在您已经获得的数据集中,您说您拥有每个构建的“状态、名称、描述和类型”。嗯,在这些属性旁边还有一个“href”属性。正如您提取每个构建的“状态”值一样,获取该构建的“href”值:它看起来类似于
/guestAuth/app/rest/builds/id:12345
。现在使用此URL进行新的REST调用。这将只为您提供该构建的更多详细信息,包括谁触发了该构建

是的,不幸的是,这意味着您必须对每个构建进行REST调用。我认为您现在使用的调用无法获得详细的构建结果


另外,不要假设每个构建都是由用户触发的:如果一个构建是由您的VCS触发的,或者是按计划触发的,那么它就不会有“触发者”名称。(您也可以在TC GUI中看到这一点:只有当有人使用Run |…按钮将其关闭时,构建才会被触发。)

您不需要对每个构建进行额外调用,但需要精心设计如何返回响应。有一个名为字段的查询字符串参数,用于定义要返回的内容

e、 g.要在原始通话中返回触发的数据,您可以在原始请求中添加&fields=build(triggered)

teamCityUrl + '/guestAuth/app/rest/builds?locator=running:any,branch:branched:any,count:20&fields=build(triggered)';
这将返回类似这样的结果

<builds>
  <build>
    <triggered type="user" date="20160314T130743+0000">
      <user/>
    </triggered>
  </build>
  <build>
    <triggered type="vcs" details="jetbrains.git" date="20160221T230257+0000"/>
  </build>
</builds>
TeamCity文档-


希望这对您有所帮助

您不需要对每个构建进行额外调用,但您需要精心设计如何返回响应。有一个名为字段的查询字符串参数,用于定义要返回的内容

e、 g.要在原始通话中返回触发的数据,您可以在原始请求中添加&fields=build(triggered)

teamCityUrl + '/guestAuth/app/rest/builds?locator=running:any,branch:branched:any,count:20&fields=build(triggered)';
这将返回类似这样的结果

<builds>
  <build>
    <triggered type="user" date="20160314T130743+0000">
      <user/>
    </triggered>
  </build>
  <build>
    <triggered type="vcs" details="jetbrains.git" date="20160221T230257+0000"/>
  </build>
</builds>
TeamCity文档-


希望这有助于

如果你说“/guestuth”,那么URL“/guestuth/app/rest/builds/href”就可以了。URL将与您正在使用的URL非常相似。所有TeamCity REST-API URL都是。我尝试过使用其他URL,但它们似乎只会更改返回的数据集,而另一方面,我希望返回其他数据。操作,我误解了您第一次评论中的问题。不,我不是说
/guestAuth/app/rest/builds/href
!我已经更新(并希望改进)了我的答案。如果你说“/guestuth”,那么URL“/guestuth/app/rest/builds/href”会是吗。URL将与您正在使用的URL非常相似。所有TeamCity REST-API URL都是。我尝试过使用其他URL,但它们似乎只会更改返回的数据集,而另一方面,我希望返回其他数据。操作,我误解了您第一次评论中的问题。不,我不是说
/guestAuth/app/rest/builds/href
!我已经更新(并希望改进)了我的答案。因此,我需要在RESTAPI中添加一个href,它将获得构建数组,这将在这个API调用中为我提供更多参数。但是我有点不确定那个href是什么,我在哪里可以找到它。所以,我需要在RESTAPI中添加一个href,它将获得构建数组,这将在这个API调用中为我提供更多参数。但我有点不确定href是什么,以及在哪里可以找到itOr,对于所有同时可用的信息:
fields=*,build(*)
或者,对于所有同时可用的信息:
fields=*,build(*)