4

AppVeyorで達成しようとしている動作は次のとおりです

  1. コードをビルドします (AssemblyInfo に をスタンプします1.2.3.{build}) 。
  2. コードをテストする
  3. テストに合格した場合は、nuget パッケージを作成します
  4. パッケージが正常に作成された場合は、ベータ パッケージを公開します ( 1.2.3-beta-{build})
  5. また、アーティファクトでパッケージを使用できるようにします。

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 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 }

これを修正するにはどうすればよいですか? 希望する動作を取得できますか?

4

1 に答える 1

6

バージョン番号を制御するには、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
于 2015-12-14T19:34:26.880 に答える