Эльдар Марков
DESCRIPTION
TRANSCRIPT
ADC SPb12 ноября 2010г
Построение процесса непрерывной интеграции в проектах для iOSЭльдар Марков, e-Legion
10.04.23 2
Непрерывная интеграция
Непрерывная интеграция != автоматическая сборка
Определение: Непрерывная интеграция (Continuous Integration) — процесс выполнения автоматических сборок, выявляющий возможные интеграционные проблемы с помощью: Компиляции исходных кодов Запуск юнит-тестов Любые другие средства, повышающие
качество
10.04.23 3
Преимущества
Выполнение всей рутины Уведомления о результатах сборки Сохранение результатов сборки —
всегда доступные артефакты
10.04.23 4
Системы непрерывной интеграции
Мы используем TeamCity (JetBrains): Поддержка большого количества VCS Полная версия бесплатная для малых
групп Способы запуска:
Command Line, Ant, Nant,Visual Studio, Maven2, пр.
Другие системы: Apache Continuum, Team Foundation Servers,
Tinderbox, BuildBox
10.04.23 5
Основные принципы работы TeamCity Server
Мониторинг за состоянием репозитория
Запуск сборочного агента Сборка проекта на стороне сборочного
агента Копирование артефактов на сервер Предоставление доступа к артефактам
сборки
10.04.23 6
Интерфейс
10.04.23 7
Сборка проекта
Компиляция, линковка Выполнение юнит-тестов Запуск Code Analyzer Анализ логов всех этапов
10.04.23 8
Юнит-тесты
Рабочий фрейворк — Google Toolbox for Mac
Альтернативы: SenTestingKit framework (Xcode) GHUnit
Принцип работы большинства — создание Target в Xcode. Запуск юнит-тестов — сборка этой Target.
STAssertTrue(gTestMultiDelegateVar == 2 + 2 * 1,@"Adding twice '1'... Should be == 6 but now it's
%d", gTestMultiDelegateVar)
10.04.23 9
Добавление юнит-тестов
10.04.23 10
Пример юнит-теста
@interface LogicTests : GTMTestCase {
}
- (void)testPerformSelector;
@end
@implementation LogicTests
- (void) testPerformSelector {
NSString *resFor3Params = [self performSelector:@selector(returnString:obj2:obj3:) withObject:nil withObject:nil withObject:nil];
STAssertTrue ([resFor3Params isEqualToString:@"YES"], @"should be 'YES'");
}
@end
10.04.23 11
Пример юнит-теста. Запуск
Build results:
Test Case '-[LogicTests testConfig]' started.
Test Case '-[LogicTests testConfig]' passed (0.000 seconds).
Test Case '-[LogicTests testMultiDelegate]' started.
LogicTests.m:105: error: -[LogicTests testMultiDelegate] : 'gTestMultiDelegateVar == 2 + 2 * 1' should be true. Adding twice '1'... Should be == 6 but now it's 6
10.04.23 12
Сборка проекта агентом сборки
Коммандная строка Комманда xcodebuild:xcodebuild -project $ProjectName -alltargets -
configuration $ConfigurationName
-alltargets – сборка “рабочего” Target и Target c юнит-тестами
10.04.23 13
Xcode Code Analyzer
Статический анализатор кода на предмет наличия ошибок
Xcode 3.2 Автоматический запуск при сборке
10.04.23 14
Xcode Code Analyzer. Пример
10.04.23 15
Контроль за «чистотой» кода
Анализ каждого этапа работы сборочного агента
Формат предупреждений одинаковый:Classes\/(.*?\.m:\d+).*?warning:(.*)
Classes/FlipsideViewController.m:18: warning: unused variable 'rentPrice'
10.04.23 16
Работа с ветвями VCS
Конец итерации: создание ветви Test Итерация:
Исправление ошибок в Test, слияние с Trunk Текущая работа в Trunk
Конец итерации: создание ветви Production
goto begin
10.04.23 17
Работа с ветвями VCS. Иллюстрация
10.04.23 18
Манифест процесса разработки
Юнит-тесты Анализаторы кода Система CI не должна долгое время
находиться в состоянии «неудачная сборка»
Частые коммиты
10.04.23 19
Результаты ввода
Избавление разработчиков от рутины Сборка, анализ Предоставление результатов сборки
Повешение текущего качества продукта
Юнит-тесты Своевременное исправление ошибок
Спасибо за внимание!