我有一个我以前通过AppVeyor构建的项目。构建顺序如下:
最后一步是通过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'值='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作为目标并获得版本号。
您看过Fake GitVersionHelper吗?http://fsharp.github.io/FAKE/apidocs/fake-gitversionhelper.html
#r "packages/FAKE/tools/FakeLib.dll"
open Fake
open Fake.GitVersionHelper
let version = GitVersion (id)
printfn "FullSemVer %s" version.FullSemVer
printfn "NuGetVersionV2 %s" version.NuGetVersionV2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句