Служба Apple CI/Xcode и Дженкинс
Есть ли способ/плагин для интеграции новой службы Xcode и/или нового Apple CI с Jenkins?
Почему?
Основная проблема с наличием сервера Jenkins + ведомого устройства OSX, подключенного через ssh
, заключается в том, что Тесты не работают, поскольку iOS Simulator нуждается в графической среде, которая отсутствует в этом конфигурации.
Надеюсь, что с помощью Jenkins можно интегрировать службу Xcode (которая поддерживает Unit Testing).
Возможно, использование Apple CI будет достаточно для моих нужд, но этот вопрос направлен на интеграцию службы Xcode с Jenkins.
Что я уже знаю
У меня есть опыт работы с существующим плагином Xcode Jenkins, но, похоже, он не поддерживает новую услугу Xcode или новый Apple CI. Я особенно заинтересован в модульном тестировании через CI (который не работал должным образом по сеансу ssh со старым способом).
Что я хочу знать
Мне бы хотелось получить информацию о следующих проблемах, которые в настоящее время не работают с Jenkins и подключенным ведомым устройством ssh
:
- Единичные тесты на безголовой системе
- Приемочные тесты с Frank или аналогичными
- Автоматическое обновление профиля Provisioning Profile (Apple CI делает это)
И информация о том, что в настоящее время отлично работает с Jenkins и подключенным ведомым устройством ssh
, и все равно должна работать с интеграцией сервисов Xcode:
- Создание различных конфигураций компоновки (Release, Debug, TestFlight)/схем
- Автоматическое увеличение числа сборки
- (С Jenkins я могу установить номер сборки в моем проекте на
${BUILD_NUMBER}
, а Jenkins задает эту переменную среды в соответствии со своим номером сборки. Когда Apple CI делает сборки, скорее всего, он установит номер сборки вместо этого.)
- Обработка/синхронизация номера сборки между Jenkins и Apple CI
- Доступ к сборке продуктов Apple CI из разных Jenkins Jobs
- например. для задания для загрузки в TestFlight
- Резервное копирование сборок
- Автоматическое построение на git нажатие на конкретную ветку
- Уведомления по электронной почте
Некоторые дополнительные вопросы/подсказки
- Я не уверен, есть ли
Apple CI == Xcode service
или если Apple CI просто использует службу Xcode. В последнем случае служба Xcode просто будет похожа на интеллектуальную сборку slave, и Jenkins, возможно, может использовать ее для создания сборок и тестов, но сама по себе может управлять номерами и продуктами сборки.
- Я знаю, что Apple CI - это отдельный CI, и интеграция нескольких CI друг с другом - не самый простой или полезный способ. Я просто боюсь, что Apple CI недостаточно гибко для моих потребностей (см. Выше), и что старый способ с Дженкинсом имеет некоторые проблемы (см. Выше).
Ответы
Ответ 1
Я считаю, что вам придется выбирать либо jenkins, либо сервер xcode, а не оба. Я мало знаю о сервере xcode, но я знаю о jenkins и xcode 5.
Создает различные конфигурации:
В плагине xcode вы можете установить схему для использования.
Автоматическое увеличение числа элементов сборки
Я добавил параметр к моему заданию jenkins под названием XCODEBUILDNUMBER. И всякий раз, когда я начинаю сборку, я просто копирую номер сборки из моего проекта xcode (я увеличиваю его вручную, Mine выглядит как 080813A) и вставляет его в параметр XCODEBUILD. Я использую это, чтобы назвать мои выходные файлы и т.д. Существуют плагины для jenkins, которые могут автоматически увеличивать ваш номер сборки, но они не интегрируются или не синхронизируются с xcode.
Обработка/синхронизация номера сборки между Jenkins и Apple CI
Как я уже говорил, я не знаю способа синхронизации номеров сборки, но я просто подумал о возможном решении. Вы можете использовать инструмент командной строки plistbuddy, чтобы установить номер сборки в вашем файле info.plist, как шаг сборки в вашей работе jenkins.
Тесты устройств
Я не успешно выполнял модульные тесты с Xcode5, но я знаю, что плагин xcode для jenkins поддерживает его. Я считаю, что отсутствие ключа "Test After Build" в настройках проекта может иметь какое-то отношение к нему. Если вы заработаете, я бы с удовольствием узнал. (Я также заинтересован в выполнении этой работы)
Приемочные тесты
Из того, что я могу сказать, Фрэнк - инструмент командной строки. Вы можете легко интегрировать ее в свою работу Jenkins, и я считаю, что она не сработает, если ваши тесты не пройдут.
Доступ к сборке продуктов Apple CI из разных Jenkins Jobs
Не совсем уверен, что вы имеете в виду, но с jenkins вы можете архивировать свой продукт сборки (.ipa), для последующей загрузки и загрузки в службу, например testflight. Опять же, я мало знаю о Xcode Server (CI).
Резервное копирование сборок
Как я уже говорил, дженкинс может архивировать ваш продукт сборки. Кроме того, я использую переменную ${BUILD_NUMBER} в каталоге продуктов для сборки, поэтому у меня есть другой каталог для каждой сборки. Этот каталог также резервируется до моего Time Machine, а важные сборки копируются в мой веб-каталог.
Автоматическое построение на git нажатие на конкретную ветвь
С плагином jenkins git вы можете заставить jenkins опросить ваш scm в указанном вами интервале и может вызвать сборку изменений.
Уведомления по электронной почте
Я уверен, что для этого есть плагин. (это письмо вам, когда сборка не удалась/преуспела. Фактически, это может быть встроено)
При закрытии
xcode CI - это полный независимый CI, который трудно интегрировать с дженкинсами. Лично я бы порекомендовал jenkins просто из-за его расширяемости. Извините, я мало знаю о Xcode Server.
Ответ 2
У меня есть модульные тесты, запущенные в Jenkins с Xcode 5 на моем подчиненном устройстве OS X. Вместо использования плагина Xcode я запускаю как шаг сборки оболочки:
xcodebuild test -scheme <scheme> -configuration Coverage -sdk iphonesimulator7.0 -destination OS=7.0,name="iPhone Retina (4-inch)"
Конфигурация моего покрытия - то же самое, что и моя конфигурация Debug, кроме Создать отчеты о тестировании покрытия установлена на YES и Flow программы установлен на YES. Это делается для создания файлов тестового покрытия. Из-за ошибки в Xcode 5 я вызываю __ gcov_flush(); в tearDown всех моих тестов. Я передаю вывод этой команды xcodebuild в ocunit2junit, чтобы получить тестовые отчеты в Jenkins.