пакет dotnet или пакет nuget на Gitlab CI - PullRequest
0 голосов
/ 11 сентября 2018

Я использую GitLab и мне нужно создать скрипт .gitlab-ci.yml для запуска конвейера непрерывной интеграции для проекта, который генерирует пакет nuGet.

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

Должен ли я использовать dotnet pack или nuget pack?

nuget.exe недоступен в качестве команды, пока мой CI-скрипт не загрузит его (я использую GitLab, поэтому мне нужно было бы добавить что-то на .gitlab-ci.yml для этого). Насколько я понимаю, dotnet неявно использует nuget, поэтому нет необходимости использовать напрямую nuget.

Проблема с командой dotnet pack в том, что я не могу ссылаться на файл nuspec, он просто игнорируется.

Я пытался с

dotnet pack 'MyProject.Nuget/MyProject.Nuget.csproj' /p:NuspecFile='MyProject.Nuget/MyProject.NuGet.nuspec' /p:PackageVersion=$VERSION --output nupkgs

Любая надежная документация о том, что является правильным подходом для последней версии (dotnet --version - это 2.1.401), будет принята с благодарностью, так как я не могу создать действительные пакеты nuGet, которые содержат несколько dll.

UPDATE : Альтернатива:

nuget pack ./*NuGet/*.nuspec -Version $VERSION -OutputDirectory pepe -Prop Configuration=Release -NoDefaultExcludes -Verbosity detailed

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Теперь я успешно собираю пакеты nuGet из CI / CD на GitLab для своих основных приложений dotnet.

Что нужно учитывать:

  • Пути важны: в моем nuspec были пути в стиле \ windows. Мне нужно было изменить их на стиль Linux /. Убедитесь, что ваш раздел src для файлов ссылается на dll и pdb, которые существуют по указанным путям, иначе вы получите исключение при создании nuget, потому что он ничего не найдет. Так что мой nuspec теперь выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>ToolBelt.Application</id>
    <version>1.0.0</version>
    <authors>TUI</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Shared Contracts and Model for the Application layer</description>
    <projectUrl>https://gitlab.tuiwestern.eu/SalesDistribution/_common-packages/ToolBelt.Application</projectUrl>
  </metadata>
  <files>
    <file src="bin/*/netstandard2.0/ToolBelt.Application.Model.dll" target="lib/netstandard2.0" />
    <file src="bin/*/netstandard2.0/ToolBelt.Application.Model.pdb" target="lib/netstandard2.0" />
    <file src="bin/*/netstandard2.0/ToolBelt.Application.Contracts.dll" target="lib/netstandard2.0" />
    <file src="bin/*/netstandard2.0/ToolBelt.Application.Contracts.pdb" target="lib/netstandard2.0" />
  </files>
</package>
  • В проекте должен быть .gitlab-ci.yml, который содержит все этапы сборки, запускает generate nuget и помещает его в репозиторий nuget (в моем случае в Artifactory). Пример:
#Stages
stages:
  - ci
  - codequality
  - build
  - publish

#Global variables
variables:
  GIT_STRATEGY: $STRATEGY
  BUILD_NUMBER: $CI_PIPELINE_ID

#Jobs
ci:
  image: ocp-golden-images.artifactory.mycompany.eu/gitlab-runner-nuget-dotnet-core:latest
  stage: ci
  script:
    - export VERSION=$(echo $(date +"%Y.%-m%d").$CI_PIPELINE_ID)
    - export NUGET_PACKAGE_FOLDER=nupkgs
    - dotnet build --configuration Release
    - dotnet vstest ./*Tests/bin/Release/**/*Tests.dll
    - mkdir $NUGET_PACKAGE_FOLDER
    - nuget pack ./*NuGet/*.nuspec -Version $VERSION -OutputDirectory $NUGET_PACKAGE_FOLDER -Prop Configuration=Release -NoDefaultExcludes -Verbosity detailed
    - cd $NUGET_PACKAGE_FOLDER
    - dotnet nuget push *.$VERSION.nupkg -s https://artifactory.mycompany.eu/artifactory/api/nuget/MyRepo

Итак, это все команды, необходимые для построения проекта со структурой, подобной:

myApp
-ToolBelt.Application.Nuget
--ToolBelt.Application.Nuget.nuspec
-ToolBelt.Application.Contracts
-ToolBelt.Application.Model
-ToolBelt.Application.Model.UnitTests

, где проект, содержащий nuspec (например, ToolBelt.Application.Nuget), ДОЛЖЕН иметь зависимость от каждого проекта, который требуется включить в пакет (например, ToolBelt.Application.Contracts и ToolBelt.Application.Model)

0 голосов
/ 11 сентября 2018

Вы должны проверить журналы сборки на наличие ошибок. Может быть, есть некоторые из его подарков. Я попытался создать пакет и использовал следующее: 1. Структура каталогов

solution \
   interfaces
       bin
           debug
               netcore2.1
                   interfaces.dll
                   common.dll
                   configuration.dll
           interfaces.nuspec
       interfaces.csproj
       IService.cs
   models
   configuration

2. Содержание Nuspec:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
    <metadata>
        <id>Interfaces</id>
        <version>1.0.0</version>
        <authors>Interfaces</authors>
        <owners>Interfaces</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Package Description</description>
    </metadata>
    <files>
        <file src="netstandard2.0\Common.dll" target="lib\netstandard2.0\Common.dll" />
        <file src="netstandard2.0\Configuration.dll" target="lib\netstandard2.0\Configuration.dll" />
        <file src="netstandard2.0\Interfaces.dll" target="lib\netstandard2.0\Interfaces.dll" />
        <file src="netstandard2.0\Models.dll" target="lib\netstandard2.0\Models.dll" />
    </files>
</package>

3. Из папки решения \ интерфейсы я запускаю:

dotnet pack interfaces.csproj /p:NuspecFile="bin\debug\interfaces.nuspec"

И все хорошо, nupkg содержит все * .dll. Но если что-то не так (например, пути), я получаю ошибки.

...