Azure: appsettings. json подстановка переменной в задаче AzureRmWebAppDeployment - PullRequest
0 голосов
/ 11 июля 2020

В моем azure конвейере я использовал для замены переменных в appsettings. json файл следующим образом:

  1. Мой файл appsettings определяет переменные со значениями токенов

     {
      "AzureAd": {
      "Instance": "__AAD_Instance__",
      "Domain": "__AAD_Domain__",
      "TenantId": "__AAD_TenantId__",
      "ClientId": "__AAD_AuthorPortalApi_ClientId__"
     }
    
  2. В выпуске определены переменные конвейера

enter image description here

  1. Задача токенизатора запускается в начале конвейера выпуска и заменяет токены на правильное значение.

Обратите внимание, что некоторые переменные похожи в разных приложениях . Например, выше у меня есть два приложения (AuthorPortalApi и FileApi), у обоих есть AzureAD ClientId, поэтому я должен включить имя приложения в токен, чтобы заменить его правильным значением.

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

  variables:
     - name: AAD_FilesApi_ClientId
     value: some value

Я мог бы оставить его таким. Но я заметил, что задача по развертыванию azure webapp AzureRmWebAppDeployment предоставляет способ подстановки переменных в настройках приложения. json:

  - task: AzureRmWebAppDeployment@4
  displayName: 'Deploy my api'
  inputs:
    azureSubscription: 'my sub'
    WebAppName: 'my-api'
    packageForLinux: '$(workFolder)/my-api.zip'
    JSONFiles: '**/appsettings.json'

В файле yaml переменных я определил свои переменные вот так:

variables:
- name: AzureAd.ClientId
value: some value

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

Я видел документацию , но в ней не показано, как определять переменные в шаблоне YAML.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

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

Мы могли бы создать два задание шаблон yaml для конвейера с разными переменными.

Шаблон AuthorPortalApi.yml:

jobs:
- job: AuthorPortalApi
  variables:
    AAD_AuthorPortalApi_ClientId: xxx

Шаблон FilesApi.yml:

jobs:
- job: FilesApi
  variables:
    AAD_FilesApi_ClientId: xxx

Вы могли бы проверить документ Определить переменные: Области переменных для получения более подробной информации.

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

parameters:
- name: ClientId
  displayName: AzureAd.ClientId
  type: string
  default: Vlaue_AAD_AuthorPortalApi_ClientId
  values:
  - Value_AAD_FilesApi_ClientId
  - Value_OhterThings_ClientId

jobs:
- job: build
  displayName: build
  pool: 
    vmImage: ubuntu-latest
  steps:
  - script: echo The value is ${{ parameters.ClientId }}

Выберите значение, когда мы ставим конвейер в очередь, или используйте значение по умолчанию Vlaue_AAD_AuthorPortalApi_ClientId:

enter image description here

The test result:

enter image description here

Update:

If none of the above methods are suitable for you, then the method I can think of is to use template parameters, but this method requires us to find a condition to pass different parameters to the template:

jobs:
- template: ClientId.yml 
  parameters:
    ClientId: AAD_AuthorPortalApi_ClientId
  condition: and(succeeded(), eq(variables['xx.xx'], 'xx'))

- template: ClientId.yml
  parameters:
    ClientId: AAD_FilesApi_ClientId
  condition: and(succeeded(), eq(variables['yy.yy'], 'yy'))

Check this document Шаблоны заданий, этапов и этапов с параметрами для более подробной информации.

0 голосов
/ 27 июля 2020

В итоге я решил использовать группы переменных во вкладке библиотеки:

введите описание изображения здесь

И затем в моем конвейере Yaml я просто ссылаюсь на правильную группу в соответствии с выполняемым этапом:

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