Android-使用Jenkins自动化打包详解-windows篇

文章目录

  • 基本:从0开始构建一个安卓项目
  • 进阶:定制想要的功能
    • 自定义属性配置
    • 构建命名
    • Tomcat配置下载地址
    • 生成二维码
    • 发送邮件通知
    • 加固
  • 一些问题处理
    • 插件管理页面提示:Update information obtained
    • Your project path contains non-ASCII characters
  • 其他设置
    • admin初始密码修改
    • 删除多余凭据
    • 项目workspace修改
    • jenkins内置参数怎么查看
    • 修改apk输出路径

基本:从0开始构建一个安卓项目

1、下载和安装jenkins
1、安装tomcat
2、下载jenkins
Android-使用Jenkins自动化打包详解-windows篇_第1张图片
下载后是一个 .war 文件,放到 apache 目录下的 webapps 文件夹下
Android-使用Jenkins自动化打包详解-windows篇_第2张图片
浏览器内输入 http://127.0.0.1:8080/jenkins
Android-使用Jenkins自动化打包详解-windows篇_第3张图片
Android-使用Jenkins自动化打包详解-windows篇_第4张图片
先跳过插件安装
Android-使用Jenkins自动化打包详解-windows篇_第5张图片
接下来设置账号等,配置完成后就可以看到 jenkins 管理界面了
Android-使用Jenkins自动化打包详解-windows篇_第6张图片
2、插件安装
Android-使用Jenkins自动化打包详解-windows篇_第7张图片
Android-使用Jenkins自动化打包详解-windows篇_第8张图片
勾选以下这些插件
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 选项卡下可以看到已经安装过的插件,比你自己安装的多,因为很多依赖的插件是自动下载的
Android-使用Jenkins自动化打包详解-windows篇_第9张图片
3、配置
1、Manage Jenkins -> Global Tools Configuration

设置 JDK
Android-使用Jenkins自动化打包详解-windows篇_第10张图片
设置 Git
Android-使用Jenkins自动化打包详解-windows篇_第11张图片
设置 Gradle ,可以设置成固定版本,这里我不设置了,后边加入项目的时候用项目里的版本
在这里插入图片描述
2、Manage Jenkins -> Configure System
勾选 Environment variables,添加 ANDROID_HOME变量,这个值是sdk路径,可以去系统变量看下填的什么
Android-使用Jenkins自动化打包详解-windows篇_第12张图片
4、项目配置
1、点击左侧 New Item 来新建一个项目

输入项目名称,选择 Freestyle project
Android-使用Jenkins自动化打包详解-windows篇_第13张图片
2、Source Code Management

选择 Git,填入项目地址
Android-使用Jenkins自动化打包详解-windows篇_第14张图片
Credentials add 一个用户,填入 git 账号信息
Android-使用Jenkins自动化打包详解-windows篇_第15张图片
3、Build

Build 中选中 Invoke Gradle Script,Task 填写 clean assembleRelease --stacktrace --debug(清理build文件夹,编译并打Release的包,打印堆栈日志,调试模式)
Android-使用Jenkins自动化打包详解-windows篇_第16张图片
5、项目构建
点击保存就进入到项目主页了,点击 Build Now 开始构建,Build History 会出现构建任务列表,点击进入可以查看构建详情页
Android-使用Jenkins自动化打包详解-windows篇_第17张图片
如果前边的圆圈变成红色说明构建失败,点击进入构建详情页,然后点击左侧 Console Output 查看日志输出
Android-使用Jenkins自动化打包详解-windows篇_第18张图片
Android-使用Jenkins自动化打包详解-windows篇_第19张图片
因为信息比较多,可以直接搜索 What went wrong,找到报错原因

如果圆圈变为蓝色说明构建成功,可以在 Workspace -> app/build/outpus 找到apk
在这里插入图片描述
Android-使用Jenkins自动化打包详解-windows篇_第20张图片

进阶:定制想要的功能

自定义属性配置

以上就完成了简单的部署和构建。但还不是我们的最终目的。我们想通过配置一下参数,来满足一些需求,比如根据渠道打不同版本的包、根据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
Android-使用Jenkins自动化打包详解-windows篇_第21张图片
下面开始添加参数

参数名 参数类型 参数值列表
GIT_TAG Git Parameter dev、master等
BUILD_TYPE Choice Release or Debug
PRODUCT_FLAVORS Choice Xiaomi、Huawei等
VERSION_NAME String 1.0.0

Android-使用Jenkins自动化打包详解-windows篇_第22张图片
Android-使用Jenkins自动化打包详解-windows篇_第23张图片
Android-使用Jenkins自动化打包详解-windows篇_第24张图片
Android-使用Jenkins自动化打包详解-windows篇_第25张图片
我们要在下方构建时候引用,首先找到Build标签处,将Tasks属性值修改为:clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}

Android-使用Jenkins自动化打包详解-windows篇_第26张图片
同时点击右下角的 Advanced…,勾选以下选项
在这里插入图片描述
这个选项是 VERSION_NAME 和 VERSION_CODE 需要用到的,因为这两个参数需要注入到Android项目中的配置,而红色框中的这个选项可以帮我们侵入到 gradle.properties 文件中替换值,并且 build.gradle 文件能够直接引用 gradle.properties 文件中的属性,所以起到了侵入的效果,这样在 Jenkins 打包的时候上面两个参数就会随着选择变化而变化了

Source Code Management处修改打包版本如图:
Android-使用Jenkins自动化打包详解-windows篇_第27张图片
设置好参数后,Build Now 选项变成了 Build with Parameters,再打包页面就变成了这样
Android-使用Jenkins自动化打包详解-windows篇_第28张图片

构建命名

原命名只是构建编号,没有识别度
Android-使用Jenkins自动化打包详解-windows篇_第29张图片
改为构建编号_构建者姓名_构建渠道版本_构建的类型_app版本号,找到 Build Environment,勾选 Set Build Name,Build Name 填入#${BUILD_NUMBER}_${BUILD_USER}_${PRODUCT_FLAVORS}_${BUILD_TYPE}_${VERSION_NAME}
Android-使用Jenkins自动化打包详解-windows篇_第30张图片
再次构建成功后,名称变为了
在这里插入图片描述

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
Android-使用Jenkins自动化打包详解-windows篇_第31张图片
这样会在 D:\apache-tomcat-9.0.36\webapps\app\qrcode 下生成以 BUIID_ID.jpg 命名的二维码图片
Android-使用Jenkins自动化打包详解-windows篇_第32张图片
接下来要展示二维码图片,找到 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 这个选项)
在这里插入图片描述
这样打包完以后就展示了二维码和下载链接
Android-使用Jenkins自动化打包详解-windows篇_第33张图片

发送邮件通知

这里以QQ邮箱为例

首先 Manage Jenkins -> Configure System -> Jenkins Location
System Admin e-mail address 填入qq邮箱
在这里插入图片描述
然后Manage Jenkins -> Configure System -> E-mail Notification中填入信息进行测试
Android-使用Jenkins自动化打包详解-windows篇_第34张图片
有几点需要注意:
邮件服务器地址可以通过邮箱内的帮助中心找到,搜索 “smtp” 关键字查找即可。例如qq邮箱
邮箱密码需要在 设置 -> 账户 中开启 POP3/SMTP 服务,得到授权码,把这个授权码填到邮箱密码这里才可以
Android-使用Jenkins自动化打包详解-windows篇_第35张图片
填写成功后,发送测试邮件,成功后填写上边的 Extended E-mail Notification 模块,内容和刚才的相同就可以,不同的有以下
默认邮件类型:
在这里插入图片描述
默认收件人,多个的话用英文逗号隔开:
在这里插入图片描述
邮件标题和内容:
Android-使用Jenkins自动化打包详解-windows篇_第36张图片
其中 Default Content 为邮件内容:


<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设置邮件发送时机
Android-使用Jenkins自动化打包详解-windows篇_第37张图片
然后还需要在项目构建后的操作,也就是 Post-build Actions 中增加一个 Editable Email Notification

Android-使用Jenkins自动化打包详解-windows篇_第38张图片
Android-使用Jenkins自动化打包详解-windows篇_第39张图片
Android-使用Jenkins自动化打包详解-windows篇_第40张图片
发送邮件如图:
Android-使用Jenkins自动化打包详解-windows篇_第41张图片

加固

这里使用 360加固 做演示。根据360加固助手使用手册 中的 命令行加固模式 一章中的方法进行加固。首先我们先在本机测试下

打开 cmd ,使用java -jar jiagu.jar -login 登录
在这里插入图片描述
使用 java -jar jiagu.jar -importsign 导入签名 keystore 信息
在这里插入图片描述
加固操作会使原 APK 包的签名失效,所以加固后的 APK包需要重 新使用原应用的 keystore 签名文件重新签名,APK 文件才可以正常安装使用
在这里插入图片描述
最后 提示 签名成功
在这里插入图片描述
在这里插入图片描述
接下来我们放到 jenkins 中,首先在 General 中增加一个 Boolean Parameter 表示是否加固
Android-使用Jenkins自动化打包详解-windows篇_第42张图片
在 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的操作就是生成二维码的操作

再次打包,勾选加固
Android-使用Jenkins自动化打包详解-windows篇_第43张图片
这样打包成功后,每次加固时,jiagu 文件夹的文件先被清空,然后生成一个 名称为 *_jiagu_sign.apk 的文件
Android-使用Jenkins自动化打包详解-windows篇_第44张图片
然后这个文件会被拷贝到 app 文件夹下
Android-使用Jenkins自动化打包详解-windows篇_第45张图片
这样

一些问题处理

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

Android-使用Jenkins自动化打包详解-windows篇_第46张图片
解决办法:
当前页面选中 Advanced,最下面的 update site 由 https 改为 http
在这里插入图片描述
在这里插入图片描述
然后重新打开jenkins即可
Android-使用Jenkins自动化打包详解-windows篇_第47张图片

Your project path contains non-ASCII characters

Android-使用Jenkins自动化打包详解-windows篇_第48张图片
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包下载
Android-使用Jenkins自动化打包详解-windows篇_第49张图片
然后导入
Android-使用Jenkins自动化打包详解-windows篇_第50张图片
Android-使用Jenkins自动化打包详解-windows篇_第51张图片
运行程序
在这里插入图片描述
打开 C:\Users\00lix\.jenkins\users\admin_xxx\config.xml,找到 节点,用刚才的字符串替换 #jbcrypt:后边的内容
在这里插入图片描述
重启 jenkins(关闭 apache 再打开)即可

删除多余凭据

Source Code Management 中 Credentials 有重复的,现在删除
Android-使用Jenkins自动化打包详解-windows篇_第52张图片
点击左侧 凭据,找到重复删除即可

项目workspace修改

workspace 就是工作目录,一般就是 Down 下来的源代码目录,默认的在 C:\Users\00lix\.jenkins\workspace,修改某个项目的 workspace 可以这样操作

进入项目主页 Configure -> General -> Advanced…
Android-使用Jenkins自动化打包详解-windows篇_第53张图片
勾选 Use custom workspace,填入自定义的工作空间
在这里插入图片描述

jenkins内置参数怎么查看

在项目设置中,找到 Build 标签,点击 Advanced…,点击下面链接即可
Android-使用Jenkins自动化打包详解-windows篇_第54张图片
打开的链接是 /jenkins/env-vars.html/可以看到 jenkins 内置参数
Android-使用Jenkins自动化打包详解-windows篇_第55张图片

修改apk输出路径

Build 标签下 Add build step,新增一个 Execute Windows batch command(执行 windows批处理命令)
Android-使用Jenkins自动化打包详解-windows篇_第56张图片
获取原来路径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自动化打包详解-windows篇_第57张图片

参考
Android Jenkins+Git+Gradle持续集成-实在太详细

你可能感兴趣的:(Android从入门到放弃,android,jenkins)