2.1 安装JDK
如果未安装JDK,或者想使用Oracle的JDK。
1)从Oracle官网下载jdk包
2)解压后的文件进行安装。
安装到 /usr/lib目录下
cd /usr/lib
如果需要安装在其他的大容量磁盘,则需要在/usr/lib下创建
软链接。
$ ln -s [安装目录] /usr/lib/jdk
3)配置环境变量
#set oracle jdk environment
export JAVA_HOME=【jdk安装目录】 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量立即生效。
$ source ~/.bashrc
4) 验证Java是否可用。
$ java -version
$ javac -version
5) jenkins配置JAVA_HOME
jenkins管理后台--》系统管理-》系统设置--》环境变量,添加键值对
键:ANDROID_HOME
值:【jdk安装目录】
2.2 Jenkins系统设置
2.2.1 配置环境变量
主要是配置Jenkins使用的一些环境变量,方便编译的时候使用。
系统设置--》全局属性--》环境变量,环境变量是键值对的样式。
ANDROID_HOME: Android安装目录
JAVA_HOME:Java的安装目录
SCRIPT_HOME:脚本的根目录(如果使用脚本编译的话可以设置方便使用)
2.2.2 管理配置部分
Jenkins访问位置:
Jenkins URL: http://192.168.xx.xx:8088/
系统管理员邮箱地址:mobile@cdeledu.com
2.2.3 邮箱通知扩展部分
SMTP Server: smtp邮箱服务器
2.2.4 GitLab merge request Server部分
Gitlab Host URL:GitLab主机URL地址。
Jenkins Username:Jenkins访问GitLab的用户名
2.3 全局安全配置
勾选启动安全
安全域采用: Jenkins专有用户数据库
允许用户注册选项,根据需要设置。如果采用用户统一管理,可以禁用。
2.4 全局工具配置
配置Maven、JDK等工具。
2.5 插件管理
安装需要使用的插件。
例如:
build-name-setter:设置Build名称。
可参考《Jenkins插件大全》
https://blog.csdn.net/pansaky/article/details/80755739
常见问题分析:
打包过程发生错误。不能创建文件夹。
错误信息如下。
14:40:18.864 [DEBUG] [org.gradle.model.internal.registry.DefaultModelRegistry] Project :app - Registering model element 'tasks.transformClassesWithDexForAgent127Cdeljianshe' (hidden = false)
14:40:18.865 [DEBUG] [org.gradle.model.internal.registry.DefaultModelRegistry] Project :app - Registering model element 'tasks.packageAgent127Cdeljianshe' (hidden = false)
14:40:18.865 [QUIET] [system.out]
14:40:18.866 [QUIET] [system.out] watchTimeConsume disabled
14:40:18.866 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
14:40:18.866 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
14:40:18.866 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
14:40:18.866 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
14:40:18.866 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] A problem occurred configuring project ':app'.
14:40:18.866 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Cannot create directory /home/t1/jenkins/workspace/accmobile-git/app/build/intermediates/incremental/packageAgent127Cdeljianshe/zip-cache
14:40:18.866 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
14:40:18.866 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Exception is:
14:40:18.867 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
14:40:18.867 [ERROR] [org.gradle.internal.buildevents.
原因:创建文件失败。是因为权限不足。
root@t1-OptiPlex-3010:/home/t1/jenkins/workspace/accmobile-git/app# ll
total 80
drwxrwxrwx 7 jenkins jenkins 4096 11月 9 13:08 ./
drwxrwxrwx 13 jenkins jenkins 4096 11月 9 14:26 ../
-rwxrwxrwx 1 jenkins jenkins 25702 11月 9 11:24 app.iml*
drwxr-xr-x 7 root root 4096 11月 9 13:09 build/
-rw-r--r-- 1 jenkins jenkins 6757 11月 9 11:44 build.gradle
drwxrwxrwx 3 jenkins jenkins 4096 11月 9 10:43 E:/
-rw-r--r-- 1 jenkins jenkins 8 11月 9 11:44 .gitignore
drwxrwxrwx 2 jenkins jenkins 4096 11月 9 11:44 keystore/
drwxrwxrwx 2 jenkins jenkins 4096 11月 9 11:44 libs/
-rw-r--r-- 1 jenkins jenkins 9245 11月 9 11:44 proguard-rules.pro
drwxrwxrwx 7 jenkins jenkins 4096 11月 8 10:31 src/
发现app/build下这个文件夹的所有者是root,因此jenkins不能写入。
解决方法:将目录文件夹的所有者和用户组设置为jenkins。
$ sudo chown -R jenkins build
$ sudo chgrp -R jenkins build
root@t1-OptiPlex-3010:/home/t1/jenkins/workspace/accmobile-git/app# ll
total 80
drwxrwxrwx 7 jenkins jenkins 4096 11月 9 13:08 ./
drwxrwxrwx 13 jenkins jenkins 4096 11月 9 14:26 ../
-rwxrwxrwx 1 jenkins jenkins 25702 11月 9 11:24 app.iml*
drwxr-xr-x 7 jenkins jenkins 4096 11月 9 13:09 build/
-rw-r--r-- 1 jenkins jenkins 6757 11月 9 11:44 build.gradle
drwxrwxrwx 3 jenkins jenkins 4096 11月 9 10:43 E:/
-rw-r--r-- 1 jenkins jenkins 8 11月 9 11:44 .gitignore
drwxrwxrwx 2 jenkins jenkins 4096 11月 9 11:44 keystore/
drwxrwxrwx 2 jenkins jenkins 4096 11月 9 11:44 libs/
-rw-r--r-- 1 jenkins jenkins 9245 11月 9 11:44 proguard-rules.pro
drwxrwxrwx 7 jenkins jenkins 4096 11月 8 10:31 src/
修改完成后。app/build所有者变为jenkins了。
2. Java使用出错
16:29:35.332 [DEBUG] [org.gradle.launcher.daemon.server.exec.ExecuteBuild] The daemon has finished executing the build.
16:29:35.377 [INFO] [org.gradle.launcher.daemon.client.DaemonClient] Received result Failure[value=java.lang.IllegalStateException: Finish can only be called once.] from daemon DaemonInfo{pid=4142, address=[e6b5e0bc-c7c0-4772-a94f-f819c0d7c436 port:37677, addresses:[/0:0:0:0:0:0:0:1, /127.0.0.1]], state=Idle, lastBusy=1541748990501, context=DefaultDaemonContext[uid=9d286209-867e-4d5d-b100-69db07888e43,javaHome=/usr/lib/jvm/java-8-openjdk-amd64,daemonRegistryDir=/home/t1/jenkins/.gradle/daemon,pid=4142,idleTimeout=10800000,daemonOpts=-XX:MaxPermSize=512m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx2048m,-Dfile.encoding=UTF-8,-Duser.country=US,-Duser.language=en,-Duser.variant]} (build should be done).
16:29:35.377 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 1: dispatching class org.gradle.launcher.daemon.protocol.Finished
16:29:35.378 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 1: connection stop
16:29:35.396 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
16:29:35.397 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
16:29:35.398 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
16:29:35.398 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
16:29:35.398 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Finish can only be called once.
16:29:35.398 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
16:29:35.398 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Exception is:
配置Jenkins的全局变量JAVA_HOME