Jenkins搭建Android自動(dòng)打包
意義:
工作流程
- 對于工程師來說,你就只管提交代碼,不用關(guān)心怎么打包之類的。
- 對于產(chǎn)品或者測試,我只需要從發(fā)布頁面下載APK安裝文件,不必每次都跑工程師那,安裝個(gè)最新的包之類。
- 這中間是CI幫我們處理了,怎么更新代碼,怎么打包,怎么發(fā)版,他就是神器。
軟件環(huán)境:
- windows7 64bit;
- jdk1.8
- android sdk
- gradle2.10
配置環(huán)境變量
- Android開發(fā)環(huán)境:JDK,Android SDK,Gradle
-
tomcat7+,同時(shí)配置Tomcat的環(huán)境,找到path加上;%CATALINA_HOME%\lib啟動(dòng)tomcat
- 變量名:CATALINA_HOME
- 變量值:解壓后的路徑
搭建Jenkins
Jenkins簡介
Jenkins是一個(gè)開源軟件項(xiàng)目,旨在提供一個(gè)開放易用的軟件平臺(tái),使軟件的持續(xù)集成變成可能。。
Jenkins安裝與配置
- Jenkins下載地址
- 安裝:將下載的jenkins.war包直接放到tomcat下的webapps目錄下,然后啟動(dòng)tomcat即可安裝完成,接下來登錄:++http://localhost:8080/jenkins++就能進(jìn)入jenkins系統(tǒng)頁面。
用戶權(quán)限配置
- 點(diǎn)擊“系統(tǒng)管理” –> “Configure Global Security”
- 首先先添加一個(gè)administer用戶作為超級管理員,全部權(quán)限都打勾,如圖admin用戶。保存,重啟Tomcat
- 然后用剛剛添加的超級管理員作為賬號(hào)名注冊一個(gè)賬號(hào),即administer,即可擁有超級管理員權(quán)限。
- JDK、Gradle如果系統(tǒng)環(huán)境變量配置好的話就不用再配置,用默認(rèn)的就行。
郵件通知
- 點(diǎn)擊“系統(tǒng)管理”–> “系統(tǒng)設(shè)置”,滑倒郵件通知選項(xiàng)
插件安裝,添加git,gradle
- 進(jìn)入系統(tǒng)管理,管理插件
- 選擇插件,及安裝插件,完成后重啟Tomcat,再次進(jìn)入jenkins
創(chuàng)建項(xiàng)目
- 對于Jenkins,每一個(gè)任務(wù)都是job,所以我們需要把自己的job映射到j(luò)enkins上。
- 配置項(xiàng)目,選擇Git為項(xiàng)目管理工具,并配置相關(guān)信息;
- Poll SCM 為定時(shí)任務(wù),可定時(shí)打包
- Build選項(xiàng),選擇Gradle方式,設(shè)置Gradle命令,一般為clean build
- 可設(shè)置Build后,生成apk的位置;有錯(cuò)誤等信息時(shí),發(fā)郵件通知
Build項(xiàng)目
- 構(gòu)建項(xiàng)目
- 查看構(gòu)建輸出信息
- 構(gòu)建成功后,有apk生成
構(gòu)建中可能遇到的問題:
一、編碼問題:當(dāng)你進(jìn)入jenkins系統(tǒng)管理頁面,會(huì)出現(xiàn)如圖提示,可修改tomcat的server.xml配置,在Connector 標(biāo)簽添加上URIEncoding=”UTF-8”。
二、發(fā)送郵件失敗:
Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465;
解決:http://www.lxweimin.com/p/5ba3bde60f21
com.sun.mail.smtp.SMTPSendFailedException: 501 mail from address must be same as authorization user;
解決:在設(shè)置Jenkins URL底下有一個(gè)文本框System Admin e-mail address,這里要設(shè)置發(fā)送者的郵箱地址
三、在Jenkins中利用Gradle編譯項(xiàng)目時(shí),可能會(huì)出現(xiàn)以下錯(cuò)誤
java.lang.ClassNotFoundException: org.apache.juli.ClassLoaderLogManager
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
原因:Jenkins的Gradle Plugin拷貝所有Tomcat的環(huán)境變量到Gradle的JVM中,因此Gradle在使用JAVA_OPTS作為合法參數(shù)時(shí)可能機(jī)會(huì)有下面這些問題
解決:打開Tomcat bin目錄下catalina.bat,注銷下面代碼:
rem set"JAVA_OPTS=%JAVA_OPTS%%LOGGING_MANAGER%"
rem set"JAVA_OPTS=%JAVA_OPTS%%LOGGING_CONFIG%"
四、環(huán)境變量配置問題
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.
原因:沒有找到ANDROID_HOME的環(huán)境變量
解決辦法:
- Go to Jenkins > Manage Jenkins > Configure System
- Check “Environment variables”
- add name: ANDROID_HOME, value -> your android sdk dir
- click “add”
- SCROLL DOWN CLICK SAVE