Конвейер Azure: обновление переменных в соответствии с параметром

#azure #azure-devops #environment-variables #azure-pipelines

#azure #azure-devops #среда-переменные #azure-конвейеры

Вопрос:

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

Я написал приведенный ниже код очень разными способами (включая отступы), но ни один из них не был плодотворным. Альтернативы, которые я вижу, следующие

  • Используйте группы переменных (стараясь избегать их слишком большого количества)
  • Напишите скрипт bash, который обновляет переменные (будет работать, но я думаю, что это не очень аккуратное решение)
 variables:
  - group : secrets

  - name: hello
    value: world


  ${{ if eq(parameters.environment, 'dev') }}:
    - name: RabbitMQ_replicaCount
      value: 3
  ${{ if eq(parameters.environment, 'test') }}:
      RabbitMQ_replicaCount: '1'
 

Любые другие идеи будут оценены 🙂

Ответ №1:

Я бы предпочел использовать сценарий PS / Bash для этой задачи. Почему? Логическая часть сборки, в которой требуются манипуляции, такие как установка или переопределение var на основе branch или env, может быть выполнена лучшим образом в скрипте, а не в самом сборке yaml. Также эта часть без необходимости удлиняет yaml.

Шаг 1. Определите переменную в конвейере сборки с именем env по умолчанию

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

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

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

Шаг 2: добавьте файл yml (назовем его BuildEnv.yml ) в свой репозиторий, который фактически содержит ваш код PowerShell / Bash:

 steps:
- powershell: |
    if($BuildEnv -ne "Test"){
        Write-Host "##vso[task.setvariable variable=BuildEnv]Dev"
        Write-Host "##vso[task.setvariable variable=RabbitMQ_replicaCount]11"
    }
  displayName: 'Override Build Env'
  # MORE CODE HERE
 

Шаг 3. подключите yml к конвейеру сборки в качестве шаблона-

 trigger:
 branches:
   include:
     - master

name: $(date:yyyy-MM-dd_HH.mm)_$(rev:.r)

stages:

- stage: Build_Stage
  displayName: Build_Stage
  jobs:
  - job: Build_Job
    pool:
      name: ABC

    steps:

    - template: ..BuildEnv.yml

    #REST CODE
 

Вот и все. Все готово.

Ссылка: использование шаблона в сборке Azure DevOps — https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops