Azure管道-将内部版本号应用于应用设置

时间:2019-07-29 11:04:01

标签: azure azure-pipelines

我有一个用于项目的“构建”和“发布”管道设置,我希望能够将用于发布的“构建号”获取到正在运行的应用程序中。

我已经看到了许多有关如何使用Release.Artifacts。{alias} .BuildNumber变量进行解释的说明,例如工件输出,但是我无法找到如何使用它来直接更新应用程序服务的应用程序设置。 我发现有一些任务可以在发布过程中使用,这些任务允许更改应用程序设置,但是使用构建过程中的变量均不支持这些任务(只允许设置静态值)

我希望将此设置在App Service级别上,以便网站和所有webjob都能够访问变量(而不必更新多个app.config文件)。

有人可以为此指出正确的方向吗?

2 个答案:

答案 0 :(得分:0)

如果您想直接在网站上设置AppsSettings而不在web.config上使用XML转换,那么您将需要遵循应用ARM模板的路线。

这是通过管道进行操作的方式:

  1. 从门户网站获取您网站的ARM模板

  1. 编辑模板以接受新的buildNumber变量,然后在网站的应用设置中进行设置,例如

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "buildNumber": {
          "type": "string"
        }
      },
      ...
      "resources": [{
        "type": "Microsoft.Web/sites",
        ...
        "properties": {
          "siteConfig": {
            "appSettings": [
              {
                "name": "BUILD_NUMBER",
                "value": "[parameters('buildNumber')]"
              },
              ...
            ]
          }
        }
      }]
    }
    
  2. 设置Azure Resource Group Deployment任务以使用您的模板

  3. 设置buildNumber参数

这应该导致您的Web应用程序中有一个BUILD_NUMBER应用程序设置,该设置反映了Azure Pipelines中的当前生成。

答案 1 :(得分:0)

延迟更新,但是这是我到达的基于Powershell的解决方案,并且到目前为止效果很好。

在解决方案中将其添加为Powershell脚本,并更新了构建过程以复制此工件

param (
    $myResourceGroup,
    $mySite,
    $mySlot,
    $buildNo
)


$webApp = Get-AzureRMWebAppSlot -ResourceGroupName $myResourceGroup -Name $mySite -Slot $mySlot
$appSettingList = $webApp.SiteConfig.AppSettings

$hash = @{}
ForEach ($kvp in $appSettingList) {
    $hash[$kvp.Name] = $kvp.Value
}

$hash['BuildNumber'] = $buildNo

Set-AzureRMWebAppSlot -ResourceGroupName $myResourceGroup -Name $mySite -AppSettings $hash -Slot $mySlot

这将获取提供的参数,并从插槽中获取当前的应用设置,并将BuildNumber设置添加/更新为接收到的$buildNo参数。

在发布过程中,我添加了一个Azure Powershell任务来调用此脚本,然后将“脚本参数”字段设置为以下内容

-myResourceGroup "WebResourceGroup" -mySite "myexamplservice" -mySlot "staging" -buildNo $(Build.BuildNumber)

现在,我可以在网站上阅读“ BuildNumber”应用设置,并获取已部署的内部版本号。