2015-03-23 12 views
15

Come dice il titolo, il mio jenkins build fallisce a causa del mancato rilevamento di Android sdk che si trova nel percorso degli ambienti.Creazione di Jenkins fallita a causa della mancanza dell'SDK Android

Ecco il log della 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 

Come u può vedere, il percorso ha chiaramente android_home impostato correttamente.

Sto cercando di costruire questo via gradle in jenkins.

Questo è teh comandi di shell pre eseguiti ho configurato questo lavoro da fare

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 

risposta

48

risolto.

  1. Vai a Jenkins> Gestisci Jenkins> Configurazione di sistema
  2. controllo "Variabili d'ambiente"
  3. aggiungere il nome: ANDROID_HOME, valore -> il vostro android sdk dir
  4. click "add"
  5. SCROLL DOWN CLICCA SALVA
+0

Grazie! Mi aiuta! – RockerFlower

+0

Grazie mille! così semplice ma è stato così difficile trovare questa soluzione online. –

-1

Immagino che hai selezionato nelle vostre local.properties file per il controllo di versione che conteneva il percorso del file SDK macchine locali (che viene fatto automaticamente quando si imposta un progetto o si apre un progetto). Cambiare il vostro file local.properties al percorso predefinito SDK (in modo che gestirà automaticamente la modifica in base alla macchina locale):

sdk.dir=/Applications/android_sdk

Verificare che si trasformano in controllo di versione, e poi mettere in local.properties il tuo file .gitignore (see here for help).

+0

Non ho controllato il file local.properties – jonney

+0

Ho appena visto la tua risposta, e questo è quello che stavo per suggerire dal momento che pensavo che la pre-sceneggiatura non impostasse globalmente l'ambiente o vivesse abbastanza a lungo da permettergli di accedere a gradle . Di solito ho appena avuto local.properties nel mio repository quando ho compilato in modo che solitamente gestisca il percorso dell'SDK. Inoltre, non accettare la tua risposta in modo che gli altri la vedano! –

6

Il problema è che si sta esportando la variabile di ambiente ANDROID_HOME in un passaggio "Esegui shell". Una volta completata la fase di shell, quell'ambiente è scomparso - le variabili non saranno trasferite ai successivi passi di costruzione.

Se stavi eseguendo tutto, compreso Gradle, in una singola fase di costruzione, avrebbe funzionato, ad es.

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

Ma dal momento che si sta utilizzando il plug-in Gradle come fase di compilazione separata, le variabili di ambiente non sono più disponibili.

Esportare la variabile di ambiente globalmente tramite la configurazione di Jenkins come è stato fatto nella propria risposta è un modo per risolvere questo problema, sebbene sia possibile utilizzare anche EnvInject plugin per iniettare variabili di ambiente durante una compilazione. Le variabili impostate utilizzando questo plug-in saranno disponibili per tutti i passaggi di costruzione.


Per una macchina di costruzione, la migliore pratica sarebbe quella di ridurre al minimo la quantità di impostazione manuale richiesto, come l'installazione SDK Android e hardcoding variabili d'ambiente nella configurazione del server.

Posso raccomandare di aggiungere Android SDK Manager plugin alla build di Gradle: installerà automaticamente l'SDK di Android più eventuali dipendenze di compilazione per l'utente.

+0

Prima ho provato a configurare ANDROID_HOME ma non ho risolto l'errore "local.properties (Le fichier spécifié est introuvable). Ho quindi provato la tua idea chiamando export e compilando la stessa chiamata ma non ha risolto il problema. – Seynorth

Problemi correlati