ݺߣ

ݺߣShare a Scribd company logo
Приемы С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

More Related Content

What's hot (15)

Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Ontico
Сергей Орлов
Сергей ОрловСергей Орлов
Сергей Орлов
CodeFest
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Ontico
Workflows в Express 42
Workflows в Express 42Workflows в Express 42
Workflows в Express 42
Igor Kurochkin
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
CodeFest
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула
Fwdays
Управление контейнерами в облаках
 Управление контейнерами в облаках Управление контейнерами в облаках
Управление контейнерами в облаках
Aleksey Zalesov
Александр Белоцерковский
Александр БелоцерковскийАлександр Белоцерковский
Александр Белоцерковский
CodeFest
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
CodeFest
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Ontico
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
GeeksLab Odessa
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
SCINO
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Ontico
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
2ГИС Технологии
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Ontico
Сергей Орлов
Сергей ОрловСергей Орлов
Сергей Орлов
CodeFest
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Chef по обе стороны Bamboo / Артем Семенов (Align Technology)
Ontico
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
CodeFest
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула
Fwdays
Управление контейнерами в облаках
 Управление контейнерами в облаках Управление контейнерами в облаках
Управление контейнерами в облаках
Aleksey Zalesov
Александр Белоцерковский
Александр БелоцерковскийАлександр Белоцерковский
Александр Белоцерковский
CodeFest
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
CodeFest
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Ontico
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
Java/Scala Lab: Владимир Илюшенко - Jelastic PaaS v2.5 Capabilities and Benef...
GeeksLab Odessa
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
SCINO
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Ontico
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
2ГИС Технологии

Viewers also liked (16)

MedupiFactSheetSept2013
MedupiFactSheetSept2013MedupiFactSheetSept2013
MedupiFactSheetSept2013
Matthew Wright
Vereadores Eleitos Vereadores Eleitos
Vereadores Eleitos
moreiraneto27888
Тактична допомога пораненим у бою
Тактична допомога пораненим у боюТактична допомога пораненим у бою
Тактична допомога пораненим у бою
doct65
2-RETAIL JANUARY- 2016-CV
2-RETAIL JANUARY- 2016-CV2-RETAIL JANUARY- 2016-CV
2-RETAIL JANUARY- 2016-CV
DHARMESH DAVE
Mahatma gandhi Mahatma gandhi
Mahatma gandhi
Jonathan Perez
Cartilha do candidatoCartilha do candidato
Cartilha do candidato
moreiraneto27888
Boots: Hair care sales promotion
Boots: Hair care sales promotionBoots: Hair care sales promotion
Boots: Hair care sales promotion
Tanmay Garg
Por la seguridad de todosPor la seguridad de todos
Por la seguridad de todos
dec-admin
Gnb 10 12e
Gnb 10 12eGnb 10 12e
Gnb 10 12e
Saif Mahmud
Formación de la personalidad criminalFormación de la personalidad criminal
Formación de la personalidad criminal
Elismary Acosta de Mendoza
Tecnologia e sustentabilidadeTecnologia e sustentabilidade
Tecnologia e sustentabilidade
deniseramos123
Full Waveform Inversion: Introdução e Aplicações [3/5]Full Waveform Inversion: Introdução e Aplicações [3/5]
Full Waveform Inversion: Introdução e Aplicações [3/5]
Grupo de Geofísica Computacional, UNICAMP
Fenômenos eletromagnéticos: conceitos e aplicações em Geofísica e FísicaFenômenos eletromagnéticos: conceitos e aplicações em Geofísica e Física
Fenômenos eletromagnéticos: conceitos e aplicações em Geofísica e Física
Grupo de Geofísica Computacional, UNICAMP
Karbohidratet dhe funksioni i tyre kimik
Karbohidratet dhe funksioni i tyre kimikKarbohidratet dhe funksioni i tyre kimik
Karbohidratet dhe funksioni i tyre kimik
Septic Flesh
energía eolicaenergía eolica
energía eolica
YohannaCarrion
CuentosCuentos
Cuentos
Da Nii
Vereadores Eleitos Vereadores Eleitos
Vereadores Eleitos
moreiraneto27888
Тактична допомога пораненим у бою
Тактична допомога пораненим у боюТактична допомога пораненим у бою
Тактична допомога пораненим у бою
doct65
Mahatma gandhi Mahatma gandhi
Mahatma gandhi
Jonathan Perez
Cartilha do candidatoCartilha do candidato
Cartilha do candidato
moreiraneto27888
Boots: Hair care sales promotion
Boots: Hair care sales promotionBoots: Hair care sales promotion
Boots: Hair care sales promotion
Tanmay Garg
Por la seguridad de todosPor la seguridad de todos
Por la seguridad de todos
dec-admin
Formación de la personalidad criminalFormación de la personalidad criminal
Formación de la personalidad criminal
Elismary Acosta de Mendoza
Tecnologia e sustentabilidadeTecnologia e sustentabilidade
Tecnologia e sustentabilidade
deniseramos123
Full Waveform Inversion: Introdução e Aplicações [3/5]Full Waveform Inversion: Introdução e Aplicações [3/5]
Full Waveform Inversion: Introdução e Aplicações [3/5]
Grupo de Geofísica Computacional, UNICAMP
Fenômenos eletromagnéticos: conceitos e aplicações em Geofísica e FísicaFenômenos eletromagnéticos: conceitos e aplicações em Geofísica e Física
Fenômenos eletromagnéticos: conceitos e aplicações em Geofísica e Física
Grupo de Geofísica Computacional, UNICAMP
Karbohidratet dhe funksioni i tyre kimik
Karbohidratet dhe funksioni i tyre kimikKarbohidratet dhe funksioni i tyre kimik
Karbohidratet dhe funksioni i tyre kimik
Septic Flesh
energía eolicaenergía eolica
energía eolica
YohannaCarrion
CuentosCuentos
Cuentos
Da Nii

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

Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
Кузьмицкий Александр
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
Gonchik Tsymzhitov
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
Positive Hack Days
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
Andrey Kazarinov
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
Alexander Titov
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
Vladimir Bakhov
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePoint
Vitaly Baum
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
Andrey Kazarinov
Как настроить запуск R скриптов по расписанию с помощью GitHub Actions
Как настроить запуск R скриптов по расписанию с помощью GitHub ActionsКак настроить запуск R скриптов по расписанию с помощью GitHub Actions
Как настроить запуск R скриптов по расписанию с помощью GitHub Actions
Алексей Селезнёв
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
SQALab
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
Viacheslav Slinko
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Ontico
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
Denis Vasilyev
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Anton Baranov
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
Gonchik Tsymzhitov
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
Positive Hack Days
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
Andrey Kazarinov
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
Alexander Titov
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
Vladimir Bakhov
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePoint
Vitaly Baum
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
Andrey Kazarinov
Как настроить запуск R скриптов по расписанию с помощью GitHub Actions
Как настроить запуск R скриптов по расписанию с помощью GitHub ActionsКак настроить запуск R скриптов по расписанию с помощью GitHub Actions
Как настроить запуск R скриптов по расписанию с помощью GitHub Actions
Алексей Селезнёв
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
SQALab
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
Viacheslav Slinko
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Ontico
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
Denis Vasilyev
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Anton Baranov
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
Yandex

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

  • 1. Приемы Сontinuous Integration при разработке приложений на Caché Лебедюк Эдуард
  • 3. Система контроля версий ПО для облегчения работы с изменяющейся информацией
  • 4. • История изменений • Откат нежелательных изменений • Совместная работа • Код не теряется • Нерабочие фичи не ломают основной билд Зачем нужен контроль версий?
  • 5. • Хуки на все основные действия (компиляция, нажатие кнопок, изменение класса) • Экспорт/импорт – CLS - Классы – CSP – Веб-страницы – CSR - Правила – MAC - Рутины – INT – код – BAS - Basic routines • Можно расширять • Есть открытые примеры реализации – Cache-tortoise-git – Cache-source-control – SCMin Что есть в Caché? – INC – файлы препроцессора – GBL - Глобалы – PRJ - Проекты – OBJ – Скомпилированный код – PKG – Проекты – DFI – Объекты DeepSee
  • 6. Continuous Integration Практика разработки программного обеспечения для скорейшего выявления и решения интеграционных проблем
  • 7. • Автоматизация развёртки проекта • Автоматизация тестирования • Лень • «Кто сломал билд?» Зачем нужен CI
  • 9. Функциональные модули CI решения • Integration – Основная информация о репозитории и цели (Откуда брать код? Что с ним делать?) • Activator – Создание задания/хука/прочая, инициализирующего обновление • Connector – Реализация интерфейса получения файлов из системы контроля версий • Parser – Парсинг содержимого репозитория и передача его компилятору • Action – Хранение необходимого для обновления кода, коллбэки • Update – Дата/время обновления, идентификатор, статус действий, компиляции, юнит-тестов
  • 10. • Jenkins • Hudson • Bamboo • … Примеры CI систем
  • 12. • Автоматическое получение репозитория GitHub инстансами Caché • Создание системы CI на COS Цели проекта
  • 15. Обновление с помощью 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()
  • 16. • Аналогично, но: – Нужен логин-пароль с администраторским доступом к репозиторию (в начале) – Нужен сервер со внешним статичным ip • Преимущества – Обновления мгновенные – Нет ненужных обновлений Обновление с помощью webhook Код: Set hook.Username="GitHub Username" Set hook.Password="GitHub Password" W hook.CreateHook() Do hook.%Save()
  • 17. • Куб • Дэшборд • Листинг – История коммитов – Автор – Статус – Время начала – Время завершения – Длительность – SHA последнего коммита • Куб обновляется автоматически после изменения hook Мониторинг