這裏是我想在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 }
我該如何解決這個問題?我能得到我想要的行爲嗎?
這是我想的。但是,$ env:NuGetVersion不用於創建nuget包。 試圖從「Odin.nuspec」構建包。替換令牌「版本」沒有任何價值。 請參閱https://ci.appveyor.com/project/crmckenzie/odin –
實際上,我現在在那裏看到after_build事件。讓我嘗試一下。 –
我不得不稍微調整yml文件,但你的答案讓我有95%的方式。 以下是最終文件的鏈接:https://gist.github.com/crmckenzie/ad79d97eb7a24ffc025a –