如何发布测试版的NuGet包在AppVeyor
问题描述:
这里是我想在AppVeyor如何发布测试版的NuGet包在AppVeyor
- 构建代码(邮票集信息与
1.2.3.{build}
) - 测试代码
- 创建实现行为nuget包如果测试通过
- 如果包成功创建,发布测试包(
1.2.3-beta-{build}
) - 也使包在工件中可用。
理想情况下,当发布nuget包时,它将作为预发布发布。在NuGet中,这是通过在封装版本的末尾添加字母字符来完成的。覆盖现有的软件包也被认为是不好的做法(事实上,许多nuget实现不允许这样做)。
AppVeyor在构建和测试github软件方面做得很好,但我似乎无法控制nuget软件包的版本。
考虑: 一个包与1.2.3 下一版本的语义我期望的AppVeyor {}版本变量等同于1.2.3.{build}
我期望的NuGet包版本等同于1.2.3-beta-{build}
第一我尝试的是在{version}
框中使用变量。显然这是不允许的。 AppVeyor似乎只做{branch}
和{build}
的变量替换,作为{version}
的一部分。这意味着我必须为语义版本维护一个单独的变量。
我遇到的下一个挑战是无法通过UI设置nuget包版本。它想要默认与AppVeyor构建版本相同。
我决定尝试在测试运行后使用Powershell创建软件包。这是有效的,但Nuget Publish步骤希望在创建包之前运行,似乎没有办法控制执行顺序。
我想我走错了路。我需要一个概念重置。
这是我在其目前的(不正确)状态appveyor.yml:
version: 0.1.0.{build}
configuration: Release
assembly_info:
patch: true
file: '**\AssemblyInfo.*'
assembly_version: '{version}'
assembly_file_version: '{version}'
assembly_informational_version: '{version}'
environment:
packageVersion: 0.1.0
nuget:
account_feed: true
project_feed: true
disable_publish_on_pr: true
before_build:
- ps: nuget restore
build:
verbosity: minimal
artifacts:
- path: '*.nupkg'
name: nuget package
deploy:
- provider: NuGet
api_key:
secure: blahblahblah
artifact: '*.nupkg'
on:
branch: master
on_success:
- ps: >-
$releaseVersion= $env:packageVersion
$buildNumber = $env:APPVEYOR_BUILD_NUMBER
$betaVersion= "$releaseVersion-beta-$buildNumber"
nuget pack Odin.nuspec -version $betaVersion
Get-ChildItem .\*.nupkg | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
我该如何解决这个问题?我能得到我想要的行为吗?
答
您可以使用PowerShell和AppVeyor API来控制版本号。我会尝试编写appveyor.yml
,如下所示:
version: 0.1.0.{build}
environment:
packageVersion: 0.1.0
init:
- ps: $env:buildVersion = "$env:packageVersion.$env:appveyor_build_number"
- ps: $env:nugetVersion = "$env:packageVersion-beta-$env:appveyor_build_number"
- ps: Update-AppveyorBuild -Version $env:buildVersion
assembly_info:
patch: true
file: '**\AssemblyInfo.*'
assembly_version: '$(buildVersion)'
assembly_file_version: '$(buildVersion)'
assembly_informational_version: '$(nugetVersion)'
configuration: Release
nuget:
account_feed: true
project_feed: true
disable_publish_on_pr: true
before_build:
- nuget restore
build:
verbosity: minimal
after_build:
- nuget pack Odin.nuspec
artifacts:
- path: '*.nupkg'
deploy:
- provider: NuGet
api_key:
secure: blahblahblah
artifact: '*.nupkg'
on:
branch: master
这是我想的。但是,$ env:NuGetVersion不用于创建nuget包。 试图从“Odin.nuspec”构建包。替换令牌“版本”没有任何价值。 请参阅https://ci.appveyor.com/project/crmckenzie/odin –
实际上,我现在在那里看到after_build事件。让我尝试一下。 –
我不得不稍微调整yml文件,但你的答案让我有95%的方式。 以下是最终文件的链接:https://gist.github.com/crmckenzie/ad79d97eb7a24ffc025a –