Azure DevOps CI/CD 部署 Web 或 Function App 更改 YAML 管道中 appsettings 中的值

nmc*_*a70 3 azure azure-web-app-service azure-devops azure-pipelines azure-function-app

最近,在我们的一些部署中,关于如何自动化功能应用程序和 Web 应用程序的应用程序设置,内部存在一些混乱,并且检查周围似乎有大量令人眼花缭乱的选项,看起来它们在做大致相同的事情,但在不同的地方脚步。

我们的开发人员通常有一个提交到存储库的 appsettings.json 文件,对于他们的测试来说可能看起来像这样......

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
    }
  },
  "Values": {
    "ThingToPointTo": "http://localhost",
  }
}
Run Code Online (Sandbox Code Playgroud)

当我们将其带到其他环境(例如 PROD)时,我们将ThingToPointTo更改为“https://productservice”之类的内容

我们一直在使用 Azure DevOps YAML 管道以这种方式部署和更改 AppSettings...

- task: AzureFunctionApp@1
  inputs:
    azureSubscription: 'OurAzureSubServiceConnection'
    appType: functionApp
    appName: $(azfuncappname)
    package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
    AppSettings: '-Values:ThingToPointTo "https://productionservice"'
Run Code Online (Sandbox Code Playgroud)

我的问题有两个

  1. Values :ThingToPointTo是否正确枚举到正确的设置,或者应该只是ThingToPointTo(省略Values:)?

  2. 这是这样做的方法吗?我注意到您可以在部署之前使用 JSON 转换步骤来更改实际文件,并且还有一个名为“Azure 应用服务设置”的任务可以在部署后使用它来执行此操作?

关于这个主题的文章有很多,但似乎没有一篇适合。

提前致谢!

Kev*_*SFT 5

\n

Values:ThingToPointTo 是否正确枚举到正确的设置,或者应该只是 ThingToPointTo (省略 Values:) ?

\n
\n

ThingToPointTo \xef\xbc\x9ahttps://productionservice可能是正确的格式。您不需要添加values.

\n

例如:

\n
- task: AzureFunctionApp@1\n  displayName: \'Azure Function App Deploy: kevin0806\'\n  inputs:\n    azureSubscription: \'7.28-8.28\'\n    appType: functionApp\n    appName: kevin\n    appSettings: \'-ThingToPointTo http://localhost\'\n
Run Code Online (Sandbox Code Playgroud)\n

结果:

\n

在此输入图像描述

\n
\n

这是这样做的方法吗?我注意到您可以在部署之前使用 JSON 转换步骤来更改实际文件,并且还可以使用名为“Azure 应用服务设置”的任务来在部署后执行此操作?

\n
\n

Azure应用服务设置用于在部署后更改设置。

\n

这是模板,你可以参考一下:

\n
steps:\n- task: AzureRmWebAppDeployment@4\n....\n\n- task: AzureAppServiceSettings@1\n  displayName: \'Azure App Service Settings: kevin0608\'\n  inputs:\n    azureSubscription: \'7.28-8.28\'\n    appName: kevin0608\n    resourceGroupName: Kevintest\n    appSettings: |\n     [\n        {\n         "name": "ThingToPointTo",\n         "value": "valueabcd",\n         "slotSetting": false\n        }\n     \n     ]\n
Run Code Online (Sandbox Code Playgroud)\n

这是关于Json Transform 的文档,你也可以参考一下。

\n

另外,你可以查看这张票

\n
\n

appsettings.json 中的设置不会显示在 Azure 应用服务配置中,但其中定义的设置会覆盖 appsettings.json 中的值

\n
\n

任务中的 appsettings 配置可以显示在 azure 应用服务配置中,并且可以覆盖 appsettings.json 中的值。

\n

更新:

\n

上面是没有嵌套变量的情况。

\n

如果变量是嵌套值,则可以遵循以下结构:

\n
"first" : {\n  "second": {\n    "third" : "value"\n  }\n}\n\n\n\n-first.second.third value1\n
Run Code Online (Sandbox Code Playgroud)\n

如果您的应用程序服务是linux,您可以使用__替换.

\n

例如- first__second__third value1

\n

注:变量名匹配为大小写

\n

  • 嗨,我们对这些没有任何乐趣。我们最终发现,对于嵌套变量,使用冒号 : 分隔符的 Web 应用程序可以成功工作。 (2认同)