La construcción de un proyecto de prueba Android con Jenkins falla debido a un error subyacente
Cuando intento construir un proyecto de prueba de Android en Jenkins recibo el mensaje de error siguiente:
BUILD FAILED C:\Progra~1\android-sdk\tools\ant\build.xml:444: The following error occurred while executing this line: C:\Progra~1\android-sdk\tools\ant\build.xml:444: subant task calling its own parent target.
Esto parece de alguna manera ser un problema conocido ( https://code.google.com/p/android/issues/detail?id=21108 , https://wiki.jenkins-ci.org/pages/viewpage.action?pageId = 58917193 ). Como se informó, la cuestión debería haber sido arreglado, pero todavía me enfrento con el problema descrito.
- Android Studio: ¿Cómo crear un archivo build.gradle para usarlo en Jenkins?
- Creación de una aplicación para Android con Jenkins
- ConnectedAndroidTest en varios emuladores
- Mostrar los resultados de Android Lint en Jenkins
- El demonio de compilación de Gradle desapareció inesperadamente (puede haber sido destruido o puede haberse estrellado) mientras construía un proyecto de Android en Jenkins
Estoy ejecutando Jenkins en un servidor de Windows, tienen las últimas herramientas de Android instalado (SDK herramientas v22.0.1, plataforma y herramientas de construcción v17) y utilizando Ant 1.9.0 ..
La estructura del proyecto es:
- Proyecto A
- Proyecto de prueba para el proyecto A
Creé un trabajo de construcción dedicado en Jenkins para ambos. Los archivos build.xml para ambos proyectos se han creado con el comando "android update" (como se describe en las especificaciones de Android). Así que ambos están haciendo referencia a la build.xml de la carpeta android-sdk / tools / ant. Haciendo referencia a las especificaciones de Apache Ant para subant ( http://ant.apache.org/manual/Tasks/subant.html ) esto podría ser la fuente del fracaso ?!
Esta tarea no debe utilizarse fuera de un destino si invoca el mismo archivo de compilación del que forma parte.
¿Alguno de ustedes ha tenido problemas similares? ¿Alguna idea de cómo resolverlo?
Gracias de antemano por tu ayuda.
- Proyecto Android de Maven en Jenkins
- Error al aplicar el complemento
- "Aapt" IOException error = 2, No hay tal archivo o directorio "¿por qué no puedo construir mi gradle en jenkins?
- Construir proyecto android desde jenkins bajo linux - build falla, no puede encontrar importado build.xml
- ¿Cómo configurar la actualización automática del repositorio de Google Support para el proyecto de Android?
- " Emulador no parecía comenzar; renunciando"
- TestUI (Jenkins) utilizando espresso
- ¿Por qué el Sonar no lee mis resultados de JUnit XML en Jenkins?
"Como se informó, el problema debería haber sido arreglado, pero todavía estoy enfrentando el problema descrito."
El problema al que se refiere ( problema 21108: probar proyecto de biblioteca roto con SDK Tools r14 ) no está fijo. Esto es similar al problema 21304: "ant debug installt" debería funcionar para proyectos de prueba. Que no será fijo.
Aquí está la solución de Joe Bowbeer :
-
Eliminar
tested.project.dir
deant.properties
-
Agregue el objetivo de las
run-tests
debuild.xml
abuild.xml
:<!-- SDK Tools r15 workaround --> <property name="tested.manifest.package" value="com.example.test" /> <target name="run-tests"> <echo>Running tests...</echo> <exec executable="${adb}" failonerror="true"> <arg line="${adb.device.arg}" /> <arg value="shell" /> <arg value="am" /> <arg value="instrument" /> <arg value="-w" /> <arg value="${tested.manifest.package}/${test.runner}" /> </exec>
-
Ejecutar pruebas utilizando la línea de comandos:
$ ant debug install run-tests
En otras palabras, si utilizas un único destino de instalación, necesitas cambiarlo.
Después de un par de horas de investigación finalmente encontré una solución!
Siempre me preguntaba por qué era capaz de construirlo localmente en mi máquina, pero no con Jenkins o incluso con ANT de la línea de comandos en el servidor remoto donde Jenkins se ejecuta. . Así que en lugar de ejecutar ANT con …
ant -Dsdk.dir=<YOUR SDK DIR> -Dtested.project.dir=<PATH TO YOUR PROJECT UNDER TEST> clean debug install test
…
Establecer la propiedad tested.project.dir dentro del archivo ant.properties a la ruta correcta en el servidor y comprobar esto en el repositorio de código fuente. Entonces quité la propiedad de la lista de argumentos para ANT en Jenkins, de modo que Jenkins ahora sólo ejecuta
ant -Dsdk.dir=<YOUR SDK DIR> clean debug install test
Y finalmente funciona.
(Por supuesto, es genarally no es una buena práctica para comprobar información de ruta específica en el repositorio.Pero finalmente está funcionando …)