#azure-devops #azure-pipelines
#azure-devops #azure-конвейеры
Вопрос:
Мы используем классические конвейеры (не YAML). Наши репозитории кода содержат проекты Visual Studio для пакетов SSIS. В настоящее время каждое хранилище содержит только один пакет служб SSIS, поэтому при выполнении сборки для создания артефакта сборки из пакета используется предопределенная переменная. Мы хотим, чтобы пользователи могли иметь несколько пакетов SSIS в одном репозитории (на основе проекта), а затем при выполнении конвейерной сборки выбирать, какие пакеты создавать и выпускать.
Моим предпочтительным решением было бы следующее:
- При выполнении сборки сценарий PowerShell перечисляет пакеты служб SSIS для заполнения переменной.
- Имена пакетов SSIS отображаются в виде флажков, что позволяет пользователю выбирать, какие пакеты включать в сборку.
- Артефакт сборки создается с использованием выбранных пакетов служб SSIS.
Если это невозможно с конвейерами DevOps, я бы согласился на это альтернативное решение:
- При создании (или редактировании) конвейера DevOps пользователь заполняет переменную списком имен пакетов SSIS в своем репозитории.
- При выполнении сборки имена пакетов SSIS отображаются в виде флажков, что позволяет пользователю выбирать, какие пакеты включать в сборку.
- Артефакт сборки создается с использованием выбранных пакетов служб 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. К сожалению, у нас уже есть десятки конвейеров, использующих классический метод. Но спасибо за отличный ответ! Я рад узнать, какие у нас есть варианты.