Самостоятельный агент Azure - как настроить конвейеры для совместного использования одной и той же папки сборки

У нас есть собственный агент сборки на локальном сервере.

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

  • Ежедневные проверки были созданы в c: \ work \ tfs \ (занимает около 5 минут)
  • Каждую ночь запускался командный файл, который создавал одну и ту же сборку для этих папок, используя одни и те же источники (они уже были «последними» из сборки CI), и собирал установщики. Скопируйте файлы в сетевое расположение и отправьте электронное письмо команде с подробным описанием успешной / неудачной сборки. (Это займет около 40 минут)

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

Чтобы воспроизвести это с помощью Azure Devops, я создал два конвейера. Один конвейер, который выполнял CI с помощью задач MSBuild в классическом редакторе - отлично работает Другой конвейер в классическом редакторе, который запускает наш существующий сценарий PowerShell, запланированный на 21:00 - отлично работает

Однако, несмотря на то, что мой агент не поддерживает параллельные сборки, происходит следующее: папка конвейера CI - это c: \ work \ 1 \ Папка ночной сборки - это c: \ work \ 2 \

Это удваивает объем необходимого нам дискового пространства (с 10 до 20 ГБ). Это те же файлы кода, только построенные по-разному.

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

Что это за настройка, иначе нам придется платить нашему поставщику услуг за дополнительное хранилище ГБ.

Или мне нужно изменить мои классические конвейеры на Yaml и каким-то образом условно разветвить сборку, чтобы она знала, что она запланирована, и сделать что-то другое? Или, может быть, прекратить использовать конвейер для запланированной сборки и использовать планировщик задач в Windows, как раньше?

(Я пытался найти тот же вопрос - уверен, что не могу быть единственным).


person GilesDMiddleton    schedule 10.06.2020    source источник


Ответы (2)


Для запуска скриптов в конвейере доступна директива workingDirectory. Подробная информация по этой ссылке - https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/command-line?view=azure-devops&tabs=yaml

person Kamal    schedule 10.06.2020
comment
Интересно - даже если это не сработало, Ты заставил меня переосмыслить то, что я делаю. Просто потому, что мой сценарий Power Shell работает с относительными путями, нет причин, по которым я не могу жестко запрограммировать его, чтобы обнаружить, что он запускается со скоростью 2 / с, и заставить его переключиться на 1 / с - я попробую, спасибо . - person GilesDMiddleton; 11.06.2020

Номер '1' '2' ... '6' рабочей папки c:\work\1\, _2 _... c:\work\6\ в вашем агенте сборки, который обозначает конкретный конвейер.

Agent.BuildDirectory

Локальный путь к агенту, по которому создаются все папки для данного конвейера сборки. Эта переменная имеет то же значение, что и Pipeline.Workspace. Например: / home / vsts / work / 1

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

Если вам нужно использовать меньше дискового пространства для экономии средств, опасайтесь прекращения использования конвейера для запланированной сборки, и используйте планировщик задач в Windows, как и раньше, - лучший способ.

person PatrickLu-MSFT    schedule 11.06.2020
comment
Спасибо за ваш вклад, но на самом деле это не продвигает нас в будущее. Возможность заставить конвейер совместно использовать один и тот же каталог сборки с другим конвейером на том же агенте, когда директива управления версиями идентична, была бы замечательной конструктивной особенностью для ускорения сборки. Жаль, что это было разработано. Я попытаюсь изменить свой сценарий PowerShell в каталог другого конвейера. - person GilesDMiddleton; 17.06.2020
comment
@GilesDMiddleton Спасибо за любезное обновление. Мы старались сделать структуру папок более лаконичной и понятной. Каждый конвейер, соответствующий отдельной папке, будет легко управлять загрузкой источника сборки, журналами сборки, созданными файлами сборки. Все изменения инкапсулируются в каждый конвейер без помех для всех остальных. Но если вы нашли обходное решение, не стесняйтесь поделиться им здесь, что может помочь другим в сообществе. - person PatrickLu-MSFT; 19.06.2020