VSO Build vNext - Шаг сборки пакета Nuget - Используйте номер сборки для версии пакета

У меня формат номера сборки указан как:

$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)

Это создает номера сборки в формате «BuildDefinitionName_2015.11.11.1».

Где ревизия - это количество запусков сборки за этот день.

Я хотел бы иметь возможность использовать это значение в дальнейших этапах сборки.

Например, я создаю пакет nuget с шагом упаковщика nuget и использую опцию «Использовать номер сборки для версии пакета».

Это создает мне пакеты, похожие на это "PackageName.2015.11.11.1.nupkg"

Затем я хочу использовать шаг сборки nuget publisher для публикации этого, но проблема в том, что со временем вы получаете более одного пакета в папке пакетов, а шаг nuget publisher использует шаблон для сопоставления пакетов для публикации.

ie

  • "PackageName.2015.11.11.1.nupkg"
  • "PackageName.2015.11.11.2.nupkg"
  • "PackageName.2015.11.11.3.nupkg"

Не указывая явно файл для публикации, шаг издателя опубликует все эти файлы.

Я не хочу этого, я просто хочу, чтобы он опубликовал файл, соответствующий текущему номеру сборки.

Поэтому я хотел бы иметь возможность устанавливать части номера сборки в шаблоне.

ie PackageName.$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r).nupkg

Но похоже, что эти переменные не заменяются в пути поиска и проходят буквальное совпадение.

Кажется странным, что на этапе пакета nuget он дает вам возможность создавать пакеты по номеру сборки, но затем не позволяет вам сопоставить это на этапе сборки публикации nuget.


person Kramer00    schedule 11.11.2015    source источник


Ответы (2)


Шаг Nuget Packager использует сценарий PowerShell для получения номера сборки. Исходный код находится здесь: .com / Microsoft / vso-agent-tasks / blob / 84746169f19b7c3e3f67c0efa1a546c4107055fa / Tasks / NugetPackager / NuGetPackager.ps1

Если вы действительно хотите передать номер сборки в Nuget Publish, вы можете добавить шаг PowerShell в процесс сборки, чтобы получить номер версии сборки. Подробнее см. Код, связанный с версией сборки, в исходном коде.

И в конце скрипта PowerShell добавьте код:

Write-Host "##vso[task.setvariable variable=bversion;]$NewVersion"

Этот код создает переменную «bversion» с заполненным номером версии сборки. Затем вы можете использовать переменную $ (bversion) на этапе публикации Nuget.

person Eddie Chen - MSFT    schedule 12.11.2015
comment
Другой способ объясняется в этом ответном ПО stackoverflow.com/questions/36630654/ - person Flatlineato; 03.02.2017

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

В противном случае есть переменная $ (build.buildnumber), которая содержит расширенное значение номера сборки, но пока у вас есть дополнительно $ (BuildDefinitionName) в номере сборки, вы не сможете использовать его в качестве имени файла. Список доступных предопределенных переменных см. здесь .

person Pascal Berger    schedule 11.11.2015
comment
Я согласен, я уже думал о том, чтобы убедиться, что ничего не существует в начале каждой сборки, и сейчас делаю это как обходной путь, мне просто странно, что это явный параметр на этапе пакета, но вы не можете его использовать на этапе публикации. - person Kramer00; 11.11.2015
comment
Проблема с вводом шаблона в NuGet Publisher заключается в том, что раскрываются только переменные (например, те, которые определены на странице переменных). Специальные переменные для формата номера сборки, такие как $ (Год), $ (Месяц), $ (DayOfMonth) и $ (Rev), не поддерживаются. Вы можете решить проблему здесь - person Pascal Berger; 11.11.2015