Подтвердить что ты не робот

Триггер для установки определенных параметров сборки?

Я ищу способ привязать некоторый определенный параметр сборки к запланированному триггеру.

Идея состоит в том, что мы постоянно строим отладочные версии наших продуктов. Тем не менее, наша ночная сборка должна быть выпуском. Конфигурации сборки для большинства наших проектов абсолютно одинаковы. У него даже есть параметр конфигурации. Поэтому мне нужен только триггер, который позволяет указать переопределение для одного параметра сборки. Это сократило бы конфигурацию сборки, чтобы поддерживать ее наполовину.

Есть ли способ достичь этого?

4b9b3361

Ответ 2

Подход, который я использую, заключается в создании "сборки Deploy:: Dev D1:: Run all integration tests". Затем я создаю триггер сборки для каждой сборки службы интеграции.

Я создаю параметр "env: OctopusEnvironment" для сборки службы интеграции. Задайте значение пустым. Мне нравится использовать подсказку и отображение:

select display='prompt' label='OctopusEnvironment' data_13='Production' data_12='CI' data_11='Local - Hassan' data_10='Local - Mustafa' description='OctopusEnvironment' data_02='Test T1' data_01='Dev D1' data_04='Local - Taliesin' data_03='Continuous Deployment CI 1' data_06='Local - Paulius' data_05='Local - Ravi' data_08='Local - Venkata' data_07='Local - Marko' data_09='Local - Ivan'

В каждой сборке службы интеграции я добавляю этот шаг powershell:

$octopusEnvironment = ($env:OctopusEnvironment).Trim()

Write-Host "Octopus environment = '$octopusEnvironment'"
if ($octopusEnvironment.Length -lt 1) {
    Write-Host "Auto detecting octopus environment"
    $trigger = '%teamcity.build.triggeredBy%' -split '::'
    if ($trigger.Length -gt 2){
        $environment = $trigger[1].Trim()
        Write-Host "##teamcity[setParameter name='env.OctopusEnvironment' value='$environment']"
    }
}

Итак, теперь я могу запустить тест интеграции с помощью триггера, и когда я запустил его напрямую, он подскажет мне, в какой среде будет выполняться интеграционный тест.

Ответ 3

Я застрял с той же проблемой и проголосовал за вопрос, упомянутый Евгением. Одно из решений, о котором мы говорили, как упоминалось, sergiussergius, заключалось в том, чтобы добавить заключительный шаг в последовательности шагов сборки, чтобы вручную запустить следующую конфигурацию сборки, передав параметры пользовательской сборки с помощью REST API. Но в этом случае мы теряем информацию о цепочке сборки. Используя TeamCity 9.x, пробовав некоторые вещи в REST API, я мог бы реализовать решение, которое позволяет получить сборку триггеров (предков) и ее параметры из инициированной (дочерней) сборки. Первое, что мы делаем, это получить текущую сборку, используя переменные среды, установленные TeamCity:

https://<host>/httpAuth/app/rest/builds/number:<env.BUILD_NUMBER>,buildType:(name:<env.TEAMCITY_BUILDCONF_NAME>,project:<env.TEAMCITY_PROJECT_NAME>)

В ответе API REST есть тег /build/triggered, который содержит информацию о триггере. Похоже на это

<triggered type="unknown" details="##triggeredByBuildType='<triggering-build-configuration-internalId>' triggeredByBuild='<triggering-build-number>'" date="20160105T190642+0700"/>

Похож на btxxx для нас. Из него мы можем получить доступ к триггер-сборке (предку), используя следующий запрос API REST:

https://<host>/httpAuth/app/rest/builds/number:<triggering-build-number>'4,buildType:(internalId:<triggering-build-configuration-internalId>1,project:name:<env.TEAMCITY_PROJECT_NAME>)

из ответа, мы можем получить значения параметров построения предка и установить его в текущей сборке, используя:

echo "##teamcity[setParameter name='env.ENV_AAA' value='aaaaaaaaaa']")

Примечания:

  • this post reference TeamCity версии 7.X. Я сделал это с помощью TeamCity версии 9.X и не смог попробовать его с предыдущей версией. Я не знаю, похожи ли упомянутые в моем сообщении вызовы API REST в предыдущих версиях.
  • В этом решении конфигурация сборки предка (тот, кто запускает сборку) и дочерняя конфигурация сборки (одна из которых запускается) находятся в одном проекте. Я не проводил тест с использованием конфигураций сборки в двух разных проектах: я бы ожидал, что тег триггера предоставит информацию о проекте-предке. Было бы неплохо, если бы кто-то мог сделать тест.

Я надеюсь, что это решение может помочь!

Ответ 4

Я добавил запрос на последний шаг сборки

curl -i -u "%login%:%pass%" -H "Content-type: text/plain" -X PUT -d "v1" http://tc.server/httpAuth/app/rest/buildTypes/id:%buildConfigurationId%/parameters/env.%SOME_PARAMETER%

http://confluence.jetbrains.com/display/TCD8/REST+API