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

20
ADC SPb 12 ноября 2010г Построение процесса непрерывной интеграции в проектах для iOS Эльдар Марков, e-Legion

Upload: alarin

Post on 05-Dec-2014

962 views

Category:

Documents


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Эльдар Марков

ADC SPb12 ноября 2010г

Построение процесса непрерывной интеграции в проектах для iOSЭльдар Марков, e-Legion

Page 2: Эльдар Марков

10.04.23 2

Непрерывная интеграция

Непрерывная интеграция != автоматическая сборка

Определение: Непрерывная интеграция (Continuous Integration) — процесс выполнения автоматических сборок, выявляющий возможные интеграционные проблемы с помощью: Компиляции исходных кодов Запуск юнит-тестов Любые другие средства, повышающие

качество

Page 3: Эльдар Марков

10.04.23 3

Преимущества

Выполнение всей рутины Уведомления о результатах сборки Сохранение результатов сборки —

всегда доступные артефакты

Page 4: Эльдар Марков

10.04.23 4

Системы непрерывной интеграции

Мы используем TeamCity (JetBrains): Поддержка большого количества VCS Полная версия бесплатная для малых

групп Способы запуска:

Command Line, Ant, Nant,Visual Studio, Maven2, пр.

Другие системы: Apache Continuum, Team Foundation Servers,

Tinderbox, BuildBox

Page 5: Эльдар Марков

10.04.23 5

Основные принципы работы TeamCity Server

Мониторинг за состоянием репозитория

Запуск сборочного агента Сборка проекта на стороне сборочного

агента Копирование артефактов на сервер Предоставление доступа к артефактам

сборки

Page 6: Эльдар Марков

10.04.23 6

Интерфейс

Page 7: Эльдар Марков

10.04.23 7

Сборка проекта

Компиляция, линковка Выполнение юнит-тестов Запуск Code Analyzer Анализ логов всех этапов

Page 8: Эльдар Марков

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)

Page 9: Эльдар Марков

10.04.23 9

Добавление юнит-тестов

Page 10: Эльдар Марков

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

Page 11: Эльдар Марков

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

Page 12: Эльдар Марков

10.04.23 12

Сборка проекта агентом сборки

Коммандная строка Комманда xcodebuild:xcodebuild -project $ProjectName -alltargets -

configuration $ConfigurationName

-alltargets – сборка “рабочего” Target и Target c юнит-тестами

Page 13: Эльдар Марков

10.04.23 13

Xcode Code Analyzer

Статический анализатор кода на предмет наличия ошибок

Xcode 3.2 Автоматический запуск при сборке

Page 14: Эльдар Марков

10.04.23 14

Xcode Code Analyzer. Пример

Page 15: Эльдар Марков

10.04.23 15

Контроль за «чистотой» кода

Анализ каждого этапа работы сборочного агента

Формат предупреждений одинаковый:Classes\/(.*?\.m:\d+).*?warning:(.*)

Classes/FlipsideViewController.m:18: warning: unused variable 'rentPrice'

Page 16: Эльдар Марков

10.04.23 16

Работа с ветвями VCS

Конец итерации: создание ветви Test Итерация:

Исправление ошибок в Test, слияние с Trunk Текущая работа в Trunk

Конец итерации: создание ветви Production

goto begin

Page 17: Эльдар Марков

10.04.23 17

Работа с ветвями VCS. Иллюстрация

Page 18: Эльдар Марков

10.04.23 18

Манифест процесса разработки

Юнит-тесты Анализаторы кода Система CI не должна долгое время

находиться в состоянии «неудачная сборка»

Частые коммиты

Page 19: Эльдар Марков

10.04.23 19

Результаты ввода

Избавление разработчиков от рутины Сборка, анализ Предоставление результатов сборки

Повешение текущего качества продукта

Юнит-тесты Своевременное исправление ошибок

Page 20: Эльдар Марков

Спасибо за внимание!