2016-10-19 6 views
-1

Я тестирую Octopus Deploy (3.4.12) и хочу автоматически использовать номер сборки из имени сборки MS в качестве моего имени пакета NuGet. Например, если мой последний MSBuild падение имя и мое имя приложения «MyApp Build_20161019.2» является MyApp, то я хочу, чтобы мой пакет будет называться MyApp.20161019.2.0.nupkgКак получить номер сборки MSBuild в имени пакета NuGet с помощью OctoPack?

Причина в том, что версия сборки приложения не изменяется (исторические причины, не отрицательные), поэтому, если я вручную не передаю номер сборки в OctoPack в качестве параметра сборки каждый раз (который принимает блеск автоматически упаковка IMO), я не могу загрузить пакет в библиотеку Octopus.

Я использую определение сборки TFS XAML для старой школы.

Я должен отметить, что я нашел блог, который сказал, чтобы создать пользовательский шаблон сборки и изменить пункт Run MSBuild, так что PARAMS являются

String.Format("/p:SkipInvalidConfigurations=true {0} /p:OctoPackPackageVersion={1}", AdvancedBuildSettings.GetValue(Of String)("MSBuildArguments", String.Empty), BuildDetail.BuildNumber.Split(CChar("_"))(1)) 

и следуют шаги, но он не в состоянии построить и дает следующее сообщение об ошибке:

Validation Error: The private implementation of activity '1: DynamicActivity' has the following validation error: Compiler error(s) encountered processing expression "String.Format("/p:SkipInvalidConfigurations=true {0} /p:OctoPackPackageVersion={1}", AdvancedBuildSettings.GetValue(Of String)("MSBuildArguments", String.Empty), BuildDetail.BuildNumber.Split(CChar("_"))(1))". 'Microsoft.TeamFoundation.Build.Client.BuildDetail' is not accessible in this context because it is 'Friend'.

ответ

1

ОК, я узнал, как сделать это с помощью аналогичного вопроса, который был связан с Git строит: Add BuildNumber in GitTemplate.12.xaml

WARNING!! AFAIK you're going to need VS2013 for this. You can't do it in VS2015.

Для полноты я перечисляю все пылающие обручи шагов, которые я должен был перейти пройти.

первая попытка:

Я попытался просто установить номер пакета OctoPack используя TF_BUILD переменную окружения TF_BUILD_BUILDNUMBER, предоставляя следующие аргументы MsBuild

/p:RunOctoPack=true /p:OctoPackPackageVersion=”$(TF_BUILD_BUILDNUMBER)”

но TF_BUILD_BUILDNUMBER включает текст (название из приложение, я думаю), а также число, например CIBuild_20130613.6, вызвавший ошибку NuGet, поскольку NuGet может работать только с числами. Также я действительно хочу только 20130613.6 часть в любом случае.

вторая попытка:

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

enter image description here

Далее я переименовал шаблон OctoPackBuild.xaml и добавить его в TFS.Я помещал его в папку BuildProcessTemplates отдельно от проекта, который я хотел создать, так как этот шаблон можно использовать для любого проекта.

Технически вы должны создать проект библиотеки деятельности рабочего процесса и добавить шаблон в проект, а затем проверить проект в TFS, но я счел это ненужным. Обратитесь к msdn article, если вы хотите отправиться на целый боров.

После того, как файл xaml находится в TFS, вам необходимо отредактировать его в Visual Studio, чтобы получить ссылку на номер сборки. Следующие шаги пришли из ответа на вопрос this msdn question.

а) Проверьте файл OctoPackBuild.xaml и открыть его в Visual Studio 2013.

б) Перейдите на вкладку Импорт в нижней части редактора XAML, и добавить ссылку на Microsoft.TeamFoundation.Build. Activities.Extensions.

enter image description here

с) Нажмите на контейнер «Общий процесс сборки» в редакторе XAML, а затем перейдите на вкладку Переменные в нижней части. Добавьте переменную BuildDetail, и установить его тип, чтобы быть IBuildDetail

enter image description here

d) Из панели инструментов, перетащите GetEnvironmentVariable активность только после Update Номер сборки активности, и установите тип в be IBuildDetail. Отредактируйте свойства активности; установите свойство Имя в WellKnownEnvironmentVariables.BuildDetail, отображаемое имя для «Получить Построить Детали» (или что-то плывет лодка), и результат в BuildDetail < - это имя переменную, которую вы создали.

enter image description here

е) Теперь, когда у вас есть доступ к объекту BuildDetail, вы можете передать свойство BuildNumber в MSBuild. Сделайте это, отредактировав CommandLineArguments свойство деятельности «Run MsBuild» и установите значение

String.Format("/p:SkipInvalidConfigurations=true {0} /p:OctoPackPackageVersion={1}", AdvancedBuildSettings.GetValue(Of String)("MSBuildArguments", String.Empty), BuildDetail.BuildNumber.Split(CChar("_"))(1)) 

Следует отметить, что BuildDetail теперь со ссылкой на переменную, а не «Microsoft.TeamFoundation. Build.Client.BuildDetail.

Кроме того, важно понимать, что существует предположение, что BuildNumber находится в формате [текста] _ [числа]. Таким образом, функция Split удаляет текстовую часть и передает только числа OctoPack. Если вы не разделили BuildNumber, вы бы вызвали проблему NuGet, о которой я упоминал в своей первой попытке. Это также означает, что если вы добавите дополнительное подчеркивание в свое имя сборки, вам нужно будет выбрать элемент # 2, а не # 1.

f) Проверьте настроенный шаблон сборки (OctoPackBuild.xaml) обратно в TFS.

g) Затем вам нужно отредактировать свой процесс сборки, чтобы использовать настраиваемый шаблон вместо стандартного.

Причина, по которой вы не можете использовать VS2015 для этого упражнения, заключается в том, что пользовательский интерфейс не позволит вам выбрать файл xaml из TFS. Похоже, что у MS закончилось сокращение бюджета, и часть пользовательского интерфейса была разорена.

VS2010 также не работает, поскольку он не может работать с шаблоном TFS 2013.

Единственный способ, которым я получил его работать, - использовать VS2013 и отредактировать процесс сборки оттуда. VS2013 позволит вам указать новый шаблон и перейти в TFS, чтобы найти файл OctoPackBuild.xaml.

h) Тогда все, что вам нужно сделать в процессе сборки, это добавить/p: RunOctoPack = true для аргументов MSBuild, и все готово.

enter image description here

Надеется, что это помогает кто-то!

+0

@ Cece-MSFT Да, я сделаю это. Я просто должен ждать 2 дня, так как это ответ на мой собственный вопрос. – DeanOC

 Смежные вопросы

  • Нет связанных вопросов^_^