Как объявить глобальную переменную в Jenkins и использовать ее в задаче MSBuild в каждом отдельном проекте

Я конвертирую нашу платформу CI из CruiseControl в Jenkins и, похоже, не могу понять что - то, что, похоже, должно быть относительно простым (отказ от ответственности-я не эксперт по CI или автоматизации сборки, но это было сброшено мне на колени, и я нахожу это интересным)

в CruiseControl я могу объявлять такие переменные:

<cb:define rootdir="J:SOURCES" />
<cb:define logdir="J:SOURCESbuildlogs" />
<cb:define iisdir="J:IIS" />
<cb:define artifacts="artifacts" />

затем используйте их как часть задачи MSBuild

<msbuild>
      <executable>C:WindowsMicrosoft.NETFrameworkv4.0.30319MSBuild.exe</executable>
      <workingDirectory>$(rootdir)$(ProjectName)</workingDirectory>
      <projectFile>$(ProjectName).sln</projectFile>
      <buildArgs>/p:BuildDate="1";OutDir="$(iisdir)$(ProjectName)bin";WebProjectOutputDir="$(iisdir)$(ProjectName)"</buildArgs>
      <targets>Rebuild;$(ProjectName)</targets>
      <timeout>180</timeout>
      <logger>C:Program Files (x86)CruiseControl.NETserverThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>

если корневые или IIS каталоги изменяются, это может легко быть приложенным ко всем проектам сразу. У нас есть ~60 проектов настройки, поэтому выполнение этого проекта по проекту будет очень трудоемким. Перенося это на Дженкинса, аргументы командной строки MSBuild теперь выглядят так (частичный образец, но включает то, что имеет значение):

OutDir="J:IISProjectNamebin";WebProjectOutputDir="J:IISProjectName"

каталог IIS жестко закодирован. Мне нужно что-то вроде этого:

OutDir="${IIS_DIR}ProjectNamebin";WebProjectOutputDir="${ITEM_ROOTDIR}ProjectName"

есть ли способ сделать это? Я попробовал плагин нарезки конфигурации, который полезен, но не подходит это нужно из того, что я вижу

2 ответов


для глобальных переменных вам нужно плагин EnvInject. Это позволяет (среди прочего) настраивать переменные на глобальном (узловом) уровне, на уровне задания или в качестве шага. Можно задать переменные напрямую, или из файла свойств, или из скриптов.

после установки переменные доступны в качестве переменных среды для остальных Дженкинсов и его шагов (в пределах области).

для передачи аргументов в MSBuild при настройке шага MSBuild, есть возможность передать "аргументы командной строки" в формате /p:Param=Value.

"значение" может быть переменной среды. В среде Windows вы бы назвали его %myvar%

Итак, если вы настраиваете глобальный GLOBAL_IIS_DIR=C:\path\to\IIS используя EnvInject, вы можете ссылаться на него в командной строке с помощью /p:IIS_DIR=%GLOBAL_IIS_DIR%


вы можете сделать это со встроенной функциональностью Дженкинса:

enter image description here

затем вам нужно развернуть переменную. Это, на самом деле, зависит от того, где вы его используете.

например: %MSBuild% и %IIS_DIR% для шага сборки" выполнить пакетную команду windows". Другие шаги сборки (и плагины) могут использовать его по-разному.