Jenkins + Android 自動化打包APK: 建置 & 採坑實錄

最近剛好公司需要,第一次用Jenkins來包版。過程只能說是不停的採坑然後最大的那個爬了整整三天,才從坑裡爬出QQ
完成之後第一件事情,只想把這些記錄下來,以免自己忘記(❛◡❛✿)

🎈配置Jenkins環境

Jenkins > Manage Jenkins > Configure System > Global properties
> Environment variables > Add

  1. JAVA_HOME :
    D:\Program Files (x86)\Java\jdk1.8.0_161
  2. ANDROID_HOME :
    D:\Jenkins\workspace\Sdk (用你目前使用的Sdk路徑)
  3. NDK_HOME :
    D:\Jenkins\workspace\Sdk\ndk-bundle
  4. GRADLE_OPTS : (◆ 因我們公司Jenkins連外網需要設定,才設定這個的 否則會出現”ERROR: failed: Connection refused: connect”)
    -Dhttp.proxyHost=XX.XXX.XXX.XXX -Dhttp.proxyPort=3128
    -Dhttps.proxyHost=XX.XXX.XXX.XXX -Dhttps.proxyPort=3128

Jenkins > Manage Jenkins > Configure System > Android
1.
Android SDK root
${ANDROID_HOME}

Jenkins > Manage Jenkins > Global Tool Configuration
1. JDK
⮩→點擊Add JDK
⮩→填入Name
⮩→勾選Install automatically
⮩→登入JDK Account (◆ 現在都要登入才能使用喔,若沒有登入會出現”ERROR: Unable to install JDK unless a valid username/password is provided.”)
⮩→選擇JDK Version (◆ 這邊用8u202,若是使用自己的JDK也一定要注意電腦是x86和x64的喔)

2. Gradle
⮩→點擊Add Gradle
⮩→填入Name (可用Gradle Version來命名)
⮩→勾選Install automatically
⮩→選擇Gradle Version

🎈建置專案 ( Hello Jenkins🤣

⮩ 點擊 New Item
⮩ 填入Project Name
⮩ 選擇Freestyle project
⮩ 點擊OK!

這樣就建置完成囉!
可以在點擊Jenkins左上角的Dashboard後看到自己新的專案!

◆ Workspace 存放從Git拉下來的Code
◆ Build Now 點擊後就會開始執行專案
◆ Configure 是針對這個專案的設置內容

🎈配置Project Configure

進入你的Project > Configure

  1. Source Code Management
    →Git
    →輸入你的Git URL
    →設置Credentitals金鑰 (因有前人完成了,無法詳細介紹這個步驟)
    →Branches to build : */branch_name
    →Repository browser : (Auto)

2. Build
→勾選Use Gradle Wrapper
→Wrapper location : 就是你的Gradle wapper放的位置
→Tasks :
clean
assemble{你的環境} (ex.assembleDebug)
- -stacktrace
- -info

3. Post-build Actions
→Archive the artifacts
→輸入 **/*.apk

🎈Android project Gradle

⮩gradle.properties

android.enableJetifier=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx1024M -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.daemon=true
org.gradle.parallel=true

⮩build.gradle(project)

buildscript {
repositories {
google()
maven {
url "https://maven.google.com"
}
jcenter()
}
dependencies {
classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.android.tools.build:gradle:3.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.1'
}
}
allprojects {
repositories {
google()
maven {
url 'https://maven.google.com/'
}
jcenter()
}
}

⮩build.gradle(app)

compileSdkVersion 28
buildToolsVersion '28.0.3'
minSdkVersion 21
targetSdkVersion 28

🎈Build Now !!

點擊專案Build Now開始建置吧!
APK 路徑會再 Jenkins\Workspace\你的專案\app\build\outputs裡面

如果你建置fail可以下滑看看484我遇過的坑

坑的總整理😐

💗
問題 : Unable to install JDK unless a valid username/password is provided
我是因為一開始設置JDK的時候沒有登入,之後再回到JDK設置的頁面看,登入的入口已經消失,最後在Error Log上找到入口

解法:點擊Your Oracle account doesn’t appear valid. Please specify a valid username/password重新登入

💗
問題 : Could not resolve all artifacts for configuration ‘classpath’
原因1 : 你再Jenkins上設置的Gradle Version與你實際再Android使用的Version不同
解法: 在Android Studio上檢查你使用的Gradle Version

原因2 : Connect refused
這個是因為我們公司有使用內網,對下載的內容有阻擋。
因此這類的下載要設置Proxy來下載

解法: 在 Global properties > GRADLE_OPTS 設置 Proxy
詳細參考: https://github.com/flutter/flutter/issues/23553
詳細參考: https://jlorenzen.blogspot.com/2013/06/setting-gradle-home-directory-and-proxy.html?m=1
詳細參考: https://stackoverflow.com/questions/41507037/how-to-set-proxy-server-for-gradle/41507323

💗
問題 : Failed to install the following Android SDK packages as some licenses have not been accepted

解法1:
下指令
cd 你的SDK路徑\tools\bin
./sdkmanager - -licenses
詳細參考 : https://stackoverflow.com/questions/38096225/automatically-accept-all-sdk-licences

解法2: 複製你有建好的license 貼到Jenkins\Sdk\Licenses資料夾內
詳細參考: https://medium.com/@chintanrathod/accept-the-license-agreements-remotely-in-jenkins-android-1d7cf731c9d4

💗
問題 : Invalid maximum heap size: -Xmx4096m

解法: gradle.properties org.gradle.jvmargs=-Xmx4096M 改為 org.gradle.jvmargs=-Xmx1024M

允許一般的最大堆內存為1GB,主要限制於建置Jenkins機器

🍕🍕🍕

終於完成了!
如果有任何問題請不吝嗇的跟我分享~
一起加油吧!!

--

--

Mina 's code note 老闆娘的程式筆記.
Parenting 數位研發

Android Developer | Florish Accessories品牌合夥人| Workout | Alcohol | Life ✨✨✨