Как правильно запустить сборку из 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-адрес фиксации перед запуском сборки. Между получением запроса ловушки фиксации и обнаружением изменения может быть некоторая задержка (обычно секунды), поэтому имеет смысл подождать некоторое время и только после этого запускать сборку.

Другие вопросы по тегам