一、安裝android-sdk
在linux服務器安裝sdk
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar -zxvf android-sdk_r24.4.1-linux.tgz
安裝需要的sdk版本
cd android-sdk-linux/tools ./android list sdk -a 查看可見的sdk版本
./android update sdk -a -u -t [序號] (-a 列出所有sdk版本 -u 無ui模式 -t 指定安裝版本)下載指定版本
二、生效環境變量
vim /etc/profile #結尾加上 export ANDROID_HOME=“你的sdk路徑"
source /etc/profile
三、gradle編譯
cd /XXX/XXX #切換到項目路徑
gradle clean assemblePRODebug —no-daemon #編譯指定渠道的debug包
===============================================================
遇到的問題:
- jenkins是在docker容器里的,需要把sdk gradle fireline 也裝到容器里才能讀到;安裝到映射在實體機的目錄,以免docker重啟后丟失。
- 安裝sdk版本時注意,要和項目里build.gradle文件要求的版本一致。 例如 compileSdkVersion 24 buildToolsVersion '25.0.0'
- jenkins是在容器里,沒有/etc/profile文件,無法通過修改文件生效環境變量。若是通過export命令生效環境變量,重啟jenkins就丟失。最后,通過把設置環境變量命令放到具體jenkins項目的shell腳本里執行。(該環境變量也僅在該shell窗口內有效)
例如:export ANDROID_HOME=/var/jenkins_home/android-sdk-linux
export GRADLE_HOME=/var/jenkins_home/gradle-3.3
export PATH=$PATH:/var/jenkins_home/gradle-3.3/bin
- gradle編譯執行提示jvm內存不夠,百度又說是內存分配的問題,於是在gradle.properties里加上
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4096m
-XX:MaxPermSize=2048m
開始是成功了,幾次之后開始又失敗。加大分配內存一樣失敗,拖的jenkins容器重啟。
看了gradle官網,說持續集成環境不要使用線程保護。
嘗試把以上配置改成:
org.gradle.daemon=false
org.gradle.parallel=true
#org.gradle.jvmargs=-Xmx4608m
#-XX:MaxPermSize=2048m
android.useDeprecatedNdk=true
提示Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed) 懷疑配置文件沒生效,
把編譯命令加上—no-daemon 編譯成功。
================================================================
四、提取構建的apk
[Jenkins]—[構建后操作]—[Archive the artifacts]模塊。
指定路徑文件即可
例如:XXX/build/outputs/apk/*.apk
五、集成火線靜態掃描
把火線官網的jar包下載下來,放到jenkins可讀到的目錄
[jenkins]— [構建]—[execute shell]里加上掃描命令即可。
-s指定掃描目錄,-n指定報告名稱, -r指定存放位置
例如:java -jar XXXX/fireline.jar -s=${WORKSPACE}/XXX -n=android_test_${BUILD_NUMBER} -r=${WORKSPACE}/report
六、發布掃描報告
[Jenkins]—[構建后操作]—[Publish HTML reports]模塊。
指定報告所在路徑即可。
⚠️ 由於火線報告使用了JavaScript,這里需要設置jenkins允許腳本執行(allow-scripts)。
解決辦法如下:
【jenkins】->【系統管理】->【腳本命令行】,在文本框中輸入:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
然后點擊運行,重新執行一下build任務即可。