Подтвердить что ты не робот

Служба 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 недостаточно гибко для моих потребностей (см. Выше), и что старый способ с Дженкинсом имеет некоторые проблемы (см. Выше).
4b9b3361

Ответ 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.