VSTS Build:用内部版本号替换令牌

Joh*_*mbo 4 azure-devops azure-pipelines-build-task

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

以下是我的构建步骤:

构建步骤

"替换标记"步骤会转换为构建设置的任何变量,并替换您在配置文件中设置的标记.这部分有效,但它不会做的是得到一个像构建号这样的环境变量并进行替换.它只会替换指定的任何文本.这是我的构建变量:

构建变量

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

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

什么时候应该像......

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

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

小智 8

我使用"替换**/*config中的令牌"任务做了类似的事情.

要使用当前内部版本号更新密钥"AppVersion"的值,您的行应如下所示:

<add key="AppVersion" value="#{Build.BuildNumber}#" />
Run Code Online (Sandbox Code Playgroud)

  • 对于任何想知道的人。在没有公认的答案的情况下,这是正确的答案。 (3认同)

Giu*_*ian 0

在 VSTS 中,$(Build.BuildNumber)按照本文档中的指定使用。

请注意,您不能使用$(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
Run Code Online (Sandbox Code Playgroud)

````

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