Отображение списка выбора для пользовательского ввода

#azure-devops #azure-pipelines

#azure-devops #azure-конвейеры

Вопрос:

Мы используем классические конвейеры (не YAML). Наши репозитории кода содержат проекты Visual Studio для пакетов SSIS. В настоящее время каждое хранилище содержит только один пакет служб SSIS, поэтому при выполнении сборки для создания артефакта сборки из пакета используется предопределенная переменная. Мы хотим, чтобы пользователи могли иметь несколько пакетов SSIS в одном репозитории (на основе проекта), а затем при выполнении конвейерной сборки выбирать, какие пакеты создавать и выпускать.

Моим предпочтительным решением было бы следующее:

  1. При выполнении сборки сценарий PowerShell перечисляет пакеты служб SSIS для заполнения переменной.
  2. Имена пакетов SSIS отображаются в виде флажков, что позволяет пользователю выбирать, какие пакеты включать в сборку.
  3. Артефакт сборки создается с использованием выбранных пакетов служб SSIS.

Если это невозможно с конвейерами DevOps, я бы согласился на это альтернативное решение:

  1. При создании (или редактировании) конвейера DevOps пользователь заполняет переменную списком имен пакетов SSIS в своем репозитории.
  2. При выполнении сборки имена пакетов SSIS отображаются в виде флажков, что позволяет пользователю выбирать, какие пакеты включать в сборку.
  3. Артефакт сборки создается с использованием выбранных пакетов служб SSIS.

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

Ответ №1:

Боюсь, что приведенное выше предпочтительное решение невозможно. Поскольку невозможно отобразить флажок во время выполнения сборки, чтобы позволить пользователю выбирать, какие пакеты создавать.

Однако заполнение переменной при создании (или редактировании) конвейера DevOps возможно. См. Ниже:

1, Создайте переменные на вкладке Переменные (отметьте Settable at queue time )

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

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

Выберите Пользовательские условия —> И введите выражение условия and(succeeded(), eq(variables.APackageOne, true))

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

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

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

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

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

 parameters:
- name: Package One
  type: boolean
  default: false
- name: PackageTwo
  type: boolean
  default: false
- name: PackageThree
  type: boolean
  default: false
- name: PackageFour
  type: boolean
  default: false
 

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

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

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

 - task: VSBuild@1
  name: BuildPackageOne
  inputs:
    ...
  condition: and(succeeded(), eq('${{ parameters.PackageOne }}', true))
 

Комментарии:

1. Это то, что я тоже видел, все это кажется проще, если вы используете YAML. К сожалению, у нас уже есть десятки конвейеров, использующих классический метод. Но спасибо за отличный ответ! Я рад узнать, какие у нас есть варианты.