Версия пакета NuGet и идентификатор NuGet

У меня есть один Project.sln в моем GitRepo. И мне нужно собрать 4 пакета NuGet с различными конфигурациями (локальная, qa, песочница и производство). Я использую TeamCity с Octopus Deploy.

В TeamCity моя конфигурация сборки имеет следующие этапы сборки:

1) NuGet Installer
2) Build Project.sln with *Local* Configuration
3) NuGet Pack with using .csproj file

4) NuGet Installer
5) Build Project.sln with *QA* Configuration
6) NuGet Pack with using .csproj file

7) NuGet Installer
8) Build Project.sln with *Sandbox* Configuration
9) NuGet Pack with using .csproj file

10) NuGet Installer
11) Build Project.sln with *Production* Configuration
12) NuGet Pack with using .csproj file

И у меня есть следующие проблемы:

1) Когда я использую патчгер AssemblyInfo, он создает только один файл пакета NuGet. На шаге № 3 TeamCity создает пакет с именем 2.2.1.% Build.counter%. И на шаге 6 он создает пакет с тем же именем и перезаписывает его. It does the same on steps 9 and 12. Finally I have only one NuGet package with last configuration (in my case it's Production).

I want to have 4 packages like:

2.2.1.%build.counter%_local
2.2.1.%build.counter%_qa
2.2.1.%build.counter%_sandbox
2.2.1.%build.counter%_production

2) The next problem is with Octopus. When TeamCity makes packages (it makes 4 packages, but without AssemblyInfo patcher), it makes them with the same id (Project) and when I'm trying to Deploy "some" (let it be QA) package to the QA environment, Octopus asks me to select the id of a NuGet package. And it only sees one id - "Project". I think it is the last package created by TeamCity.

2 ответа

Я бы предложил создать конфигурацию TeamCity для каждого необходимого вам пакета NuGet. Или исправьте и соберите вручную вместо встроенной поддержки NuGet.

Вы можете достичь своей цели, создав пакеты nuget (шаг пакета nuget) из файлов.nuspec.

Вот наиболее распространенный пример этого файла (1 из 4 в вашем случае)

<?xml version="1.0"?>
<package xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <id>yourProcjectName.qa</id>
    <version>1.0.0</version>
    <authors>Jay Hamlin</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Simple Description</description>
  </metadata>
  <files>
    <file src="bin\Release\*.dll" target="lib" />
  </files>
</package>
  1. Прежде всего, в разделе "id" укажите собственный идентификатор пакета nuget.
  2. Раздел "Версия" может быть переопределен свойством TeamCity. Вот пример:

введите описание изображения здесь

  1. Пакет Nuget создаст пакет и назовет его из шаблона: {package_id}.{Version}.nupkg (или {version}.{Package_id}.nupkg - я не помню)

  2. Теперь вы должны просто опубликовать свои пакеты на сервере осьминога nuget. Пакет будет иметь то же имя, что и идентификатор, поэтому, если вы создадите 4 разные конфигурации.nuspec, у вас будет 4 пакета с разными именами, но той же версии.

Ps. Вы можете проверить файлы nuspec, открыв их в проводнике пакетов nuget ( ССЫЛКА)

Другие вопросы по тегам