2017-01-06 71 views
5

Yapımları için Travis CI çalıştıran bir nuget paketim var. Bu, ana dal üzerinde çalışan Eğer başarılı olursa gerektiği gibi, o zaman Nuget paketlerini dağıtmak ne zamanNuget paketlerini Travis CI'de nasıl dağıtabilirim?

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 

İdeal: İşte benim yml olduğunu. Her paket için Package.nuspec ve NuGet.config dosyaları içeren çözümde zaten Nuget projeleri vardır. Kendimi dağıtmaya çalıştım ve çok fazla başarı elde edemedim - tipik olarak yalnızca kimlik doğrulama ile ilgili sorunlara girdim, ama sadece değil. Buradaki hiç kimse Travis gibi nuget paketlerini konuşturup dağıtılmadığını merak ediyordum.

+0

Hello. Umarız sizin sorununuza bir çözüm bulmuşsunuzdur, ancak bu makaleyi öneremediğim takdirde http://timveletta.com/2017-04-03-building-and-deploying-your-nuget-package-with-travis- ci/ – methgaard

+0

Methgaard'a teşekkürler - makale faydalıdır, ancak maalesef yetersiz kalmaktadır. Sadece belirli dalları (master) yayınlamak için izin vermeme izin vermez ve bir nuspec dosyasından derleme sürümünü çekmenin bir yolu yoktu (muhtemelen hemen yapılabilir değil) – cidthecoatrack

+0

Belirli bir dalı yayınlamakla ilgili olarak, bu .travis.yaml'de dal etiketi ile yapılmalı mı? – methgaard

cevap

7

Çok işlerden ve deneylerden sonra sonunda bir çözüm buldum.

.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 İşte

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 

kilit bazı şeyleri hatırlamak şunlardır:

  1. skip_cleanup: true unutma - Bu, 01'i tekrar kullanmanıza olanak tanırkomut çalıştırılabilir
  2. yerleştirin API Anahtarı ve Kaynak Travis ortam değişkenleri olarak olmak için Nuget paketinin
  3. chmod +x ./deploy/deploy.sh için önceki yapı komut sonuçları verir. Özellikle API Anahtarı için, bunların çıkışta gösterilmeyecek şekilde işaretlendiğinden emin olun
  4. Yapınız farklı olabilir (testler için rahibe, yayınlamak için sadece 1 paket kullanmamak gibi), ancak dağıtım işlemi benzer olmalıdır.
+0

'a dağıtımını desteklemiyordu. sudo müşterinin sürümü çok eski olduğu için -Self '' ' aksi Nuget paketimi kabul etmeyecektir güncellemek Nuget - ' '' : my "komut dosyası" bölümünde adım bir komut Nuget kendisi güncellemek için. –

0

Kabul edilen cevap benim için çalışmadı (nedenini bilmiyorum). Çalışılan şey aşağıdadır.

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 tanımlanan ortam değişkenlerdir.