通过REST Call启动TeamCity Build

时间:2012-02-24 19:25:20

标签: teamcity

一点背景。

在我的环境中,我们在他们自己的Subversion存储库(500+)中有大量的小型.NET解决方案。我们不是TFS商店,目前正在评估将我们的本土CI过程转移到TeamCity。

我不想每隔5-10分钟对这些500+ repos轮询我们的Subversion服务器,而是希望通过post-commit-hook REST http调用启动Project build(就像我们当前的解决方案那样)。然后,我希望TeamCity从SVN更新并开始构建过程。这可能吗?

我看到TeamCity有一个REST API,只是文档很稀疏。我不确定这个例子与我配置的任何东西有什么联系。什么是bt7?它与我配置的项目有什么关系?

http://buildserver:8111/httpAuth/action.html?add2Queue=bt7 

3 个答案:

答案 0 :(得分:5)

bt7是构建类型标识符。每个构建配置都有一个。您可以使用其余api获取完整列表,如下所示

http://buildserver:8111/httpAuth/app/rest/buildTypes

如果您点击团队城市页面上的任何构建配置,您还可以在网址中看到构建类型。您将看到一个url参数,例如buildTypeId = bt7

答案 1 :(得分:2)

bt7是您的buildTypeId,它是每个构建配置(作业)的唯一ID。每个项目都可以有许多构建配置。

如果您单击一个项目然后单击进入特定的构建配置,您的URL将类似于......

http://teacmtiyserver/viewType.html?buildTypeId=bt208

如果要将构建配置排队以运行,只需查看URL找到buildTypeId,然后您可以尝试通过点击您使用的URL来运行它。

答案 2 :(得分:0)

如果您与我同在一条船上,这可能会帮助您编写对Team-City的REST调用-尤其是围绕触发构建和监视构建。

  • 这是我过去用来触发的示例JS客户端 建立。您需要从TeamCity帐户中获得一个Bearer Token
  • 这是一个非常标准的令牌,您可以像生成Git一样生成它。
  • doc应该可以为您提供不同的帖子正文选项(不过将xml转换为json)

const TC_CLIENT = {
  async postBuild() {
    const request = {
      buildType: {
        id: "YOUR_BUILD_TYPE_ID"
      },
      properties: {
        property: [{
            name: "balh",
            value: "blah blah"
          },
          {
            name: "balh",
            value: "blah blah"
          }
        ]
      }
    };

    const response = await fetch("http://yourtcserver/app/rest/buildQueue", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Accept: "application/json",
        Authorization: "Bearer YOUR_TC_TOKEN"
      },
      body: JSON.stringify(request)
    });
    return await response.json();
  },

  async getBuildStatus(buildId) {
    const response = await fetch(
      "http://yourtcserver/app/rest/buildQueue/" + buildId, {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
          Accept: "application/json",
          Authorization: "Bearer YOUR_TC_TOKEN"
        }
      }
    );
    return await response.json();
  }
};

let sampleBuild = TC_CLIENT.postBuild();
console.log("Status", TC_CLIENT.getBuildStatus(sampleBuild.id))