【问题标题】:TFS 2015 Build vNext recursive variable substitutionTFS 2015 Build vNext 递归变量替换
【发布时间】:2016-05-17 22:27:07
【问题描述】:

变量替换是否可能不是递归的?

示例 1:

变量值

SqlInstance (localDb)\mssqllocaldb

DbCatalogName FooDb

ConnStr 数据源=$(SqlInstance);初始目录=$(DbCatalogName)$(Build.BuildId);

在构建期间,连接字符串替换为:data source=(localDb)\mssqllocaldb;initial catalog=FooDb3211;

此配置完美运行。但是如果我将 BuildId 参数移动到 DbCatalogName 变量,它将不会被替换。

示例 2:

变量值

SqlInstance (localDb)\mssqllocaldb

DbCatalogName FooDb$(Build.BuildId)

ConnStr 数据源=$(SqlInstance);初始目录=$(DbCatalogName);

使用此配置,连接字符串将替换为:data source=(localDb)\mssqllocaldb;initial catalog=FooDb$(Build.BuildId);

那么我怎样才能用 vNext 链接变量呢?

【问题讨论】:

    标签: tfs tfsbuild tfs-2015


    【解决方案1】:

    如果您希望“DbCatalogName”变量包含 BuildID 值,我建议您添加一个额外的 power-shell 构建步骤来设置“DbCatalogName”的值。

    设置变量值的代码:

    ##vso[task.setvariable variable=testvar;]testvalue
    

    【讨论】:

    • 但是在构建之前我不需要 BuildId 值。并且示例 1 工作正常并成功替换了 $(Build.BuildId)。
    • @Kemy 当你使用“ConnStr”变量时?部署期间?
    • 是的,在部署期间。一个 powershell 脚本获取 ConnStr 并为测试用例构建一个新的、干净的数据库。
    • @Kemy 我刚刚用 vNext 构建尝试过这个。似乎对于某些任务,例如 MSBuild、VSBuild,变量值没有得到扩展。但是对于一些任务,比如Powershell、CMD,变量值可以展开一次。
    • 是的,但只有一次。所以我不能链接多个变量,因为 TFS 只做一次替换,如果被替换的值包含另一个变量占位符,则不会重复。
    【解决方案2】:

    变量链接似乎适用于 TFS 2015 Update 3。

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 2016-08-07
      • 2018-05-12
      • 2017-07-12
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      相关资源
      最近更新 更多