delivery ios xcode macos jenkins continuous-integration

delivery - jenkins ios



Servicio de Apple CI/Xcode y Jenkins (2)

¿Hay alguna forma / complemento para integrar el nuevo servicio Xcode y / o el nuevo Apple CI con Jenkins?

¿Por qué?

Un problema principal al tener un servidor Jenkins + un esclavo de construcción OSX conectado a través de ssh es que las pruebas unitarias no funcionan , ya que el simulador iOS necesita un entorno gráfico que no está presente en esta configuración.

Espero que sea posible integrar el servicio Xcode (que admite pruebas de unidad) con Jenkins.

Podría ser que usar el CI de Apple sea suficiente para mis necesidades, pero esta pregunta apunta a la integración del servicio de Xcode con Jenkins .

Lo que ya sé

Tengo experiencia con el plugin Xcode Jenkins existente , pero parece que no es compatible con el nuevo servicio Xcode o el nuevo Apple CI. Estoy especialmente interesado en pruebas unitarias a través de CI (que no funcionó correctamente en una sesión ssh a la manera antigua).

Qué quiero saber

Me gustaría obtener información sobre los siguientes problemas que actualmente no funcionan con Jenkins y un esclavo de compilación ssh conectado:

  • Pruebas unitarias en un sistema sin cabeza
  • Pruebas de aceptación con Frank o similar
  • Actualización automática del Perfil de Aprovisionamiento (Apple CI lo hace)

Y la información sobre cosas que actualmente funcionan bien con Jenkins y un esclavo de compilación conectado ssh y aún deberían funcionar con una integración de servicio Xcode:

  • Construye diferentes configuraciones de compilación (Release, Debug, TestFlight) / esquemas
  • Incremento automático del número de compilación
    • (Con Jenkins puedo establecer el número de compilación en mi proyecto en ${BUILD_NUMBER} , y Jenkins establece esta variable de entorno de acuerdo con su número de compilación. Cuando el Apple CI hace las compilaciones, lo más probable es que establezca el número de compilación).
    • Manejo / sincronización del número de Build entre Jenkins y Apple CI
  • Accediendo a los productos de construcción del CI de Apple desde diferentes puestos de trabajo de Jenkins
    • por ejemplo, para que un trabajo se cargue a TestFlight
  • Copia de seguridad de construcciones
  • Creaciones automáticas en git push para una rama específica
  • Notificaciónes de Correo Electrónico

Algunas preguntas / consejos adicionales

  • No estoy seguro de si el servicio Apple CI == Xcode service o si el CI de Apple solo usa el servicio Xcode. En este último caso, el servicio de Xcode sería como un esclavo de compilación inteligente, y Jenkins podría usarlo para hacer construcciones y pruebas, pero administrar los números de compilación y los productos por sí mismo.
  • Soy consciente de que el CI de Apple es un CI separado, y la integración de varios IC entre sí no es la manera más fácil o útil de hacerlo. Me temo que el CI de Apple no es lo suficientemente flexible para mis necesidades (ver arriba), y que la vieja forma con Jenkins tiene algunos problemas (ver arriba).

Creo que tendrá que elegir el servidor jenkins o xcode, no ambos. No sé mucho sobre el servidor xcode, pero sí sé sobre jenkins y xcode 5.

Construye con diferentes configuraciones :

En el complemento xcode, puede establecer el esquema para usar.

Aumento automático del número de compilación

Agregué un parámetro a mi trabajo jenkins llamado XCODEBUILDNUMBER. Y cada vez que comienzo una compilación, simplemente copio el número de compilación de mi proyecto xcode (lo incremento manualmente. Mine se parece a 080813A) y lo pego en el parámetro XCODEBUILD. Lo uso para nombrar mis archivos de salida, etc. Hay complementos para jenkins que pueden incrementar automáticamente su número de compilación, pero no se integran ni se sincronizan con xcode.

Manejo / sincronización del número de Build entre Jenkins y Apple CI

Como dije antes, no conozco una manera de sincronizar los números de compilación, pero pensé en una posible solución. Puede usar la herramienta de línea de comandos plistbuddy , para establecer el número de compilación en su info.plist, como un paso de compilación en su trabajo de jenkins.

Pruebas unitarias

No he logrado que las pruebas unitarias funcionen con Xcode5, pero sé que el complemento xcode para jenkins lo admite. Creo que la ausencia de la clave "Test After Build" en la configuración del proyecto puede tener algo que ver con eso. Si lo haces funcionar, me encantaría saberlo. (También estoy interesado en hacer que esto funcione)

Prueba de aceptacion

Por lo que puedo decir, Frank es una herramienta de línea de comandos. Puede integrarlo fácilmente en su trabajo de Jenkins, y creo que fallará la compilación si sus pruebas no se superan.

Accediendo a los productos de construcción del CI de Apple desde diferentes puestos de trabajo de Jenkins

No estoy completamente seguro de lo que quiere decir, pero con jenkins puede archivar su producto de compilación (a .ipa), para su posterior descarga y carga en un servicio como testflight. Una vez más, no sé mucho sobre Xcode Server (CI).

Copia de seguridad de construcciones

Como dije antes, jenkins puede archivar su producto de construcción. Además, utilizo la variable $ {BUILD_NUMBER} en mi directorio de productos de compilación, por lo que tengo un directorio diferente para cada compilación. Este directorio también está respaldado en mi Time Machine, y las compilaciones importantes se copiaron en mi directorio web.

Creaciones automáticas en git push para una rama específica

Con el plugin jenkins git, puedes hacer que jenkins sondee tu scm en un intervalo especificado por ti, y puede desencadenar una compilación en un cambio.

Notificaciónes de Correo Electrónico

Estoy seguro de que hay un complemento para esto. (que le envía un correo electrónico cuando una construcción falló / tuvo éxito. De hecho, esto puede estar incorporado)

Para concluir

El CI xcode es un CI independiente completo, que puede ser difícil de integrar con jenkins. Personalmente, recomendaría a jenkins simplemente por su extensibilidad. Lo siento, no sé mucho sobre Xcode Server.


Tengo pruebas unitarias ejecutándose en Jenkins con Xcode 5 en mi esclavo de compilación OS X. En lugar de usar el complemento de Xcode, lo ejecuto como un paso de compilación de shell de ejecución:

xcodebuild test -scheme <scheme> -configuration Coverage -sdk iphonesimulator7.0 -destination OS=7.0,name="iPhone Retina (4-inch)"

Mi configuración de cobertura es exactamente la misma que mi configuración de depuración, excepto Generar informes de cobertura de prueba está establecido en , y el Flujo del programa del instrumento está establecido en . Esto se hace para que se creen archivos de cobertura de prueba. Debido a un error en Xcode 5, llamo a __gcov_flush (); en la lágrima De todas mis pruebas. Canalizo la salida de este comando xcodebuild en ocunit2junit para obtener informes de prueba en Jenkins.