Приемы Сontinuous Integration при разработке приложений на Caché

Preview:

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

Recommended