ADC SPb
12 ноября 2010г
Построение процесса
непрерывной
интеграции в
проектах для iOS
Эльдар Марков, e-Legion
30.01.15 2
Непрерывная интеграция
Непрерывная интеграция != автоматическая сборка
Определение: Непрерывная интеграция (Continuous
Integration) — процесс выполнения автоматических
сборок, выявляющий возможные интеграционные
проблемы с помощью:

Компиляции исходных кодов

Запуск юнит-тестов

Любые другие средства, повышающие качество
30.01.15 3
Преимущества

Выполнение всей рутины

Уведомления о результатах сборки

Сохранение результатов сборки — всегда
доступные артефакты
30.01.15 4
Системы непрерывной
интеграции
Мы используем TeamCity (JetBrains):

Поддержка большого количества VCS

Полная версия бесплатная для малых групп

Способы запуска:

Command Line, Ant, Nant,Visual Studio,
Maven2, пр.
Другие системы:
Apache Continuum, Team Foundation Servers, Tinderbox,
BuildBox
30.01.15 5
Основные принципы работы
TeamCity Server

Мониторинг за состоянием репозитория

Запуск сборочного агента

Сборка проекта на стороне сборочного агента

Копирование артефактов на сервер

Предоставление доступа к артефактам сборки
30.01.15 6
Интерфейс
30.01.15 7
Сборка проекта

Компиляция, линковка

Выполнение юнит-тестов

Запуск Code Analyzer

Анализ логов всех этапов
30.01.15 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)
30.01.15 9
Добавление юнит-тестов
30.01.15 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
30.01.15 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
30.01.15 12
Сборка проекта агентом сборки

Коммандная строка

Комманда xcodebuild:
xcodebuild -project $ProjectName -alltargets -configuration
$ConfigurationName
-alltargets – сборка “рабочего” Target и Target c юнит-тестами
30.01.15 13
Xcode Code Analyzer

Статический анализатор кода на предмет
наличия ошибок

Xcode 3.2

Автоматический запуск при сборке
30.01.15 14
Xcode Code Analyzer. Пример
30.01.15 15
Контроль за «чистотой» кода

Анализ каждого этапа работы сборочного
агента

Формат предупреждений одинаковый:
Classes/(.*?.m:d+).*?warning:(.*)
Classes/FlipsideViewController.m:18: warning: unused variable 'rentPrice'
30.01.15 16
Работа с ветвями VCS

Конец итерации: создание ветви Test

Итерация:
− Исправление ошибок в Test, слияние с Trunk
− Текущая работа в Trunk

Конец итерации: создание ветви Production

goto begin
30.01.15 17
Работа с ветвями VCS.
Иллюстрация
30.01.15 18
Манифест процесса разработки

Юнит-тесты

Анализаторы кода

Система CI не должна долгое время
находиться в состоянии «неудачная сборка»

Частые коммиты
30.01.15 19
Результаты ввода

Избавление разработчиков от рутины
− Сборка, анализ
− Предоставление результатов сборки

Повешение текущего качества продукта
− Юнит-тесты
− Своевременное исправление ошибок
Спасибо за внимание!

Эльдар Марков

  • 1.
    ADC SPb 12 ноября2010г Построение процесса непрерывной интеграции в проектах для iOS Эльдар Марков, e-Legion
  • 2.
    30.01.15 2 Непрерывная интеграция Непрерывнаяинтеграция != автоматическая сборка Определение: Непрерывная интеграция (Continuous Integration) — процесс выполнения автоматических сборок, выявляющий возможные интеграционные проблемы с помощью:  Компиляции исходных кодов  Запуск юнит-тестов  Любые другие средства, повышающие качество
  • 3.
    30.01.15 3 Преимущества  Выполнение всейрутины  Уведомления о результатах сборки  Сохранение результатов сборки — всегда доступные артефакты
  • 4.
    30.01.15 4 Системы непрерывной интеграции Мыиспользуем TeamCity (JetBrains):  Поддержка большого количества VCS  Полная версия бесплатная для малых групп  Способы запуска:  Command Line, Ant, Nant,Visual Studio, Maven2, пр. Другие системы: Apache Continuum, Team Foundation Servers, Tinderbox, BuildBox
  • 5.
    30.01.15 5 Основные принципыработы TeamCity Server  Мониторинг за состоянием репозитория  Запуск сборочного агента  Сборка проекта на стороне сборочного агента  Копирование артефактов на сервер  Предоставление доступа к артефактам сборки
  • 6.
  • 7.
    30.01.15 7 Сборка проекта  Компиляция,линковка  Выполнение юнит-тестов  Запуск Code Analyzer  Анализ логов всех этапов
  • 8.
    30.01.15 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)
  • 9.
  • 10.
    30.01.15 10 Пример юнит-теста @interfaceLogicTests : 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
  • 11.
    30.01.15 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
  • 12.
    30.01.15 12 Сборка проектаагентом сборки  Коммандная строка  Комманда xcodebuild: xcodebuild -project $ProjectName -alltargets -configuration $ConfigurationName -alltargets – сборка “рабочего” Target и Target c юнит-тестами
  • 13.
    30.01.15 13 Xcode CodeAnalyzer  Статический анализатор кода на предмет наличия ошибок  Xcode 3.2  Автоматический запуск при сборке
  • 14.
    30.01.15 14 Xcode CodeAnalyzer. Пример
  • 15.
    30.01.15 15 Контроль за«чистотой» кода  Анализ каждого этапа работы сборочного агента  Формат предупреждений одинаковый: Classes/(.*?.m:d+).*?warning:(.*) Classes/FlipsideViewController.m:18: warning: unused variable 'rentPrice'
  • 16.
    30.01.15 16 Работа светвями VCS  Конец итерации: создание ветви Test  Итерация: − Исправление ошибок в Test, слияние с Trunk − Текущая работа в Trunk  Конец итерации: создание ветви Production  goto begin
  • 17.
    30.01.15 17 Работа светвями VCS. Иллюстрация
  • 18.
    30.01.15 18 Манифест процессаразработки  Юнит-тесты  Анализаторы кода  Система CI не должна долгое время находиться в состоянии «неудачная сборка»  Частые коммиты
  • 19.
    30.01.15 19 Результаты ввода  Избавлениеразработчиков от рутины − Сборка, анализ − Предоставление результатов сборки  Повешение текущего качества продукта − Юнит-тесты − Своевременное исправление ошибок
  • 20.