Приемы Сontinuous integration при разработке приложений на caché
TRANSCRIPT
Приемы С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