【问题标题】:How fall back to default value if TFS build variables are not set?如果未设置 TFS 构建变量,如何回退到默认值?
【发布时间】:2019-03-22 00:11:09
【问题描述】:

我想创建一个 Powershell 脚本,该脚本既可以在 TFS 上的构建代理上下文中执行,也可以在本地执行。在 TFS 上,可以使用各种predefined build variables,例如$(Build.SourcesDirectory)。同时,该脚本在源代码树中也可用,因此我希望能够在本地运行它,其中未设置这些变量。我发现回退到默认值的最短方法是以下 Try..Catch 块与令人不安的长异常类型:

Try {
    $SourcesDirectory = $(Build.SourcesDirectory)
}
Catch [System.Management.Automation.CommandNotFoundException] {
    $SourcesDirectory = "..\..\Local\Path\To\Sources\Directory"
}

Write-Output $SourcesDirectory

有没有“更好”的方法来完成这个?

【问题讨论】:

    标签: powershell tfs


    【解决方案1】:

    当然,您可以使用简单的 inline-if 语句。我不确定$(Build.SourcesDirectory) 是否有任何副作用,但使用$env:BUILD_SOURCESDIRECTORY 这应该可以:

    $sourcesDirectory = if($env:BUILD_SOURCESDIRECTORY) { $env:BUILD_SOURCESDIRECTORY } else { "..\..\Local\Path\To\Sources\Directory" }
    

    【讨论】:

    • 这是个好消息!您知道在文档中哪里记录了 $(Foo.Bar)$env:Foo_Bar 的等价性吗?我在链接的 predefined build variables 文档中找不到它。
    • 您可以在此处查看docs.microsoft.com/en-us/azure/devops/pipelines/release/…(向下滚动并选择 PowerShell 选项卡)
    【解决方案2】:

    您可以将变量添加到本地环境变量中:

    • 以管理员身份打开 CMD
    • 运行此命令:setx Build.SourcesDirectory "C:\Path"

    现在这些变量也可以在您的本地计算机中使用,您不需要try/catchif/else,使用变量$env:BUILD_SOURCESDIRECTORY 运行 PowerShell 脚本,它将在您的本地计算机和构建过程中运行也是。

    无论如何,您应该使用$env:BUILD_SOURCESDIRECTORY 而不是$(Build.SourcesDirectory) 使其在构建中工作。

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2013-03-23
      • 2023-03-19
      相关资源
      最近更新 更多