2010-12-03 2 views
1

Я хочу настроить параметризованную сборку в Hudson, которая принимает только один параметр - тип сборки для создания (QA, Stage, Production). Однако для каждой из этих сборников требуется установить несколько различных переменных среды. Что-то вроде (псевдокод):В Хадсоне, как установить несколько переменных среды с учетом одного параметра?

if ${CONFIG} == "QA" then 
    ${SVN_PATH} = "branches/dev" 
    ${BUILD_CONFIG} = "Debug" 
    # more environment variables... 
else if ${CONFIG} == "Production" then 
    ${SVN_PATH} = "trunk" 
    ${BUILD_CONFIG} = "Release" 
    # more environment variables... 
else # more build configurations... 
end if 

Есть множество шагов в нашей сборке - тянуть от подрывной деятельности, а затем запустить комбинацию MSBuild команд, пакетные файлы DOS и Powershell сценариев.

Обычно мы планируем наши сборки из интерфейса Hudson, и я хочу, чтобы запись параметра была как можно более уверена.

Есть ли способ сделать это?

ответ

6

Поскольку вы делаете так много вещей для выпуска, как насчет скриптов на всех шагах за пределами Хадсона. вы можете использовать ant, пакетные файлы или любой язык сценариев, который вы предпочитаете. Поместите этот скрипт в свой scm, чтобы получить контроль над версиями.

профи:

  • вы получите логику из Hudson, так как Хадсон вызывает только сценарий.
  • Вам не нужно создавать переменные среды, которые необходимо сохранить между оболочками (глобальными переменными).
  • вы можете использовать Config/файлы свойства для каждой среды, которую вы должны также положить в системе управления версиями
  • вы можете запускать эти сценарии вне Хадсон, если вам нужно
  • пути
  • Hudson работы конфигурационной ПОЛУЧИТЬ проще
  • у вас нет побочных эффектов изменения глобальных переменных окружения. Вы всегда должны пытаться создавать задания, которые не меняют глобальных настроек, потому что это всегда вызывает проблемы.
2

Hudson поддерживает параметры сборки, которые являются переменными времени сборки, которые Хадсон предоставляет в качестве переменных среды для ваших шагов сборки (см. Страницу Wiki Hudson Parameterized Build). В вашей работе у вас может быть один параметр выбора CONFIG, который вводит пользователь. (Чтобы настроить параметр, в настройках вашего задания выберите Эта сборка параметризируется.)

Затем вы можете в принципе написать то, что вы закодировали в псевдокоде в начале шага сборки. Или, поскольку у вас есть несколько шагов, поместите настройку среды в файл, на который ссылаются ваши существующие скрипты сборки. (В зависимости от вашей оболочки существуют различные трюки для экспорта переменных, заданных в скрипте, в родительскую среду.) Включение установки в файл, интегрированный с вашими существующими скриптами сборки, упростит управление и тестирование (т. Е. Его можно тестировать вне Hudson), а также дать вам простой способ вызывать ваши скрипты локально.

Вы также можете рассмотреть возможность разделения унифицированной сборки на отдельные задания, которые выполняют каждую из описанных вами конфигураций. Несмотря на то, что они могут ссылаться на сценарий центральной сборки, типы CONFIG, которые вы определили, похоже, что они должны быть отдельными действиями и заслуживают отдельных заданий.

+0

Я дам вам точку, но это не поможет. Какие трюки вы знаете о том, что позволяет мне изменить среду вызывающего процесса (java, запустив Hudson)? Я пробовал использовать SETX, а также вызывать метод SetEnvironmentVariable .NET.Оба они работают, но ни один из них не может повлиять на набор переменных среды вызывающего процесса. Поэтому последующие вызовы по моим разрозненным шагам сборки не видят изменений. То, что я действительно ищу, похоже на плагин SetEnv, за исключением того, что он должен допускать немного структурированного программирования вокруг него. – roufamatic 2010-12-03 08:42:56

+0

Итак, вы говорите, что он не работает с использованием `setx` на первом этапе сборки и получает переменные во втором шаге сборки? – 2010-12-03 12:25:59