WedX - журнал о программировании и компьютерных науках

Azure Devops: шаг оформления заказа медленный: ко многим объектам?

Сначала немного справочной информации: в настоящее время мы находимся в процессе миграции большого репозитория git с Bitbucket на Azure Devops. Были некоторые проблемы, потому что репозиторий имеет историю, полную двоичных блобов, которые, оглядываясь назад, были совершенно ненужными.

После предварительного опробования bfg-repo-cleaner мы, наконец, закончили использовать git filter-repo и успешно сократили размер репо с нескольких гигабайт до примерно 400 мегабайт (в зависимости от того, что вы считаете). Мы также переписали некоторые названия тегов.

Наш процесс заключался в том, чтобы сначала создать свежий клон из битбакета, а затем запустить сценарий оболочки, который сжимает репо. После этого мы отправили репо в новый пустой репозиторий, созданный в Azure Devops.

Все прошло намного проще, чем мы ожидали. git filter-repo работал быстро, и весь процесс занял не более часа.

Прежде чем мы почувствовали себя в безопасности, выполняя перемещение (и заставляя всех наших разработчиков замораживать репо на некоторое время), мы выполнили пару тестовых запусков, чтобы убедиться, что мы не потеряли никаких данных, и конвейер Azure Devops может так же хорошо построить наш код. как раньше делал Бамбук.

Мы успешно создали yml pipleline, на выполнение которого в общей сложности ушло примерно 4 минуты. Чувствуя уверенность в том, что мы решили все наши проблемы, мы приступили к выполнению всего процесса по-настоящему. Все прошло гладко, и мы быстро переместили всех наших разработчиков в новый репозиторий.

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

Новое репо (оформление заказа занимает 8 минут)

удаленный: найдено 39837 объектов для отправки. (1316 мс)

Прием объектов: 100% (39837/39837), 809.66 МиБ | 1,69 Мбайт / с, готово.

Тестовое репо (оформление заказа занимает 31 секунда)

удаленный: найдено 11772 объекта для отправки. (358 мс)

Прием объектов: 100% (11772/11772), 80,17 Мбайт | 8,75 Мбайт / с, готово.

Я думаю, уместно упомянуть, что мы используем --depth = 1 во время оформления заказа. В нашем тестовом конвейере это резко сократило время оформления заказа.

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

Я подозреваю, что наши файлы пакетов почему-то недостаточно оптимизированы, поэтому вам нужно загрузить их больше, чтобы клонировать репо. Я говорю клонировать, потому что конвейер, кажется, запускает новое репо, добавляет удаленный объект и выполняет выборку. Когда я делаю настоящий клон на своей локальной машине разработчика, это занимает всего 5 минут (включая передачу через Интернет и разрешение дельт). Я нахожу это очень странным.

Любая помощь будет принята с благодарностью. Спасибо,

Пит Экхарт


  • Медленно ли оно только для первого конвейера или также и в повторяющихся случаях? 28.01.2021
  • Мы используем уровень бесплатного пользования для агентов сборки, размещенных на сервере Microsoft. В результате они всегда начинают со свежей сборки и не могут повторно использовать данные из предыдущих сборок. 28.01.2021
  • Я думаю, что уровень бесплатного пользования не позволяет использовать локально размещенные агенты, что я бы порекомендовал. Поскольку вы уже пытались уменьшить размер репозитория, единственный другой подход - это рефакторинг репозитория и конвейеров в более мелкие и более модульные конвейеры, которые вы можете создавать одновременно, а затем использовать их выходные данные в качестве артефакта для дальнейших сборок. 28.01.2021
  • Если вы реализуете описанный выше подход с помощью подмодулей git, возможно, вам придется создавать только те небольшие компоненты, которые изменились, а не весь исходный код. 28.01.2021
  • Поскольку нам удалось создать настройку с приемлемым временем сборки, мы хотим сначала рассмотреть этот вариант. Одной из наших целей было избавиться от локального оборудования / виртуальных машин в нашем CI. 28.01.2021
  • Мы только что выяснили, что в нашем тестовом сценарии мы не отправляли теги. Может ли это теоретически привести к появлению большего количества объектов? Я думал об исторических тегах, которые находятся не в основной основной ветке, а в исторических ветках, которых больше не существует. 28.01.2021
  • Отметьте его как ответ, чтобы людям, задающим один и тот же вопрос, было легче находить ответы. 01.02.2021

Ответы:


1

Оказывается, проблема заключалась в том, что в нашем предыдущем тесте мы не передавали теги из bitbucket в azure DevOps.

Когда мы добавляли теги, процесс оформления заказа в azure DevOps занимает больше времени, потому что --tags отменяет эффект глубины = 1, когда у вас много тегов.

См .: https://developercommunity.visualstudio.com/idea/878730/git-source-provider-add-ability-to-pull-git-repos.html

29.01.2021
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]