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

Azure管道-将内部版本号应用于应用程序设置,azure,azure-pipelines,Azure,Azure Pipelines,我有一个项目的构建和发布管道设置,我希望能够在运行的应用程序中获得用于发布的构建编号 我已经看到了关于如何使用Release.Artifacts.{alias}.BuildNumber变量(例如工件输出)的许多解释,但是我无法找到如何使用它直接更新应用程序服务的应用程序设置。 我发现在发布过程中可以使用一些允许更改应用程序设置的任务,但它们都不支持使用构建过程中的变量(只允许设置静态值) 我希望将其设置为应用程序服务级别,以便网站和所有WebJob都能够访问该变量(而不必更新多个App.conf

我有一个项目的构建和发布管道设置,我希望能够在运行的应用程序中获得用于发布的构建编号

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

我希望将其设置为应用程序服务级别,以便网站和所有WebJob都能够访问该变量(而不必更新多个App.config文件)


有人能为我指出正确的方向吗?

如果您想直接针对网站设置应用程序设置,而不使用
web.config
上的XML转换,那么您需要继续应用ARM模板

以下是如何通过管道实现这一点:

  • 从门户抓取站点的ARM模板
  • 编辑模板以接受新的
    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')]"
              },
              ...
            ]
          }
        }
      }]
    }
    
  • 设置任务以使用模板

  • 设置
    buildNumber
    参数

  • 这将导致您的Web应用程序中有一个反映Azure管道中当前版本的
    版本号
    应用程序设置。

    延迟更新此设置,但这是我找到的基于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”应用程序设置并获取部署的版本号。

    我不太熟悉使用ARM模板-但是,该模板不应该有任何已经在应用程序服务上配置的现有应用程序设置吗?我已经设置了一些(有些是“插槽设置”,有些不是),但这些根本没有显示在模板中file@StevieW我认为它会,但事实并非如此,可能出于安全目的,因为它需要包含原始值。但是,我在回答中展示了一个如何设置应用程序设置的示例,您只需确保将所有应用程序设置复制到模板中,因为模板将覆盖而不是合并。谢谢您的反馈。我一直在深入研究这个问题,我想我已经找到了一种通过Powershell更新AppSettings的方法。总体而言,Powershell似乎更干净,因为如果我们需要通过门户更改应用程序服务上的变量集,它将根据需要修改现有的应用程序设置,而无需更新流程。@StevieW是的,您当然也可以通过Powershell应用更改,我认为它只是利用了服务器上的ARM(我可能错了)。