2015-03-23 27 views
15

Khi tiêu đề cho biết việc xây dựng jenkins của tôi không thành công do không tìm thấy sdk android phân tán nó được đặt trong đường dẫn môi trường.Xây dựng Jenkins không thành công do thiếu android SDK

Đây là giao diện điều khiển bản ghi

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 

Như u có thể thấy, con đường rõ ràng đã android_home đặt đúng.

Tôi đang cố gắng xây dựng điều này thông qua gradle trong jenkins.

Đây là teh trước thực thi lệnh shell tôi đã cấu hình công việc này để làm

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 

Trả lời

48

Đã sửa lỗi.

  1. Đến Jenkins> Manage Jenkins> System Configure
  2. Kiểm tra "Biến môi trường"
  3. thêm tên: ANDROID_HOME, giá trị -> android sdk dir của bạn
  4. nhấp chuột "add"
  5. Cuộn xuống CLICK SAVE
+0

Cảm ơn bạn! Nó giúp tôi! – RockerFlower

+0

Cảm ơn bạn rất nhiều! rất đơn giản nhưng thật khó để tìm ra giải pháp này trực tuyến. –

-1

Tôi tưởng tượng rằng bạn kiểm tra trong local.properties bạn nộp để kiểm soát phiên bản có chứa đường dẫn đến tập tin SDK máy địa phương của bạn (được thực hiện tự động khi thiết lập dự án hoặc mở dự án). Thay đổi local.properties của bạn tập tin vào con đường SDK mặc định (do đó nó sẽ tự động xử lý các thay đổi dựa trên máy tính cục bộ):

sdk.dir=/Applications/android_sdk

Kiểm tra thay đổi vào điều khiển phiên bản, và sau đó đặt local.properties trong tệp .gitignore của bạn (see here for help).

+0

Tôi đã không kiểm tra trong tập tin local.properties – jonney

+0

Chỉ cần nhìn thấy câu trả lời của riêng bạn, và đó là những gì tôi sẽ đề xuất vì tôi nghĩ rằng kịch bản trước không thiết lập môi trường toàn cầu hoặc sống đủ lâu để gradle truy cập . Tôi đã thường chỉ có local.properties trong repo của tôi khi tôi xây dựng để thường xử lý đường dẫn SDK. Cũng đừng để chấp nhận câu trả lời của riêng bạn để người khác nhìn thấy nó! –

6

Vấn đề là bạn đang xuất khẩu biến môi trường ANDROID_HOME trong bước "Thực thi trình bao". Khi bước trình bao đã hoàn tất, môi trường đó biến mất - các biến sẽ không được chuyển sang các bước xây dựng tiếp theo.

Nếu bạn đang thực hiện mọi thứ, bao gồm Gradle, trong một bước xây dựng, nó sẽ hoạt động, ví dụ:

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

Nhưng vì bạn đang sử dụng plugin Gradle làm bước xây dựng riêng biệt nên các biến môi trường không còn khả dụng nữa.

Xuất biến môi trường trên toàn cầu thông qua cấu hình Jenkins như bạn đã làm trong câu trả lời của riêng mình là một cách để giải quyết vấn đề này, mặc dù bạn cũng có thể sử dụng các biến môi trường EnvInject plugin. Các biến được thiết lập bằng plugin này sẽ có sẵn cho tất cả các bước xây dựng.


Đối với máy xây dựng, cách tốt nhất là giảm thiểu lượng yêu cầu thiết lập thủ công, như cài đặt SDK Android và biến môi trường mã hóa vào cấu hình máy chủ.

Tôi có thể đề xuất thêm Android SDK Manager plugin vào bản dựng Gradle của bạn - nó sẽ tự động cài đặt SDK Android cùng với mọi phụ thuộc xây dựng cho bạn.

+0

Lần đầu tiên tôi đã thử cấu hình ANDROID_HOME nhưng nó không giải quyết được lỗi "local.properties (Le fichier spécifié est introuvable) .Tôi đã thử ý tưởng của mình bằng cách gọi xuất và xây dựng trong cùng một cuộc gọi nhưng nó không giải quyết được vấn đề. – Seynorth

Các vấn đề liên quan