如何从 AppVeyor 发布 beta nuget 包
How to publish beta nuget packages out of AppVeyor
这是我试图在 AppVeyor 中实现的行为
- 构建代码(用
1.2.3.{build}
标记 AssemblyInfo)
- 测试代码
- 如果测试通过则创建 nuget 包
- 如果包创建成功则发布 beta 包 (
1.2.3-beta-{build}
)
- 同时使包在工件中可用。
理想情况下,在发布 nuget 包时,它将作为预发布版发布。在 NuGet 中,这是通过在包版本的末尾添加字母字符来完成的。覆盖现有包也被认为是不好的做法(实际上,许多 nuget 实现不允许这样做)。
AppVeyor 在构建和测试软件方面做得很好 github,但我似乎无法控制 nuget 包版本。
鉴于:
具有下一个语义版本 1.2.3 的包
我希望 AppVeyor {version} 变量等于 1.2.3.{build}
我希望 nuget 包版本等于 1.2.3-beta-{build}
我尝试的第一件事是在 {version}
框中使用变量。显然这是不允许的。 AppVeyor 似乎只对 {branch}
和 {build}
作为 {version}
的一部分进行变量替换。这意味着我必须为语义版本维护一个单独的变量。
我 运行 面临的下一个挑战是无法通过 UI 设置 nuget 包版本。它希望默认与 AppVeyor 构建版本相同。
我决定在测试后尝试使用 Powershell 创建包 运行。这可行,但 Nuget 发布步骤想要 运行 在创建包之前,似乎没有办法控制执行顺序。
我想我走错了路。我需要一个概念上的重置。
这是我的 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
这是我试图在 AppVeyor 中实现的行为
- 构建代码(用
1.2.3.{build}
标记 AssemblyInfo) - 测试代码
- 如果测试通过则创建 nuget 包
- 如果包创建成功则发布 beta 包 (
1.2.3-beta-{build}
) - 同时使包在工件中可用。
理想情况下,在发布 nuget 包时,它将作为预发布版发布。在 NuGet 中,这是通过在包版本的末尾添加字母字符来完成的。覆盖现有包也被认为是不好的做法(实际上,许多 nuget 实现不允许这样做)。
AppVeyor 在构建和测试软件方面做得很好 github,但我似乎无法控制 nuget 包版本。
鉴于:
具有下一个语义版本 1.2.3 的包
我希望 AppVeyor {version} 变量等于 1.2.3.{build}
我希望 nuget 包版本等于 1.2.3-beta-{build}
我尝试的第一件事是在 {version}
框中使用变量。显然这是不允许的。 AppVeyor 似乎只对 {branch}
和 {build}
作为 {version}
的一部分进行变量替换。这意味着我必须为语义版本维护一个单独的变量。
我 运行 面临的下一个挑战是无法通过 UI 设置 nuget 包版本。它希望默认与 AppVeyor 构建版本相同。
我决定在测试后尝试使用 Powershell 创建包 运行。这可行,但 Nuget 发布步骤想要 运行 在创建包之前,似乎没有办法控制执行顺序。
我想我走错了路。我需要一个概念上的重置。
这是我的 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