Параметр статуса сборки TeamCity

Возможно, я упускаю из виду встроенный параметр в TeamCity. Я пытаюсь отправить статус сборки в качестве параметра в консольное приложение. Консольное приложение — это шаг сборки, который необходимо выполнить, даже если предыдущие шаги не увенчались успехом. Если предыдущие шаги не увенчались успехом, он сделает одно, а если предыдущие шаги успешны, он сделает другое.

У меня есть консольное приложение, настроенное на получение параметра состояния сборки, но я не нахожу встроенный параметр состояния сборки для использования (успех/неудача). Я пропустил что-то легкое? Как я могу получить доступ к статусу сборки?

Спасибо!


person user2097151    schedule 31.07.2014    source источник
comment
Пожалуйста, посмотрите/проголосуйте за вопрос об этом.   -  person Vlad P53    schedule 17.08.2014


Ответы (3)


Мне приходилось делать подобное в прошлом, и мне не удалось найти встроенное свойство, которое я мог бы внедрить для передачи статуса.

В конце концов, я использовал служебные сообщения на предыдущем шаге сборки для передачи параметров на последующий шаг — распечатку сообщения типа ##teamcity[setParameter name='build.state' value='ok'] можно использовать для создания свойства сборки для состояния потока от одного шага к другому.

Я видел, как кто-то применял подход с использованием REST API TeamCity для запроса статуса запущенной сборки из шага сборки, но предыдущий подход был достаточно простым для меня.

person russw_uk    schedule 31.07.2014

В итоге я использовал решение, найденное здесь:

http://mnaoumov.wordpress.com/2013/01/31/get-teamcity-build-status-from-powershell/

Я только что создал ту же логику на С# в своем консольном приложении, чтобы получить статус сборки.

person user2097151    schedule 01.08.2014

Я попробовал код в ссылке в ответ пользователя 2097151, но сначала это не сработало. Поэтому я модифицировал его. Выкладываю модификации здесь:

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;

$buildId = "%teamcity.build.id%"
function TeamCityBuildStatus
{
    param
    (
        [string] $ServerUrl,
        [string] $UserName,
        [string] $Password,
        [string] $BuildId
    )

        $client = New-Object System.Net.WebClient

        $pair = "$($UserName):$Password"
        $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
        $client.Headers.Add("Authorization", "Basic $encodedCreds")

        $url = "https://$ServerUrl/httpAuth/app/rest/builds/$buildId/status"

        $status = $client.DownloadString($url)

        return $status -eq "SUCCESS"
}

$status = TeamCityBuildStatus -ServerUrl $teamcityUrl -UserName $teamcityUser -Password $teamcityPass -BuildId $buildId

Это решение не соответствует последней сборке.

То, как я отправляю учетные данные, я нашел в этой ветке. И изменение версии TLS я нашел в этой ветке.

Надеюсь, это поможет кому-то.

person AxelWass    schedule 26.01.2018