2017-01-06 9 views
5

У меня есть пакет nuget, который запускает Travis CI для своих сборок. Вот мой YML:Как развернуть пакеты nuget в Travis CI?

language: csharp 
solution: TreasureGen.sln 
install: 
    - nuget restore TreasureGen.sln 
    - nuget install NUnit.Runners -OutputDirectory testrunner 
script: 
    - xbuild TreasureGen.sln /p:TargetFrameworkVersion="v4.5" /p:Configuration=Stress 
    - mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Unit/bin/Stress/TreasureGen.Tests.Unit.dll 
    - mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.IoC/bin/Stress/TreasureGen.Tests.Integration.IoC.dll 
    - mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.Tables/bin/Stress/TreasureGen.Tests.Integration.Tables.dll 
    - mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.Stress/bin/Stress/TreasureGen.Tests.Integration.Stress.dll 

В идеале, когда это работает на главной ветви, если он успешен, он будет затем развернуть пакеты NuGet по мере необходимости. В решении уже есть проекты Nuget, которые содержат Package.nuspec и NuGet.config файлов для каждой упаковки. Я попытался заставить его развернуть себя и не имел большого успеха - обычно у меня возникают проблемы с аутентификацией, но не исключительно. Мне было интересно, если кто-то здесь развернул пакеты nuget, подобные этому в Travis, и как они это сделали.

+0

Здравствуйте. Я надеюсь, что вы нашли решение своей проблемы, но если нет, я предложу эту статью http://timveletta.com/2017-04-03-building-and-deploying-your-nuget-package-with-travis- ci/ – methgaard

+0

Спасибо methgaard - статья полезна, но, к сожалению, она не подходит. Это не позволило мне указать, что нужно публиковать только отдельные ветви (master), и не имеет возможности вытащить версию сборки из файла nuspec (возможно, это возможно, просто не сразу видно). – cidthecoatrack

+0

Ну, что касается публикации определенной ветви, это должно быть сделано с тегом ветки в вашем '.travis.yaml'? – methgaard

ответ

7

После долгих возиться и экспериментировать я наконец нашел решение.

.travis.yml

language: csharp 
solution: TreasureGen.sln 
install: 
    - nuget restore TreasureGen.sln 
    - nuget install NUnit.Runners -OutputDirectory testrunner 
script: 
    - xbuild TreasureGen.sln /p:TargetFrameworkVersion="v4.5" /p:Configuration=Stress 
    - mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Unit/bin/Stress/TreasureGen.Tests.Unit.dll 
    - mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.IoC/bin/Stress/TreasureGen.Tests.Integration.IoC.dll 
    - mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.Tables/bin/Stress/TreasureGen.Tests.Integration.Tables.dll 
    - mono ./testrunner/NUnit.ConsoleRunner.*/tools/nunit3-console.exe ./TreasureGen.Tests.Integration.Stress/bin/Stress/TreasureGen.Tests.Integration.Stress.dll 
deploy: 
    skip_cleanup: true 
    provider: script 
    script: chmod +x ./deploy/deploy.sh && ./deploy/deploy.sh $NUGET_API_KEY $NUGET_SOURCE 
    on: 
    branch: master 

deploy.sh

ApiKey=$1 
Source=$2 

nuget pack ./TreasureGen/TreasureGen.nuspec -Verbosity detailed 
nuget pack ./TreasureGen.Domain/TreasureGen.Domain.nuspec -Verbosity detailed 

nuget push ./DnDGen.TreasureGen.*.nupkg -Verbosity detailed -ApiKey $ApiKey -Source $Source 
nuget push ./DnDGen.TreasureGen.Domain.*.nupkg -Verbosity detailed -ApiKey $ApiKey -Source $Source 

Вот некоторые из ключевых вещей, чтобы помнить:

  1. Не забывайте skip_cleanup: true - это позволяет повторно использоватьваши предыдущие результаты команды сборки для вашего NuGet пакета
  2. chmod +x ./deploy/deploy.sh позволяет скрипт быть исполняемым
  3. Поместите ключ API и источник в качестве переменных окружения Travis. Особенно для ключа API, убедитесь, что они отмечены так, чтобы они не отображались на выходе.
  4. Ваша сборка может отличаться (не используя nunit для тестов, только 1 пакет для публикации и т. Д.), Но процесс развертывания должен быть аналогичным.
+0

Мне также пришлось добавить в качестве первого шаг в моем разделе «сценарий» команда, чтобы обновить сам NuGet: '' ' - Судо NuGet обновить -self ' '' иначе NuGet не принимает мой пакет, потому что версия клиента была слишком стара. –

0

Принятый ответ не помог мне (я не знаю почему). Вот что сработало.

language: csharp 
solution: [SolutionName].sln 
install: 
    - curl -L -o nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe 
    - mono nuget.exe restore [SolutionName].sln 
script: 
    - xbuild /p:Configuration=Release [SolutionName].sln 
    - mono nuget.exe pack ./[NuspecName].nuspec 
    - mono nuget.exe setApiKey $NUGET_API_KEY -Source $NUGET_SOURCE -Verbosity quiet 
    - mono nuget.exe push [SolutionName].*.nupkg -Source $NUGET_SOURCE 

$NUGET_SOURCE, $NUGET_API_KEY переменные среды, определенные в Travis.