web-dev-qa-db-fra.com

Jenkins build a échoué en raison de l'absence de SDK Android

Comme le titre le dit, ma construction de jenkins a échoué parce que le sdk Android n’a pas été trouvé, mais ne se trouve pas dans le chemin des environnements.

Voici les logs de la console

Started by user anonymous
Building in workspace /Users/lmnapp/.jenkins/jobs/Android_app_master/workspace
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.Origin.url https://bitbucket.org/xxxxx-xxx/xxxx-Android-app.git # timeout=10
Fetching upstream changes from https://bitbucket.org/xxxx-mob/xxxx-Android-app.git
 > git --version # timeout=10
using .gitcredentials to set credentials
 > git config --local credential.helper store --file=/var/folders/gj/xxxxxxxx/T/xxxxx.credentials # timeout=10

+ export Android_HOME=/Users/lmnapp/Android-sdk-macosx
+ Android_HOME=/Users/lmnapp/Android-sdk-macosx
+ export Android_SDK=/Users/lmnapp/Android-sdk-macosx/platforms
+ Android_SDK=/Users/lmnapp/Android-sdk-macosx/platforms
+ export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/Users/lmnapp/Android-sdk-macosx/tools:/Users/lmnapp/Android-sdk-macosx/platform-tools:/Users/lmnapp/Android-sdk-macosx
+ PATH=/usr/bin:/bin:/usr/sbin:/sbin:/Users/lmnapp/Android-sdk-macosx/tools:/Users/lmnapp/Android-sdk-macosx/platform-tools:/Users/lmnapp/Android-sdk-macosx
+ export AVD_NAME=jenkinsGoogleApi18_1
+ AVD_NAME=jenkinsGoogleApi18_1
+ echo displayPath
displayPath
+ echo ....
....
+ echo ....
....
+ echo /usr/bin:/bin:/usr/sbin:/sbin:/Users/lmnapp/Android-sdk-macosx/tools:/Users/lmnapp/Android-sdk-macosx/platform-tools:/Users/lmnapp/Android-sdk-macosx
/usr/bin:/bin:/usr/sbin:/sbin:/Users/lmnapp/Android-sdk-macosx/tools:/Users/lmnapp/Android-sdk-macosx/platform-tools:/Users/lmnapp/Android-sdk-macosx
+ adb start-server
[Gradle] - Launching build.
[workspace] $ /Users/lmnapp/.jenkins/jobs/Android_app_master/workspace/gradlew assembleProductionRelease
Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
Java.lang.RuntimeException: SDK location not found. Define location with sdk.dir in the local.properties file or with an Android_HOME environment variable.
    at com.Android.build.gradle.internal.SdkHandler.getAndCheckSdkFolder(SdkHandler.Java:103)
    at com.Android.build.gradle.internal.SdkHandler.getSdkLoader(SdkHandler.Java:113)
    at com.Android.build.gradle.internal.SdkHandler.initTarget(SdkHandler.Java:87)
    at com.Android.build.gradle.BasePlugin.ensureTargetSetup(BasePlugin.groovy:467)
    at com.Android.build.gradle.BasePlugin.access$0(BasePlugin.groovy)
    at com.Android.build.gradle.BasePlugin$_createTasks_closure9.doCall(BasePlugin.groovy:372)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:483)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.Java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.Java:324)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.Java:278)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.Java:1016)
    at groovy.lang.Closure.call(Closure.Java:423)
    at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.Java:40)
    at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.Java:25)
    at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.Java:83)
    at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.Java:31)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.Java:93)
    at com.Sun.proxy.$Proxy12.afterEvaluate(Unknown Source)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.Java:79)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.Java:65)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.Java:504)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.Java:83)
    at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.Java:47)
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.Java:35)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.Java:129)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.Java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.Java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.Java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.Java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.Java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.Java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.Java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.Java:51)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.Java:171)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.Java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.Java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.Java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.Java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.Java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.Java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.Java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.Java:22)
    at org.gradle.launcher.Main.doAction(Main.Java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.Java:45)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:483)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.Java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.Java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.Java:23)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:483)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.Java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.Java:127)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.Java:55)

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/lmnapp/.jenkins/jobs/Android_app_master/workspace/project/build.gradle' line: 120

* What went wrong:
A problem occurred evaluating project ':project'.
> SDK location not found. Define location with sdk.dir in the local.properties file or with an Android_HOME environment variable.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Comme vous pouvez le constater, le chemin a clairement défini Android_home.

J'essaie de construire ceci via Gradle in Jenkins.

Ce sont les commandes Shell pré-exécutées que j'ai configurées pour faire ce travail

export Android_HOME=/Users/lmnapp/Android-sdk-macosx
export Android_SDK=/Users/lmnapp/Android-sdk-macosx/platforms
export PATH=$PATH:$Android_HOME/tools:$Android_HOME/platform-tools:$Android_HOME
export AVD_NAME=jenkinsGoogleApi18_1

echo displayPath
echo ....
echo ....

echo $PATH
21
jonney

Fixe le.

  1. Allez à Jenkins> Gérer Jenkins> Configurer le système
  2. Cochez "Variables d'environnement"
  3. ajoutez un nom: Android_HOME, value -> votre répertoire sdk Android
  4. cliquez sur "ajouter"
  5. Faites défiler vers le bas, cliquez sur Enregistrer
57
jonney

Le problème est que vous exportez la variable d'environnement Android_HOME dans une étape "Exécuter Shell". Une fois que l’étape Shell est terminée, cet environnement a disparu - les variables ne seront pas reportées aux étapes de construction suivantes.

Si vous exécutiez tout, y compris Gradle, en une seule étape de construction, cela fonctionnerait, par exemple.

export Android_HOME=/foo/bar/sdk
./gradlew clean assembleProductionRelease

Mais puisque vous utilisez le plug-in Gradle en tant qu'étape de construction distincte, les variables d'environnement ne sont plus disponibles.

L'exportation globale de la variable d'environnement via la configuration de Jenkins, comme vous l'avez fait dans votre propre réponse, est un moyen de résoudre ce problème, bien que vous puissiez également utiliser le plugin EnvInject pour injecter des variables d'environnement lors d'une construction. Les variables configurées à l'aide de ce plugin seront disponibles pour toutes les étapes de la construction.


Pour une machine de construction, la meilleure pratique serait de minimiser la quantité de configuration manuelle requise, par exemple en installant les variables d'environnement SDK Android et de codage en dur dans la configuration du serveur.

Je peux recommander l'ajout du plug-in Android SDK Manager à votre version de Gradle - il installera automatiquement le SDK Android ainsi que toutes les dépendances de construction.

6
Christopher Orr

Vous pouvez utiliser EnvInject Plugin pour ajouter une variable d’environnement Android_HOME dans la configuration de construction.

  1. Installez le plug-in EnvInject si vous ne l'avez pas installé (en général après l'installation de Jenkins).

  2. Allez à Jenkins-> votre build-> Configuration.

  3. Faites défiler jusqu'à Build Environment.

  4. Trouvez "Injectez les variables d'environnement dans le processus de construction" et cochez-le.

  5. Tapez "Android_HOME =/you/Android/Sdk/location" dans le champ de saisie "Propriétés du contenu".

  6. N'oubliez pas de le sauvegarder.

0
JiajiaGu

J'ai résolu ce problème en ajoutant une permission à votre répertoire sdk Android.

chmod 777/Utilisateurs/USER_NAME/Bibliothèque/Android

0
Pritesh Patel

Je l'ai corrigé avec: 

  1. Copiez votre dossier Android\Utilisateurs {votre_utilisateur}\Bibliothèque\Android \. 
  2. Coller dans le dossier\Utilisateurs\Partagé\Jenkins\Bibliothèque
  3. Allez à Jenkins -> Gérer Jenkins -> Configurer le système
  4. Cochez "Variables d'environnement"
  5. ajouter un nom: Android_HOME, valeur ->\Utilisateurs\Partagé\Jenkins\Bibliothèque\Android\sdk 
  6. Ajouter
  7. Sauvegarder
0
MMSousa