繁体   English   中英

Azure DevOps CI/CD 部署 Web 或 Function 应用程序更改 Z9463F832F8B5261Z 管道中的应用程序设置中的值FBD8403F8185CABED1FCE

[英]Azure DevOps CI/CD Deploy Web or Function App changing the values in appsettings in YAML Pipelines

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

我们的开发人员通常有一个 appsettings.json 文件,他们提交给他们的测试可能看起来像这样的 repo...

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
    }
  },
  "Values": {
    "ThingToPointTo": "http://localhost",
  }
}

当我们将其带到其他环境(例如 PROD)时,我们将ThingToPointTo更改为“https://productionservice”

我们一直在使用 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"'

我的问题是2倍

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

  2. 这是这样做的方法吗? 我注意到有 JSON 转换步骤可用于在部署之前更改实际文件,还有一个名为“Azure App Service Settings”的任务可以在部署后使用?

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

提前致谢!

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

ThingToPointTo :https://productionservice可能是正确的格式。 您不需要添加values

例如:

- task: AzureFunctionApp@1
  displayName: 'Azure Function App Deploy: kevin0806'
  inputs:
    azureSubscription: '7.28-8.28'
    appType: functionApp
    appName: kevin
    appSettings: '-ThingToPointTo http://localhost'

结果:

在此处输入图像描述

这是这样做的方法吗? 我注意到有 JSON 转换步骤可用于在部署之前更改实际文件,还有一个名为“Azure App Service Settings”的任务可以在部署后使用?

Azure App Service Settings用于在部署后更改设置。

这是模板,您可以参考:

steps:
- task: AzureRmWebAppDeployment@4
....

- task: AzureAppServiceSettings@1
  displayName: 'Azure App Service Settings: kevin0608'
  inputs:
    azureSubscription: '7.28-8.28'
    appName: kevin0608
    resourceGroupName: Kevintest
    appSettings: |
     [
        {
         "name": "ThingToPointTo",
         "value": "valueabcd",
         "slotSetting": false
        }
     
     ]

这是一个关于Json Transform的文档,您也可以参考它。

此外,您可以查看这张票

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

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

更新:

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

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

"first" : {
  "second": {
    "third" : "value"
  }
}



-first.second.third value1

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

例如- first__second__third value1

注意:变量名匹配区分大小写

感谢@Kevin Lu-MSFT 与我讨论这些选项

我们发现对于具有嵌套值的 webapps...例如

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
    }
  },
  "MySettings": {
    "ThingToPointTo": "http://localhost",
  }
}

... AZDO YAML 管道中的 AppSettings 确实是...

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

这似乎与 FUNCTION 应用程序不同!

如果您在 JSON 中有“值”,则不要使用 Values: 来枚举...!...

例如...

{
  "Values": {
    "ThingToPointTo": "http://localhost",
  }
}

...最终成为...

AppSettings: '-ThingToPointTo "https://productionservice"'

Function Apps 似乎存在双重标准。 所以请注意(其中大部分是使用 .Net 核心和 Windows 设置完成的(如果适用于 Azure)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM