Использование Azure Devops От Разработки До Сборки Выпуска В Dynamics Ax 2012.

Использование контроля версий для разработки в ERP-системе MS Dynamics AX — вещь довольно спорная.

Кто-то им вообще не пользуется, кто-то использует встроенную систему контроля версий MorphX. Меня зовут Игорь Глухов, я разработчик MS Dynamics AX в Lamoda. В этой статье будет рассказано о том, как мы начали использовать Team Foundation Server и Azure DevOps для контроля версий в Dynamics AX 2012 и как мы начали использовать контроль версий для подготовки выпуска.

Ниже я расскажу вам все подробности:

  • История изменений: с чего мы начинали;
  • Контроль версий: синхронизация и подключение среды разработки;
  • Подключение Test и Prerelease к контролю версий;
  • Как сейчас собирается релиз и какие результаты были получены на выходе.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

История изменений: с чего мы начинали Начнем с того, что раньше мы разрабатывали в одной общей среде разработки.

Для выполнения одной модификации необходимо было внести изменения в системные объекты (таблицы, классы, формы и т.п.

), группирующие проект. Для нас один проект в Axapta — это одна модификация.

Весь код, который был разработан в рамках проекта, был помечен комментарием с названием проекта.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Эта концепция не отслеживала историю изменения объекта.

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

Процесс оказался трудоемким и требовал внимательности: нужно было сравнивать все объекты внутри проекта и брать только тот код, который относится к текущему проекту.

В результате миграция крупных проектов может занять более 30 минут. А в релизе с 20-30 проектами это занимало уже 8 часов, а иногда и больше.

Чтобы избавиться от этих проблем, мы решили: 1. Внедрить систему контроля версий для отслеживания истории изменений объекта, 2. Ускорить процесс переноса модификаций и сборки релиза.

Контроль версий: синхронизация и подключение среды разработки Система контроля версий была выбрана по следующим критериям:

  1. Поддержка встроенными инструментами Axapta без настройки.

  2. Простота установки и обслуживания.

  3. Функционал позволит реализовать новый процесс передачи модификаций.

Первым выбором нашей команды был Team Foundation Server (TFS), но его установка и обслуживание были слишком трудоемкими.

Идея использования Azure DevOps нам показалась более привлекательной: она позволяет создать репозиторий того же TFS, и не требует отдельной настройки и администрирования самого сервера.

Давайте подробнее рассмотрим, как выглядит процесс синхронизации в приложении Axapta с выбранным контролем версий.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Последовательность шагов:

  • Сначала мы создаем локальный файловый каталог для хранения объектов Axapta в виде файлов.

  • Далее создаем репозиторий контроля версий, организуем там новую директорию разработки для сохранения наших изменений, а также настраиваем ее в приложении.

  • Синхронизация запускается из Axapta и инициирует сравнение версии файла в локальном каталоге с версией объекта, который находится в репозитории.

  • При появлении новых объектов или других изменений в репозитории сначала обновляется локальный каталог файлов, а затем он синхронизируется с приложением Axapta.
Первоначальная синхронизация Axapta с контролем версий занимает более 3 часов.

Это связано с тем, что синхронизируется около 20 тысяч объектов: сначала с каталогом файлов, затем с приложением.

Дальнейшая синхронизация занимает 10-15 минут. За это время обновляются только те изменения, которые мы внесли в контроль версий с момента последнего обновления.

Стандартная схема подключения к контролю версий подразумевает наличие одного приложения и одной локальной файловой директории для синхронизации с контролем версий.

Мы внесли изменение в стандарт Axapta и добавили возможность работы в одном Dev-приложении с несколькими файловыми каталогами с возможностью запуска синхронизации для каждого разработчика.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

В процессе работы мы заметили, что появились конфликты синхронизации.

Это привело к потере кода.

Поэтому мы решили вернуться к стандартной схеме Axapta, которая имеет одно приложение, одну файловую директорию и одну директорию контроля версий.

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



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Теперь мы смогли отслеживать изменения объектов, эта схема была отлажена и сбоев больше не было.

После внедрения контроля версий мы рассмотрели новую версию системы Dynamics 365, где релиз строится путем переноса наборов изменений в Visual Studio, и решили попробовать сделать то же самое.

С появлением контроля версий в TFS мы получили доступ к таким элементам, как:

  • Набор изменений — это набор изменений объекта, хранящихся в системе контроля версий.

  • Рабочий элемент — это задача, которая может объединять несколько наборов изменений.

В новой концепции мы отошли от идеи, что одна задача — это один проект, к идее, что одна задача — это один рабочий элемент.
Подключение Test к каталогу контроля версий Dev Поскольку все модификации тестируются в Тестовом приложении, код для релизов следует брать из него.

Это означает, что Test также нужно было подключить к контролю версий.

Мы рассмотрели несколько вариантов подключения с их плюсами и минусами и выбрали тот, в котором тестовое приложение подключается к тому же каталогу управления версиями Dev, что и все DevBoxes. Таким образом, все объекты в системе контроля версий становятся общими для всех DevBox и тестового приложения.

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



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Перед подключением мы проделали подготовительную работу:

  • В нашем случае из-за потери кода на Dev возникли различия между приложениями Dev и Test. Поэтому необходимо было их выровнять, чтобы после подключения Test к Dev-контролю и запуска синхронизации отличающийся код не терялся.

  • Также необходимо было реализовать вход в Axapta для пользователей, не имеющих учетной записи TFS (это бизнес-пользователи и консультанты), и внести другие мелкие доработки.

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

Однако при подключении нескольких локальных папок объекты обновлялись только в одной директории.

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

Мы решили создать отдельный технический аккаунт, создали для него локальную директорию и организовали под этим пользователем запуск клиента Axapta с автоматическим запуском синхронизации контроля версий.

Таким образом, каждый разработчик смог запустить синхронизацию.

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

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

Первые этапы настройки были выполнены в Visual Studio:

  • Каталог Dev системы контроля версий был преобразован в ветку (Branch).

    Это необходимо для того, чтобы в дальнейшем создать иерархию из этого каталога.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

  • Создана новая ветка из каталога Dev для пререлиза.

    Важно было выбрать правильную дату.

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



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

  • Мы получили иерархию веток из каталога Dev:


Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

  • Далее в предварительном приложении мы настроили параметры контроля версий для этой новой ветки.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

  • При создании иерархии веток для ветки Prerelease были скопированы все объекты в ветке Dev с версией на выбранную дату.

    Но Dev и Prerelease приложения — это совершенно разные приложения, поэтому взять эти версии объектов было невозможно.

    Мы удалили все созданные объекты из ветки Prerelease и начали добавлять модель usr в контроль версий.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Синхронизация контроля версий в предварительной версии В отличие от синхронизации в DevBoxes и тестовом приложении, для предварительной версии при переносе наборов изменений объекты в локальном каталоге обновляются до последней версии.

При синхронизации Axapta подтягивает только те объекты, версия которых в локальном каталоге отличается от версии в контроле версий.

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

Чтобы избежать этой проблемы, мы создали отдельный локальный каталог для переноса наборов изменений.

Таким образом мы сделали две локальные папки: одну для переноса ревизий, вторую для запуска синхронизации контроля версий в Axapta.

Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Как сейчас собирается релиз Azure DevOps имеет список рабочих элементов.

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



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Впервые мы использовали Visual Studio 2010, поскольку Axapta 2012 поддерживает его только для интеграции с TFS. Поскольку мы создали отдельный каталог для переноса ревизий, впоследствии мы стали использовать Visual Studio 2017. Реальный перенос ревизий в релиз выглядит так: в Visual Studio запускаем Merge на ветке Dev. Указываем ветку Dev в качестве источника, ветку Prerelease в качестве места назначения и выбираем перенос конкретных наборов изменений.



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

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



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

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



Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Схематически процесс выглядит так:

Использование Azure DevOps от разработки до сборки выпуска в Dynamics AX 2012.

Что произошло в конце

  • Теперь у нас есть контроль версий, что означает историю изменений.

  • Мы ускорили и упростили перенос изменений из приложения для разработчиков в приложение для тестирования.

    Если раньше на перенос большого проекта уходило 30 и более минут, то теперь изменения от всех разработчиков попадают в Тест примерно за 5-10 минут, так как нет необходимости скачивать проекты и сравнивать объекты.

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

  • И, самое главное, нам удалось сократить время подготовки релиза.

    Если раньше на это уходило около 8-10 часов, то теперь меньше 4. Да и сам релиз стал проще, так как нет необходимости загружать и скачивать проекты, все происходит в Visual Studio.

Теги: #Управление разработкой #Microsoft Azure #ERP-системы #Visual Studio #azure devops #lamoda #ERP #erp #tfs #microsoftdynamic axe
Вместе с данным постом часто просматривают: