Upload
intersystems
View
252
Download
3
Embed Size (px)
Citation preview
Приемы Сontinuous Integration при разработке приложений на Caché
Лебедюк Эдуард
Цикл разработки ПО
Система контроля версий ПО для облегчения работы с изменяющейся информацией
• История изменений
• Откат нежелательных изменений
• Совместная работа
• Код не теряется
• Нерабочие фичи не ломают основной билд
Зачем нужен контроль версий?
• Хуки на все основные действия (компиляция, нажатие кнопок, изменение класса) • Экспорт/импорт
– CLS - Классы – CSP – Веб-страницы – CSR - Правила – MAC - Рутины – INT – код – BAS - Basic routines
• Можно расширять • Есть открытые примеры реализации
– Cache-tortoise-git – Cache-source-control – SCMin
Что есть в Caché?
– INC – файлы препроцессора – GBL - Глобалы – PRJ - Проекты – OBJ – Скомпилированный код – PKG – Проекты – DFI – Объекты DeepSee
Continuous Integration Практика разработки программного обеспечения для скорейшего выявления и решения интеграционных проблем
• Автоматизация развёртки проекта
• Автоматизация тестирования
• Лень
• «Кто сломал билд?»
Зачем нужен CI
Continuous Integration –рабочий процесс
Функциональные модули CI решения • Integration
– Основная информация о репозитории и цели (Откуда брать код? Что с ним делать?) • Activator
– Создание задания/хука/прочая, инициализирующего обновление • Connector
– Реализация интерфейса получения файлов из системы контроля версий • Parser
– Парсинг содержимого репозитория и передача его компилятору • Action
– Хранение необходимого для обновления кода, коллбэки • Update
– Дата/время обновления, идентификатор, статус действий, компиляции, юнит-тестов
• Jenkins
• Hudson
• Bamboo
• …
Примеры CI систем
Cache GitHub CI
• Автоматическое получение репозитория GitHub инстансами Caché
• Создание системы CI на COS
Цели проекта
Обновление с помощью task
PreCompile
Compile
PostCompile
UnitTests
Процесс обновления для hook/webhook
Обновление с помощью hook
Set hook=##class(CacheGitHubCI.Hook).%New() Set hook.Namespace="USER" Set hook.Owner="intersystems-ru" Set hook.Repository="test" Set hook.Branch="master"
Set a1 = ##class(CacheGitHubCI.Action).%New() Set a1.Type="code" Set a1.Params="s ^test($zdt($Now(-180)))=""started compiling""" Set hook.PreCompile=a1
Set a2 = ##class(CacheGitHubCI.Action).%New() Set a2.Type="classmethod" Set a2.Namespace="USER" Set a2.Params="Fileserver.Broker,Init,1" Set hook.PostCompile=a2
W hook.CreateTask(60) W hook.%Save()
• Аналогично, но: – Нужен логин-пароль с администраторским доступом к репозиторию (в начале) – Нужен сервер со внешним статичным ip
• Преимущества – Обновления мгновенные – Нет ненужных обновлений
Обновление с помощью webhook
Код: Set hook.Username="GitHub Username" Set hook.Password="GitHub Password" W hook.CreateHook() Do hook.%Save()
• Куб • Дэшборд • Листинг – История коммитов – Автор – Статус – Время начала – Время завершения – Длительность – SHA последнего коммита
• Куб обновляется автоматически после изменения hook
Мониторинг
Конец https://github.com/intersystems-ru/CacheGitHubCI