我有一個項目,我通過AppVeyor來構建。構建順序如下:如何使用GitVersion環境變量
- 安裝和運行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設置的。
添加環境變量。 name ='GitVersion_SemVer' value ='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作爲目標並獲取版本號。
基本問題是,當你運行腳本時,它看起來像是有一組不同的環境變量。您可能需要檢查shell.exec調用,看看您是否可以在那裏訪問環境變量 –
hm,這是有道理的,我會試試看。 –