Как правильно запустить сборку из REST API в teamcity с определенным номером vcs?
Я работаю над инструментом C# для запуска сборки с REST API TeamCity. Я хочу запустить сборку с определенным номером vcs, поэтому вот что я делаю:
POST => teamcity-server/httpAuth/app/rest/buildQueue
HEADER => basicAuthCredentials
BODY =>
<build>
<buildType id="SomeValidBuildId"/>
<properties>
<property name="SAMPLE_TEST" value="VERY_TESTY"/>
</properties>
<lastChanges>
<change locator="version:4354174,buildType:(id:SomeValidBuildId)" />
</lastChanges>
</build>
Запрос работает, в сборке есть мои свойства и мой указанный номер vcs. Все в порядке, за исключением случаев, когда с этим номером vcs не было связанной предыдущей сборки, запрос не выполняется и отображается это сообщение об ошибке:
Http request failed:
error : Responding with error, status code: 404 (Not Found).
error : Details: jetbrains.buildServer.server.rest.errors.NotFoundException: Nothing is
found by locator 'version:4354174,buildType:(id:SomeValidBuildId),count:1'.
error : Could not find the entity requested. Check the reference is correct and the user has permissions to access the entity.
Сборка имеет доступ к настройкам VcsRoot и всему, что ему нужно, как я могу запустить пользовательскую сборку по номеру vcs, который никогда не создавался раньше?
2 ответа
Это было против vcs perforce, запуская curl из строки cmd Windows и позволяя мне запускать сборки TeamCity в заданной ветке p4 и списке изменений.
curl -u "teamcityUser:teamcityPassword" -X POST -d "{
""buildType"": {""id"": ""teamcityProjectId""},
""branchName"":""//p4/branch"",
""revisions"": {""revision"":[{
""version"":""59933"",
""vcsBranchName"":""//p4/branch""
}]}
}" --header "Content-Type: application/json" -H "Accept: application/json" <TeamCity Server host>:<port>/httpAuth/app/rest/buildQueue
Вы получите ответ об ошибке, если изменение в переданной версии еще не обнаружено TeamCity, и до сих пор TeamCity необходимо обнаружить изменение, прежде чем его можно будет использовать в сборке. Вы можете настроить перехватчики фиксации /push, чтобы TeamCity узнала об изменении, как только оно произошло, или вызвать URL-адрес фиксации перед запуском сборки. Между получением запроса ловушки фиксации и обнаружением изменения может быть некоторая задержка (обычно секунды), поэтому имеет смысл подождать некоторое время и только после этого запускать сборку.