caché github continuous intergration

18
Приемы Сontinuous Integration при разработке приложений на Caché Лебедюк Эдуард

Upload: intersystems

Post on 16-Feb-2017

256 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Caché github continuous intergration

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

Лебедюк Эдуард

Page 2: Caché github continuous intergration

Цикл разработки ПО

Page 3: Caché github continuous intergration

Система контроля версий ПО для облегчения работы с изменяющейся информацией

Page 4: Caché github continuous intergration

•  История изменений

•  Откат нежелательных изменений

•  Совместная работа

•  Код не теряется

•  Нерабочие фичи не ломают основной билд

Зачем нужен контроль версий?

Page 5: Caché github continuous intergration

•  Хуки на все основные действия (компиляция, нажатие кнопок, изменение класса) •  Экспорт/импорт

–  CLS - Классы –  CSP – Веб-страницы –  CSR - Правила –  MAC - Рутины –  INT – код –  BAS - Basic routines

•  Можно расширять •  Есть открытые примеры реализации

–  Cache-tortoise-git –  Cache-source-control –  SCMin

Что есть в Caché?

–  INC – файлы препроцессора –  GBL - Глобалы –  PRJ - Проекты –  OBJ – Скомпилированный код –  PKG – Проекты –  DFI – Объекты DeepSee

Page 6: Caché github continuous intergration

Continuous Integration Практика разработки программного обеспечения для скорейшего выявления и решения интеграционных проблем

Page 7: Caché github continuous intergration

•  Автоматизация развёртки проекта

•  Автоматизация тестирования

•  Лень

•  «Кто сломал билд?»

Зачем нужен CI

Page 8: Caché github continuous intergration

Continuous Integration –рабочий процесс

Page 9: Caché github continuous intergration

Функциональные модули CI решения •  Integration

–  Основная информация о репозитории и цели (Откуда брать код? Что с ним делать?) •  Activator

–  Создание задания/хука/прочая, инициализирующего обновление •  Connector

–  Реализация интерфейса получения файлов из системы контроля версий •  Parser

–  Парсинг содержимого репозитория и передача его компилятору •  Action

–  Хранение необходимого для обновления кода, коллбэки •  Update

–  Дата/время обновления, идентификатор, статус действий, компиляции, юнит-тестов

Page 10: Caché github continuous intergration

•  Jenkins

•  Hudson

•  Bamboo

•  …

Примеры CI систем

Page 11: Caché github continuous intergration

Cache GitHub CI

Page 12: Caché github continuous intergration

•  Автоматическое получение репозитория GitHub инстансами Caché

•  Создание системы CI на COS

Цели проекта

Page 13: Caché github continuous intergration

Обновление с помощью task

Page 14: Caché github continuous intergration

PreCompile

Compile

PostCompile

UnitTests

Процесс обновления для hook/webhook

Page 15: Caché github continuous intergration

Обновление с помощью 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()

Page 16: Caché github continuous intergration

•  Аналогично, но: –  Нужен логин-пароль с администраторским доступом к репозиторию (в начале) –  Нужен сервер со внешним статичным ip

•  Преимущества –  Обновления мгновенные –  Нет ненужных обновлений

Обновление с помощью webhook

Код: Set hook.Username="GitHub Username" Set hook.Password="GitHub Password" W hook.CreateHook() Do hook.%Save()

Page 17: Caché github continuous intergration

•  Куб •  Дэшборд •  Листинг – История коммитов –  Автор –  Статус –  Время начала –  Время завершения –  Длительность –  SHA последнего коммита

•  Куб обновляется автоматически после изменения hook

Мониторинг

Page 18: Caché github continuous intergration

Конец https://github.com/intersystems-ru/CacheGitHubCI