AppVeyor を介してビルドするために使用したプロジェクトがあります。ビルド シーケンスは次のとおりです。
- GitVersion をインストールして実行する
- ビルド プロジェクト
- 評価されたバージョン番号を使用してパッケージを作成します。
最後の手順は、PowerShell コマンドによって実行されました。
nuget pack path/tofile.nuspec -Version (get-item env:GitVersion_InformationalVersion).Value
ご覧のとおり、バージョンは GitVersion によって定義された環境変数から取得されます。ここで、ビルドを FAKE ビルド スクリプトに移行したいと考えています。
これらの依存関係をスクリプトで定義しています。
"Clean"
=?> ("GitVersion", Choco.IsAvailable)
==> "RestorePackages"
==> "BuildApp"
==> "CreatePackage"
==> "Default"
Git バージョンの手順は簡単です。
Target "GitVersion" (fun _ ->
"gitversion.portable" |> Choco.Install id
Shell.Exec("gitversion","/l console /output buildserver" ) |> ignore
)
変数が GitVersion によって設定されていることをログで確認できます。
環境変数の追加。名前='GitVersion_SemVer' 値='1.1.1-xxx'
次のステップは、パッケージを作成することです。
Target "CreatePackage" (fun _ ->
TraceEnvironmentVariables()
let version =
match buildServer with
| AppVeyor -> environVar "GitVersion_SemVer"
| _ -> baseVersion + "-local"
NuGet (fun p ->
{p with
OutputPath = packagingDir
WorkingDir = "."
Version = version
Publish = false })
nuspecFileName
)
定義されたすべての変数を出力しています。その後、変数を読み取って に代入してバージョンを取得しようとしていversion
ます。
残念ながらversion
、ビルドを実行しても空のままです。メソッド呼び出しを追加した後TraceEnvironmentVariables()
、GitVersion で定義された変数が出力に表示されていないことがわかります。
John Palmerとdustinmorisが言ったように、プロセスShell.Execute
はすべての変数をプロセスレベルのものとして設定することによって開始されました。
Shell.Execute
プロセスがグローバルスコープの環境変数を設定できるようにする方法はありますか?
UPD
AppVeyor.yml
回避策として、構成ファイルに次の手順を追加しました。
init:
- git config --global core.autocrlf input
install:
- choco install gitversion.portable -y
before_build:
- ps: gitversion /l console /output buildserver /b (get-item env:APPVEYOR_REPO_BRANCH).Value
build_script:
- cmd: build.bat BuildApp
この場合、変数はグローバル スコープで設定され、それらを取得してビルド スクリプトで使用できます。
明らかに、PowerShell は別の方法で GitVersion を開始します。ビルドスクリプトで何らかの方法で模倣する必要があると思います。
したがって、私の質問は同じままです。スクリプトで GitVersion をターゲットとして使用し、バージョン番号を取得する方法です。