Как я могу автоматически увеличить версию сборки C # через нашу CI-платформу (Hudson)? - PullRequest
110 голосов
/ 14 июля 2009

Я и моя группа ужасно увеличиваем номера версий сборок, и мы часто поставляем сборки с версиями 1.0.0.0. Очевидно, это вызывает много головных болей.

Мы стали намного лучше с нашими практиками на нашей платформе CI , и я бы очень хотел настроить ее на автоматическое увеличение значений в файле assemblyinfo.cs, чтобы версии наших сборки автоматически обновляются с учетом изменений кода в этой сборке.

Ранее я настроил (до того, как мы нашли Hudson ) способ увеличения значения с помощью msbuild или командной строки (не помню), но с Hudson, который будет обновлять SVN хранилище и запуск ДРУГОЙ сборки. Это приведет к медленному бесконечному циклу, так как Хадсон опрашивает SVN каждый час.

Плохо ли делать увеличение номера версии Хадсона? Какой альтернативный способ сделать это?

В идеале, мои критерии для решения должны быть такими:

  • Увеличивает номер сборки в assemblyinfo.cs перед сборкой
  • Увеличивает только номер сборки в сборках, которые изменились. Это может быть невозможно, так как Хадсон стирает папку проекта каждый раз, когда выполняет сборку
  • Передает измененный файл assemblyinfo.cs в хранилище кода (в настоящее время VisualSVN )
  • Не заставляет Хадсона запускать новую сборку при следующем сканировании на наличие изменений

Работая над этим, я мог бы легко найти решение для большинства из них с помощью пакетных файлов / команд, но все мои идеи заставили бы Хадсон запустить новую сборку при следующем сканировании. Я не ищу кого-то, кто сделает все для меня, просто укажи мне правильное направление, возможно, метод, позволяющий Хадсону игнорировать определенные коммиты SVN и т. Д.

Все, что я нашел до сих пор, - это просто статья, объясняющая, как автоматически увеличивать номер версии, ничего не учитывает платформу CI, которая может вращаться в бесконечный цикл.

Ответы [ 12 ]

0 голосов
/ 16 февраля 2015

Я решил использовать несколько методов, используя предварительно собранный скрипт Powershell (https://gist.github.com/bradjolicoeur/e77c508089aea6614af3) для увеличения при каждой успешной сборке, а затем в Global.asax. Я собираюсь что-то вроде этого:

  // We are using debug configuration, so increment our builds.
  if (System.Diagnostics.Debugger.IsAttached)
  {
      string version = System.Reflection.Assembly.GetExecutingAssembly()
                                                       .GetName()
                                                       .Version
                                                       .ToString();

      var psi = new ProcessStartInfo(@"svn", "commit -m \"Version: " + version + "\n \"");
      psi.WorkingDirectory = @"C:\CI\Projects\myproject";
      Process.Start(psi); 
  }

Я все еще думаю, что весь процесс слишком сложен, и я собираюсь изучить более эффективный метод достижения того же результата. Я хотел этого, главным образом, для передачи версии в SVN, а затем в Jenkin's без слишком большого количества дополнительных инструментов.

0 голосов
/ 04 сентября 2012

Это более простой механизм. Это просто включает в себя добавление шага сборки командной задачи Windows перед шагом MSBuild и использование простой программы поиска и замены (FART).

Пакетный шаг

fart --svn -r AssemblyInfo.cs "[assembly: AssemblyVersion(\"1.0.0.0\")]" "[assembly: AssemblyVersion(\"1.0.%BUILD_NUMBER%.%SVN_REVISION%\")]"
if %ERRORLEVEL%==0 exit /b 1
fart --svn -r AssemblyInfo.cs "[assembly: AssemblyFileVersion(\"1.0.0.0\")]" "[assembly: AssemblyFileVersion(\"1.0.%BUILD_NUMBER%.%SVN_REVISION%\")]"
if %ERRORLEVEL%==0 exit /b 1
exit /b 0

Если вы используете управление исходным кодом, отличное от svn, измените параметр --svn на соответствующий для вашей среды scm.

Скачать пердеть

...