如何通过TeamCity中的API触发特定分支的新构建

时间:2017-07-13 23:29:29

标签: teamcity gitlab webhooks

在官方文档中,我找到了如何通过API触发新构建并在TeamCity中指定注释,属性但不指定分支名称。当合并请求被标记为版本时,我的想法是从GitLab触发标记分支的新构建(我在配置中使用标记作为分支)。在TeamCity中,我将排除规则添加到分支规范( - :refs / merge-requests / *),因为我不想构建每个合并请求,因为我们通常也为其他分支提供了很多。此规则还适用于最近为master和tagged创建的合并请求。因此,我没有标记合并请求的构建。

我想从GitLab触发新版本(在检测到新标记时添加webhook),但不知道是否可以指定要使用的分支?

谢谢。

1 个答案:

答案 0 :(得分:1)

谷歌搜索了一段时间后,我终于找到了答案。要触发特定分支的构建,branchName="v1.26.1"(因为我使用标记作为分支特征,我指定了标记名称)属性应添加到XML请求中的<build>标记。

以下是Powershell中如何在TeamCity中为特定标记/分支触发新构建的示例:

$Username = '!username!'
$Password = '!password!'
$BuildTypeId = '!build type id from teamcity!'

$Pair = "$($Username):$($Password)"
$EncodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Pair))
$Headers = @{
  Authorization = "Basic $EncodedCredentials";
  Accept = "application/json"
}

$Body = '<build branchName="v1.26.1"><buildType id="#{buildTypeId}"/><comment><text>Build was triggered by GitLab.</text></comment><properties /></build>' -Replace "#{buildTypeId}", $BuildTypeId
Invoke-WebRequest -Uri 'http://teamcity.host/httpAuth/app/rest/buildQueue' -Method POST -Body $Body -UseBasicParsing -Headers $Headers -ContentType "application/xml"