如何在Travis CI中部署nuget包?

cid*_*ack 9 deployment nuget travis-ci

我有一个运行Travis CI的nuget包.这是我的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
Run Code Online (Sandbox Code Playgroud)

理想情况下,当它在主分支上运行时,如果成功,它将根据需要部署nuget包.解决方案中已有Nuget项目,其中包含每个包的文件Package.nuspecNuGet.config文件.我试过让它自己部署并且没有取得多大成功 - 通常我遇到了身份验证方面的问题,但并不是唯一的问题.我想知道是否有人在Travis中部署了这样的nuget包以及他们是如何做到的.

cid*_*ack 13

经过多次摆弄和实验,我终于找到了解决方案.

.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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

以下是一些需要记住的关键事项:

  1. 不要忘记skip_cleanup: true- 这允许您重用以前的构建命令结果为您的nuget包
  2. chmod +x ./deploy/deploy.sh允许脚本可执行
  3. 将您的API Key和Source作为Travis环境变量放置.特别是对于API密钥,请确保它们标记为不在输出中显示
  4. 您的构建可能不同(不使用nunit进行测试,只使用1个软件包进行发布等),但部署过程应该类似.