【问题标题】:VSTS Build: Replacing token with build numberVSTS Build:用内部版本号替换令牌
【发布时间】:2016-05-20 12:12:15
【问题描述】:

在 VSTS 中构建我的应用程序时,我正在尝试使用内部版本号更新名为“AppVersion”的 web.config 应用程序设置。

这是我的构建步骤:

“替换令牌”步骤会转换您为构建设置的任何变量,并替换您在配置文件中设置的令牌。这部分有效,但它不会做的是获取一个环境变量,如内部版本号并进行替换。它只会替换已指定的任何文本。这是我的构建变量:

所以构建步骤完成后,我的应用设置是...

<add key="AppVersion" value="$(BuildNumber)" />

什么时候应该是……

<add key="AppVersion" value="20160520.1" />

谁能指出我正确的方向? 非常感谢。

【问题讨论】:

  • 您在 Google 上看到过排名靠前的结果吗?似乎这是一个部署任务。 stackoverflow.com/questions/35639687/…
  • 是的,我已经看到了这个问题,但这与构建有关,而不是与发布或部署有关。我的构建被打包到一个放置文件夹中以供发布管理器使用,因此可能应该在将其发送到放置文件夹之前设置内部版本号;删除完成后内部版本号不会更改。

标签: azure-devops azure-pipelines-build-task


【解决方案1】:

我使用“在 **/*config 中替换令牌”任务做了类似的事情。

要使用当前内部版本号更新键“AppVersion”的值,您的行应如下所示,

<add key="AppVersion" value="#{Build.BuildNumber}#" />

【讨论】:

  • 对于任何想知道的人。在没有公认答案的情况下,这是正确答案。
【解决方案2】:

您可以在“替换令牌”任务之前添加一个 PowerShell 脚本任务,以将“BuildNumber”传递给“AppVersion”变量,如下所示。

【讨论】:

    【解决方案3】:

    在 VSTS 中,使用$(Build.BuildNumber) 中指定的this doc

    请注意,您不能使用$(Build.BuildNumber) 来设置变量的值,因为它是按字面意思理解的;它应该是任务的论据。如果您的任务不接受它,您可以用一点 Powershell 脚本和 BUILD_BUILDNUMBER 环境变量替换。

    param (
        [Parameter(Mandatory = $true)]
        [String]$fileWithTokens,
    
        [Parameter(Mandatory = $false)]
        [String]$tokenRegex = "__(\w+)__"
    )
    
    $vars = Get-ChildItem -path env:*
    $contents = Get-Content -Path $fileWithTokens
    $newContents = "";
    $contents | % {
        $line = $_
        if ($_ -match $tokenRegex) {
            $setting = Get-ChildItem -path env:* | ? { $_.Name -eq $Matches[1]  }
            if ($setting) {
                Write-Host ("Replacing key {0} with value from environment" -f $setting.Name)
                $line = $_ -replace $tokenRegex, $setting.Value
            }
        }
        $newContents += $line + [Environment]::NewLine
    }
    Set-Content $fileWithTokens -Value $newContents
    

    ```

    来源https://github.com/colindembovsky/cols-agent-tasks/tree/master/Tasks/ReplaceTokens

    【讨论】:

    • 那行不通。所做的就是将我的令牌替换为“$(Build.BuildNumber)”而不是“20160520.1”之类的东西。
    【解决方案4】:

    经过一天的研究,终于找到/创建了比使用 Marketplace 中的任何随机应用(替换令牌)更好的选择。

    我所说的选项已经在 VSTS、Azure CLI 任务中可用。

    以下是步骤:

    1. 在 appsettings.json 中添加初始值为 1.0 的设置 BUILD_NUMBER
    2. 在您的应用程序中读取 appsettings.json 并显示它。我相信你们都足够聪明,知道如何使用 appsettings 在您的 WebApplication 上显示 Build Number。
    3. 在 Azure 门户中,类似地在应用服务下的 Azure 应用程序设置部分为您的应用创建一个名为 BUILD_NUMBER 的应用设置,初始值为 1.0。
    4. 在 VSTS 中,在发布定义中,添加任务 Azure CLI。
    5. 使用以下 CLI 命令填充必填字段,例如 Azure 订阅、使用内联脚本的脚本位置以及最后但最重要的内联脚本

    az webapp config appsettings set -n iCoreTestApi -g ArchitectsSandbox -s Dev --settings BUILD_NUMBER=$(Build.BuildNumber)

    命令说明:

    • iCoreTestApi 应替换为您在 Azure 中的真实 WebApp 或 Api 名称
    • ArchitectsSandbox 应替换为 Azure 中的资源组
    • Dev 是插槽名称,您可能有也可能没有。
    • 命令的其余部分保持不变。

    一旦您将新构建排队,在成功完成部署后,您可以看到 Azure 上的应用设置部分已更新为新的 BUILD_NUMBER。

    如果您还有任何问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多