Android-使用Jenkins自動化打包詳解-windows篇

基本:從0開始構建一個安卓項目

1、下載和安裝jenkins
1、安裝tomcat
2、下載jenkins
在這裏插入圖片描述
下載後是一個 .war 文件,放到 apache 目錄下的 webapps 文件夾下
在這裏插入圖片描述
瀏覽器內輸入 http://127.0.0.1:8080/jenkins
在這裏插入圖片描述
在這裏插入圖片描述
先跳過插件安裝
在這裏插入圖片描述
接下來設置賬號等,配置完成後就可以看到 jenkins 管理界面了
在這裏插入圖片描述
2、插件安裝
在這裏插入圖片描述
在這裏插入圖片描述
勾選以下這些插件
Git
Gradle
Email Extension
description setter
Build Name and Description Setter
user build vars
PostBuildScript
Branch API
SSH
Scriptler
Git Parameter
OWASP Markup Formatter:能讓 description 中顯示 html,例如展示二維碼和下載鏈接

點擊 Down now and install after restart,等下載完重啓 jenkins 就安裝好了
在這裏插入圖片描述
在 Installed 選項卡下可以看到已經安裝過的插件,比你自己安裝的多,因爲很多依賴的插件是自動下載的
在這裏插入圖片描述
3、配置
1、Manage Jenkins -> Global Tools Configuration

設置 JDK
在這裏插入圖片描述
設置 Git
在這裏插入圖片描述
設置 Gradle ,可以設置成固定版本,這裏我不設置了,後邊加入項目的時候用項目裏的版本
在這裏插入圖片描述
2、Manage Jenkins -> Configure System
勾選 Environment variables,添加 ANDROID_HOME變量,這個值是sdk路徑,可以去系統變量看下填的什麼
在這裏插入圖片描述
4、項目配置
1、點擊左側 New Item 來新建一個項目

輸入項目名稱,選擇 Freestyle project

2、Source Code Management

選擇 Git,填入項目地址
在這裏插入圖片描述
Credentials add 一個用戶,填入 git 賬號信息
在這裏插入圖片描述
3、Build

Build 中選中 Invoke Gradle Script,Task 填寫 clean assembleRelease --stacktrace --debug(清理build文件夾,編譯並打Release的包,打印堆棧日誌,調試模式)
在這裏插入圖片描述
5、項目構建
點擊保存就進入到項目主頁了,點擊 Build Now 開始構建,Build History 會出現構建任務列表,點擊進入可以查看構建詳情頁
在這裏插入圖片描述
如果前邊的圓圈變成紅色說明構建失敗,點擊進入構建詳情頁,然後點擊左側 Console Output 查看日誌輸出
在這裏插入圖片描述
在這裏插入圖片描述
因爲信息比較多,可以直接搜索 What went wrong,找到報錯原因

如果圓圈變爲藍色說明構建成功,可以在 Workspace -> app/build/outpus 找到apk
在這裏插入圖片描述
在這裏插入圖片描述

進階:定製想要的功能

自定義屬性配置

以上就完成了簡單的部署和構建。但還不是我們的最終目的。我們想通過配置一下參數,來滿足一些需求,比如根據渠道打不同版本的包、根據Tag打不同的包等,下面就來說一下Jenkins參數化構建
在項目的 gradle.properties 中,我們有 VERSION_CODEVERSION_NAME

COMPILE_SDK_VERSION=29
BUILD_TOOLS_VERSION=29.0.2
APPLICATION_ID=com.szy.supermarket
MIN_SDK_VERSION=19
TARGET_SDK_VERSION=29
VERSION_CODE=1
VERSION_NAME=1.0.0
MAVEN_URL=https://dl.bintray.com/yishopcustomer/maven/
android.useAndroidX=true
android.enableJetifier=true

在 build.gradle 中會用到

apply plugin: 'com.android.application'

......
android {
  	......
    defaultConfig {
        multiDexEnabled true
        applicationId APPLICATION_ID
        minSdkVersion MIN_SDK_VERSION
        targetSdkVersion TARGET_SDK_VERSION
        versionCode VERSION_CODE as int
        versionName VERSION_NAME
        ndk {
            abiFilters 'armeabi'
        }
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    ......
        productFlavors {
        szy {
            applicationId 'com.xx.xx'
            manifestPlaceholders = [
                    app_name     : "雲小店正式",
                    ......
            ]
        }

        szytest {
            applicationId 'com.xx.xx'
            manifestPlaceholders = [
                    app_name     : "雲小店測試",
                    ......
            ]
        }
    }
}
......

項目設置主頁 -> General -> 勾選 This project is parameterized
在這裏插入圖片描述
下面開始添加參數

參數名 參數類型 參數值列表
GIT_TAG Git Parameter dev、master等
BUILD_TYPE Choice Release or Debug
PRODUCT_FLAVORS Choice Xiaomi、Huawei等
VERSION_NAME String 1.0.0

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
我們要在下方構建時候引用,首先找到Build標籤處,將Tasks屬性值修改爲:clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}

在這裏插入圖片描述
同時點擊右下角的 Advanced…,勾選以下選項
在這裏插入圖片描述
這個選項是 VERSION_NAME 和 VERSION_CODE 需要用到的,因爲這兩個參數需要注入到Android項目中的配置,而紅色框中的這個選項可以幫我們侵入到 gradle.properties 文件中替換值,並且 build.gradle 文件能夠直接引用 gradle.properties 文件中的屬性,所以起到了侵入的效果,這樣在 Jenkins 打包的時候上面兩個參數就會隨着選擇變化而變化了

Source Code Management處修改打包版本如圖:
在這裏插入圖片描述
設置好參數後,Build Now 選項變成了 Build with Parameters,再打包頁面就變成了這樣
在這裏插入圖片描述

構建命名

原命名只是構建編號,沒有識別度
在這裏插入圖片描述
改爲構建編號_構建者姓名_構建渠道版本_構建的類型_app版本號,找到 Build Environment,勾選 Set Build Name,Build Name 填入#${BUILD_NUMBER}_${BUILD_USER}_${PRODUCT_FLAVORS}_${BUILD_TYPE}_${VERSION_NAME}
在這裏插入圖片描述
再次構建成功後,名稱變爲了
在這裏插入圖片描述

Tomcat配置下載地址

Tomcat安裝目錄下 -> conf -> server.xml 在 Host 節點最後添加代碼:

<Context reloadable="true" docBase="D:\apache-tomcat-9.0.36\webapps\app" crossContext="true" path=""/>

docBase 爲絕對路徑即保存 apk 文件的文件夾,默認我們打包完在 \app\build\outputs\apk\szytest\debug這種目錄下,我們可以自己修改,方法查看 本文的 其他設置 - 修改apk輸出路徑
path爲相對地址即在地址欄訪問的地址

添加完這句話以後重啓Tomcat,打開瀏覽器輸入ip:port/apk名稱,就可以下載了,例如我在瀏覽器輸入 127.0.0.1:8080/app-szytest-Debug_5.apk 就可以直接下載 apk 了

生成二維碼

首先要安裝 python,步驟可以查看我的另一篇文章:【Python】安裝和第一個程序
然後在系統命令行(cmd)執行 兩條命令即可安裝 qrcode
pip install Pillow
pip install myqr

使用命令行生成二維碼 myqr 要生成二維碼的內容 -n 指定二維碼名稱 -d 指定二維碼存放位置

因此我們在 Build 中的 windows 批處理命令(上一步添加的)最後增加以下代碼
myqr http://192.168.3.215:8080/%apkName%_%BUILD_ID%.apk -n %BUILD_ID%.jpg -d %outputs%/qrcode

ip 替換成你本機的 ip
在這裏插入圖片描述
這樣會在 D:\apache-tomcat-9.0.36\webapps\app\qrcode 下生成以 BUIID_ID.jpg 命名的二維碼圖片
在這裏插入圖片描述
接下來要展示二維碼圖片,找到 Post-build Actions,增加 Set build description
在 Description 中增加代碼如下,也就是增加一個二維碼展示和一個點擊下載的鏈接

<img src='http://192.168.3.215:8080/qrcode/${BUILD_ID}.jpg' style='width:200px;height:200px'>
<br/>
<a href='http://192.168.3.215:8080/app-${PRODUCT_FLAVORS}-${BUILD_TYPE}_${BUILD_ID}.apk'>點擊下載</a>

想要在 Build history 中展示 html ,還需要將 Manage Jenkins -> Configure Global Security 中的 Markup Formatter 改爲 Safe Html(依賴於OWASP Markup Formatter插件,否則沒有 Safe HTML 這個選項)
在這裏插入圖片描述
這樣打包完以後就展示了二維碼和下載鏈接
在這裏插入圖片描述

發送郵件通知

這裏以QQ郵箱爲例

首先 Manage Jenkins -> Configure System -> Jenkins Location
System Admin e-mail address 填入qq郵箱
在這裏插入圖片描述
然後Manage Jenkins -> Configure System -> E-mail Notification中填入信息進行測試
在這裏插入圖片描述
有幾點需要注意:
郵件服務器地址可以通過郵箱內的幫助中心找到,搜索 “smtp” 關鍵字查找即可。例如qq郵箱
郵箱密碼需要在 設置 -> 賬戶 中開啓 POP3/SMTP 服務,得到授權碼,把這個授權碼填到郵箱密碼這裏纔可以
在這裏插入圖片描述
填寫成功後,發送測試郵件,成功後填寫上邊的 Extended E-mail Notification 模塊,內容和剛纔的相同就可以,不同的有以下
默認郵件類型:
在這裏插入圖片描述
默認收件人,多個的話用英文逗號隔開:
在這裏插入圖片描述
郵件標題和內容:
在這裏插入圖片描述
其中 Default Content 爲郵件內容:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${PROJECT_NAME}-第${BUILD_NUMBER}次構建日誌</title>
</head>
 
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
    offset="0">
    <table width="95%" cellpadding="0" cellspacing="0"
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
        <tr>
            <td>(本郵件是程序自動下發的,請勿回覆!)</td>
        </tr>
        <tr>
            <td><br />
            <b><font color="#0B610B">構建信息($BUILD_STATUS)</font></b>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>項目名稱 : ${PROJECT_NAME}</li>
                    <li>構建編號 : 第${BUILD_NUMBER}次構建</li>
                    <li>觸發原因 : ${CAUSE}</li>
                    <li>構建日誌 : <a href="${BUILD_URL}console">點擊查看</a></li>
                    <li>工作目錄 : <a href="${PROJECT_URL}ws">點擊查看</a></li>
                    <li>Allure Report : <a href="${BUILD_URL}allure">點擊查看</a></li>
                </ul>
            </td>
        </tr>
        <tr>
            <td><b><font color="#0B610B">構建日誌(最後100行):</font></b>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td><textarea cols="80" rows="30" readonly="readonly"
                    style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
            </td>
        </tr>
    </table>
</body>
</html>

點擊右下角的 Default Triggers設置郵件發送時機
在這裏插入圖片描述
然後還需要在項目構建後的操作,也就是 Post-build Actions 中增加一個 Editable Email Notification

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
發送郵件如圖:
在這裏插入圖片描述

加固

這裏使用 360加固 做演示。根據360加固助手使用手冊 中的 命令行加固模式 一章中的方法進行加固。首先我們先在本機測試下

打開 cmd ,使用java -jar jiagu.jar -login <user name> <password>登錄
在這裏插入圖片描述
使用 java -jar jiagu.jar -importsign <keystore_path> <keystore_password> <alias> <alias_password>導入簽名 keystore 信息
在這裏插入圖片描述
加固操作會使原 APK 包的簽名失效,所以加固後的 APK包需要重 新使用原應用的 keystore 簽名文件重新簽名,APK 文件纔可以正常安裝使用
在這裏插入圖片描述
最後 提示 簽名成功
在這裏插入圖片描述
在這裏插入圖片描述
接下來我們放到 jenkins 中,首先在 General 中增加一個 Boolean Parameter 表示是否加固
在這裏插入圖片描述
在 Build 選項卡中,批處理命令中修改

set outputs=D:\apache-tomcat-9.0.36\webapps\app
set apkName=app-%PRODUCT_FLAVORS%-%BUILD_TYPE%
set storeFile=D:\YishopSellerKey.jks
set storePassword=szyapp1234
set keyAlias=yishopseller

del /q /s %outputs%\jiagu\*.*

if %IS_JIAGU%==true goto A else goto B

:A
java -jar "D:\jiagu\jiagu.jar" -login yulili@68ecshop.com yll@123456
java -jar "D:\jiagu\jiagu.jar" -importsign %storeFile% %storePassword% %keyAlias% %storePassword%
java -jar "D:\jiagu\jiagu.jar" -jiagu %WORKSPACE%\app\build\outputs\apk\%PRODUCT_FLAVORS%\%BUILD_TYPE%\%apkName%.apk %outputs%\jiagu -autosign

for /r  %outputs%\jiagu\ %%i in (*.apk) do copy %%i %outputs%\%apkName%_%BUILD_ID%.apk

if "%errorlevel%"=="0" goto C
if "%errorlevel%"=="1" goto A

:B
copy %WORKSPACE%\app\build\outputs\apk\%PRODUCT_FLAVORS%\%BUILD_TYPE%\%apkName%.apk %outputs%\%apkName%_%BUILD_ID%.apk
goto C

:C
myqr http://192.168.3.215:8080/%apkName%_%BUILD_ID%.apk -n %BUILD_ID%.jpg -d %outputs%\qrcode
exit

增加了加固的操作,如果勾選了加固,goto A(進行加固操作,加固後保存到 jiagu 文件夾;然後把加固好的apk複製到app文件夾;如果沒有錯誤,goto C;如果有錯誤,重新 goto A)
如果沒有加固 goto B(直接將 build 下的 apk 複製到 app 文件夾)

c的操作就是生成二維碼的操作

再次打包,勾選加固
在這裏插入圖片描述
這樣打包成功後,每次加固時,jiagu 文件夾的文件先被清空,然後生成一個 名稱爲 *_jiagu_sign.apk 的文件
在這裏插入圖片描述
然後這個文件會被拷貝到 app 文件夾下
在這裏插入圖片描述
這樣

一些問題處理

插件管理頁面提示:Update information obtained

在這裏插入圖片描述
解決辦法:
當前頁面選中 Advanced,最下面的 update site 由 https 改爲 http
在這裏插入圖片描述
在這裏插入圖片描述
然後重新打開jenkins即可
在這裏插入圖片描述

Your project path contains non-ASCII characters

在這裏插入圖片描述
what went wrong 上面,可以看到 build.gradle 路徑包含中文字符。因爲我們創建項目時項目名稱叫 “雲小店”,所以這裏默認創建了“雲小店”的目錄

所以只要修改這個項目的workspace即可,修改方法看 文章後邊的 其他設置 - 項目workspace修改

其他設置

admin初始密碼修改

初始密碼在 C:\Users\00lix\.jenkins\secrets\initialAdminPassword
密碼太長,想改一個簡單的密碼,例如 123456,我們在 Eclipse 中

public class Main {
	public static void main(String[] args) {
		// 這是加密方式
		String hashed = BCrypt.hashpw("123456", BCrypt.gensalt());
		System.out.println(hashed);

		// 這是解密方式
		if (BCrypt.checkpw("123456", hashed))
			System.out.println("It matches");
		else
			System.out.println("It does not match");
	}
}

需要導入jar包,jar包下載
在這裏插入圖片描述
然後導入
在這裏插入圖片描述
在這裏插入圖片描述
運行程序
在這裏插入圖片描述
打開 C:\Users\00lix\.jenkins\users\admin_xxx\config.xml,找到 <passwordHash>節點,用剛纔的字符串替換 #jbcrypt:後邊的內容
在這裏插入圖片描述
重啓 jenkins(關閉 apache 再打開)即可

刪除多餘憑據

Source Code Management 中 Credentials 有重複的,現在刪除
在這裏插入圖片描述
點擊左側 憑據,找到重複刪除即可

項目workspace修改

workspace 就是工作目錄,一般就是 Down 下來的源代碼目錄,默認的在 C:\Users\00lix\.jenkins\workspace,修改某個項目的 workspace 可以這樣操作

進入項目主頁 Configure -> General -> Advanced…
在這裏插入圖片描述
勾選 Use custom workspace,填入自定義的工作空間
在這裏插入圖片描述

jenkins內置參數怎麼查看

在項目設置中,找到 Build 標籤,點擊 Advanced…,點擊下面鏈接即可
在這裏插入圖片描述
打開的鏈接是 /jenkins/env-vars.html/可以看到 jenkins 內置參數
在這裏插入圖片描述

修改apk輸出路徑

Build 標籤下 Add build step,新增一個 Execute Windows batch command(執行 windows批處理命令)
在這裏插入圖片描述
獲取原來路徑D:\workspace\SuperMarket\app\build\outputs\apk\szytest\debug,拷貝到指定目錄D:\apache-tomcat-9.0.36\webapps\app

set outputs=D:\apache-tomcat-9.0.36\webapps\app
set apkName=app-%PRODUCT_FLAVORS%-%BUILD_TYPE%

copy %WORKSPACE%\app\build\outputs\apk\%PRODUCT_FLAVORS%\%BUILD_TYPE%\%apkName%.apk %outputs%\%apkName%_%BUILD_ID%.apk

這樣打包完之後 apk 就被拷貝到自定義的路徑了
在這裏插入圖片描述

參考
Android Jenkins+Git+Gradle持續集成-實在太詳細

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章