通过REST呼叫开始TeamCity构建

问题描述 投票:11回答:3

有一点背景。

在我的环境中,每个都有各自的Subversion存储库(500+)中的大量小型.NET解决方案。我们不是TFS商店,目前正在评估将我们自己的CI流程移至TeamCity。

[而不是让这500多个存储库每5-10分钟轮询一次我们的Subversion服务器,所以我想通过提交后挂接REST http调用启动一个项目构建(就像我们当前的解决方案一样)。然后,我希望TeamCity从SVN更新并开始构建过程。这可能吗?

我看到TeamCity有一个REST API,只是文档很少。我不确定该示例如何与我配置的任何内容相关联。什么是bt7?它如何与我配置的项目联系在一起?

http://buildserver:8111/httpAuth/action.html?add2Queue=bt7 
teamcity
3个回答
2
投票

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

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

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

[如果您要排队等待运行构建配置,只需通过查看URL找出其buildTypeId,然后您可能可以通过点击所使用的URL尝试运行它。


5
投票

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

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

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


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))
© www.soinside.com 2019 - 2024. All rights reserved.