Azure DevOps CI / CD Развертывание веб-приложения или приложения-функции, изменение значений в настройках приложения в конвейерах YAML - PullRequest
1 голос
/ 05 августа 2020

Внутри возникла некоторая путаница по поводу того, как автоматизировать настройку приложений для приложений-функций и веб-приложений в последнее время с некоторыми из наших развертываний, и проверка вокруг, кажется, приводит к изумительному количеству вариантов, которые выглядят так, будто они делают примерно то же самое, но на разных этапах.

У наших разработчиков обычно есть файл appsettings. json, который они фиксируют в репо, который может выглядеть примерно так для их тестирования ...

{
  "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"'

Мой вопрос двукратный

  1. Являются ли Значения: ThingToPointTo правильными для перечисления до правильной настройки , или это должно быть просто ThingToPointTo (без Значения: )?

  2. Это способ сделать это? Я заметил, что есть JSON шагов преобразования, которые вы можете использовать для изменения фактического файла перед его развертыванием, а также доступную для использования задачу под названием «Azure Настройки службы приложений», которая сделает это после развертывания?

На эту тему так много статей, но ни одна не подходит.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Являются ли значения: ThingToPointTo правильным для перечисления до правильного значения, или это должно быть просто ThingToPointTo (без значений :)?

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'

Результат:

enter image description here

Is this the way to do it? I notice there are JSON transform steps you can use to change the actual file before deploying it, and also a task called "Azure App Service Settings" available to use that will do it after deployment?

The Azure Настройки службы приложений используется для изменения настройки после развертывания.

Вот шаблон, вы можете на него ссылаться:

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
        }
     
     ]

Вот do c about Json Преобразование , вы также можете ссылаться на него.

Кроме того, вы можете проверить этот билет :

Настройки из настроек приложения. json не отображаются в Azure Конфигурация службы приложений, но> определенные там параметры переопределяют значения в настройках приложения. json

Конфигурация настроек приложения в задаче может отображаться в конфигурации службы приложения azure, и он может переопределить значение в настройках приложения. json.

Обновление:

Вышеупомянутый случай без вложенных переменных.

Если переменная представляет собой вложенные значения, вы можете следовать следующей структуре:

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



-first.second.third value1

Если ваша служба приложения linux, вы можете использовать * 104 5 * для замены .

например, - first__second__third value1

Примечание: соответствие имени переменной с учетом регистра

1 голос
/ 18 августа 2020

Спасибо @Kevin Lu-MSFT за обсуждение этих параметров со мной.

Мы обнаружили, что для веб-приложений, которые имеют вложенные значения ... например,

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

... AppSettings в конвейере AZDO YAML действительно будет ...

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

ЭТО ДРУГОЕ, ПОКАЗЫВАЕТСЯ ДЛЯ ФУНКЦИОНАЛЬНЫХ ПРИЛОЖЕНИЙ!

Если у вас есть «Значения» в JSON, вы ДЕЛАЕТЕ » T используйте Values: для перечисления !!!! ...

Например ...

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

... в итоге получается ...

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

Кажется, что с приложениями-функциями существует двойной стандарт! Так что будьте осторожны (большая часть этого была выполнена с использованием. Net Core и Windows, где это применимо в Azure)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...