Ответ 1
Не сейчас, вы можете следовать этой проблеме.
Я ищу способ привязать некоторый определенный параметр сборки к запланированному триггеру.
Идея состоит в том, что мы постоянно строим отладочные версии наших продуктов. Тем не менее, наша ночная сборка должна быть выпуском. Конфигурации сборки для большинства наших проектов абсолютно одинаковы. У него даже есть параметр конфигурации. Поэтому мне нужен только триггер, который позволяет указать переопределение для одного параметра сборки. Это сократило бы конфигурацию сборки, чтобы поддерживать ее наполовину.
Есть ли способ достичь этого?
Не сейчас, вы можете следовать этой проблеме.
Подход, который я использую, заключается в создании "сборки 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']"
}
}
Итак, теперь я могу запустить тест интеграции с помощью триггера, и когда я запустил его напрямую, он подскажет мне, в какой среде будет выполняться интеграционный тест.
Я застрял с той же проблемой и проголосовал за вопрос, упомянутый Евгением. Одно из решений, о котором мы говорили, как упоминалось, 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']")
Примечания:
Я надеюсь, что это решение может помочь!
Я добавил запрос на последний шаг сборки
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%