簡體   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