2. WhoAmIResponse
Савран Роман Александрович
Украинские Динамические Системы
Программирую для Microsoft Dynamics CRM 7 лет
Выступал в роли разработчика/архитектора/руководителя команды для
проектов внедрения Microsoft CRM
4. 0-й уровень зрелости
чик-чик и в продакшн
Устанавливаем среду у заказчика
Программист пишет код со слов заказчика, требования не фиксируются
Разрабатывает на той же среде, которая у него установлена
Исходный код хранится на ноутбуке программиста
За день-два до запуска показываем заказчику и краснеем, от того что
ничего не работает
В определенный момент говорим «Ок, это теперь продакшн»
Продолжаем разрабатывать и фиксать баги на этой же среде. Возможно
имеем запасную для тестирования сложных требований
5. Как мы делаем сейчас
Для хранения требований, задач и управления ими используем
TFS/систему заказчика
Его же используем для хранения исходного кода/версионности (либо
систему заказчика)
Используем 3+ сред для разработки/тестирования/продакшн
Используем Unit Tests и ручное тестирование
На сложных проектах с большой командой используем Continuous
Integration
6. Что нужно для реализации Continuous
Integration?
Система контроля версий
• TFS
• SVN
• Все производимые
настройки должны иметь
возможность быть
отраженными в виде
файлов
Автоматическое
тестирование и
разворачивание
• TFS
• Hudson
• Утилита для выгрузки
настроек из CRM системы
• Утилита для
разворачивания настроек
из Системы контроля
версий
7. Проблемы разработки без системы
контроля версий
Сложность координации при наличии изменений многими членами команды
одного компонента или связанных компонент
Нет истории изменений
Нет привязки к конкретным задачам и понимания для чего производились
изменения (требует интеграции с системой управления требованиями)
Есть риск потери исходного кода при уходе разработчика или проблемами с
железом
Сложно найти последнюю актуальную версию исходного кода, если он
менялся несколькими людьми
Проблемы при необходимости подменить человека на определенный период,
или необходимости срочного исправления кода в отсутствие программиста
Сложность контроля качества исходного кода
8. Проблемы разработки без
автоматического разворачивания
Большие трудозатраты на перенос решений (в частности из-за скорости
импорта решений в Microsoft CRM)
Растут очень быстро с увеличением количества сред
Большие относительные трудозатраты при переносе небольших изменений
(добавить поле – 1 минута, перенести на продакт – 20 минут). Как результат
естественное желание исправить на продакте и рассинхронизировать среды
Человеческий фактор
При экспорте
Забыл включить в решение
Включил в решение недоделанный функционал (возможно не свой)
При импорте
Забыл сделать Publish All
Забыл поставить галочку Publish all workflows … при импорте
Не перепубликовал Duplicate detection rules
9. Что дает Continuous Integration?
Ускорение цикла разработки при отсутствии уменьшения качества
Автоматическое выявление конфликтов при работе над компонентами
нескольких людей
Изоляция разработок
Уменьшение себестоимости поддержки и развития решения
11. Сложности построения CI для Microsoft
CRM
Исходный код составляет малую часть изменений при разработке, кроме них
есть:
Roles
WorkFlow
Reports
Настройки объектов, форм, представлений
Dashboards/Charts e.t.c.
Особенности переноса решений:
Workflow должны быть зарегистрированы от пользователя производящего импорт
Duplication Rules могут перестать быть опубликованными при изменении метаданных
У Plugin registration steps зарегистрированных работать от имени конкретной учетной
записи, ставится по умолчанию Calling User
12. Схема
Parallel development
Dev lab
Test lab
Prod environment
Update
CRM Environment
dev1
Story 1
Local folder
Update
Unlock
Trunc
Commit
CRM Environment
dev2
Story 2
Local folder
Commit
SVN
Autodeploy
Lock svn on deploy
CRM Environment
Dev-Test
(Check)
Merged Solution
CRM Environment
Test (QC)
Mainstream testing
Commit
CRM Environment
bugfix
Story 3
CRM Environment
dev1
Story 1
Local folder
Solution merge when needed
Solution
Local folder
Approve
Approve
Branch
Commit
CRM Environment
dev2
Story 2
Local folder
Commit
SVN
Autodeploy
Lock svn on deploy
CRM Environment
Dev-Test 2
(Check)
Commit
CRM Environment
bugfix
Story 3
Local folder
Unlock
Branch solution
CRM Environment
Test (QC)
Branch testing
Merged Solution
CRM Environment
Beta
Merged Solution
CRM Environment
Prod
13. Построение отражения CRM –> SVN
Выгрузка
решения из
CRM
Распаковка
решения
Чистка
решения от
битых ссылок
Заливка
распакованного
решения в SVN
Выгрузка
решения Default
при помощи
ExportSolutionReq
uest
Использование
утилиты
SolutionPackager
для распаковки
выгруженного
решения в папку
под контролем
версий
Убирание ссылок
на компоненты
управляемых
решений,
которые не
выгружаются
Вызов
TortoiseSVN для
заливки решений
14. Построение отражения SVN -> CRM
Обновление
SVN
Запаковка
решения
Совершение
доимпортных
операций
Импорт
решения
Совершение
послеимпортных
операций
Публикация
настроек
Выгрузка
последних
изменений из
SVN
Использован
ие утилиты
SolutionPacka
ger для
формировани
я пакета
решения
Выполнение
автоматических
действий
Импорт
решения при
помощи
вызова
ImportSolutio
nRequest
Публикация
duplicate
detection
rules
Выполнение
автоматических
действий
15. SolutionPackager
Распаковывает решение, выгруженное из CRM в виде zip файла в набор
структурированных по папкам xml файлов
Entity
Entity Form
Entity View
Option Set
Entity Relationship
Ribbon Customization
Site Map
Web Resources
Role
Connection Role
Dashboard
Workflow
Email Template
Contract Template
Kb Article Template
Mail Merge Template
PluginAssembly
SdkMessageProcessingStep
ServiceEndpoint
Reports
EntityMap