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

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

1、下载和安装jenkins
①、安装tomcat
②、下载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、配置
①、Manage Jenkins -> Global Tools Configuration

设置 JDK
在这里插入图片描述
设置 Git
在这里插入图片描述
设置 Gradle ,可以设置成固定版本,这里我不设置了,后边加入项目的时候用项目里的版本
在这里插入图片描述
②、Manage Jenkins -> Configure System
勾选 Environment variables,添加 ANDROID_HOME变量,这个值是sdk路径,可以去系统变量看下填的什么
在这里插入图片描述
4、项目配置
①、点击左侧 New Item 来新建一个项目

输入项目名称,选择 Freestyle project

②、Source Code Management

选择 Git,填入项目地址
在这里插入图片描述
Credentials add 一个用户,填入 git 账号信息
在这里插入图片描述
③、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_TAGGit Parameterdev、master等
BUILD_TYPEChoiceRelease or Debug
PRODUCT_FLAVORSChoiceXiaomi、Huawei等
VERSION_NAMEString1.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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发送邮件如图:
在这里插入图片描述

apk加固

这里使用 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 yxx@qq.com yxx@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 文件夹)

这样的操作就是生成二维码的操作

再次打包,勾选加固
在这里插入图片描述
这样打包成功后,每次加固时,jiagu 文件夹的文件先被清空,然后生成一个 名称为 *_jiagu_sign.apk 的文件
在这里插入图片描述
然后这个文件会被拷贝到 app 文件夹下
在这里插入图片描述

增加代码审查功能

1、首先安装 SonarQube
下载 SonarQube,Community 版本免费
下载完成后解压,在 bin 目录,找到 相应系统版本,打开 StartSonar.bat 。例如我下载的是 7.8 版本,并且解压到了 D 盘。那么我需要打开 D:\sonarqube-7.8\bin\windows-x86-64\StartSonar.bat
在浏览器中访问 127.0.0.1:9000,出现以下界面说明安装成功
在这里插入图片描述
2、安装 PostgreSQL
3、配置 sonarqube
打开 D:\sonarqube-7.8\conf\sonar.properties,找到 postgresql 节点增加

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar
sonar.login=admin
sonar.password=admin

sonar.jdbc.username=sonar 数据库用户名 (安装PostgreSQL时创建的新用户)
sonar.jdbc.password=sonar 数据库密码 (安装PostgreSQL时创建的新用户)
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar 数据库地址,其中 5432 是安装 PostgreSQL 时默认的端口号
sonar.login=admin sonarqube默认账号
sonar.password=admin sonarqube默认密码

重启 sonarqube(其实你可以重启电脑,然后再执行 StartSonar.bat),如果能正常打开 127.0.0.1:9000,说明配置正确的了。如果没有,请检查刚才配置的正确性

然后再打开 pgAdmin 4,可以看到 sonar 数据库中已经有表了
在这里插入图片描述
4、jenkins 安装插件
插件管理中搜索 SonarQube Scanner 安装并重启

Manage Jenkins -> Configure System -> SonarQube servers 填入如下信息
在这里插入图片描述
Name 随意
Server URL 填SonarQube地址,注意别忘写 “http://”
先填好前两项,保存后才能填写 token,这里第三项选可不选,我这里不填了在这里插入图片描述
Server authentication token 的获取方法如下:在 Sonarqube 页面获取

在这里插入图片描述
在这里插入图片描述
a26158c7386d936ab955c4677fbefee555fb6f15

复制好后,点击 第三项的 “Add”,在弹出的页面中填写
在这里插入图片描述

5、配置本地 SonarQube Scanner
Manage Jenkins -> Global Tools Configuration

如图可以自动安装
在这里插入图片描述
6、任务构建
新建一个项目
在这里插入图片描述
在这里插入图片描述
General 中填写工作目录,注意"/"方向
在这里插入图片描述
选择要审查的代码,代码来源还是选择 git,跟之前配置项目是一样的
在这里插入图片描述
Build 中增加 Invoke Gradle script
在这里插入图片描述
Build中再增加 Excute SonarQube Scanner
在这里插入图片描述
因为 sonarsanner 是在Jenkins中集成的,path to project properties 路径就不需要了(sonarscanner 可以单独下载安装,这种方法自行百度)。但是要在“Analysis properties”一项中增加相应的配置

注意路径的"/"方向
在这里插入图片描述

#项目的key
sonar.projectKey=supermarket
#项目的名称
sonar.projectName=云小店
#项目的版本
sonar.projectVersion=1.0
#语言
sonar.language=java
#需要分析的源码目录,多个目录用英文的逗号隔开
sonar.sources=${workspace}/app/src
#compiled classes of your project 时会用到
sonar.java.binaries=${workspace}/app/build/intermediates/javac/szytestDebug/classes

7、Build Now
Build 成功后会在右上角有一个 sonarqube图标,点击即可查看
在这里插入图片描述

一些问题处理

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

在这里插入图片描述
解决办法:
当前页面选中 Advanced,最下面的 update site 由 https 改为 http
在这里插入图片描述
在这里插入图片描述
然后重新打开jenkins即可
在这里插入图片描述

Your project path contains non-ASCII characters

在这里插入图片描述
what went wrong 上面,可以看到 build.gradle 路径包含中文字符。因为我们创建项目时项目名称叫 “云小店”,所以这里默认创建了“云小店”的目录

所以只要修改这个项目的workspace即可,修改方法看 文章后边的 其他设置 - 项目workspace修改

SonarQube server [127.0.0.1:9000] can not be reached

当配置 SonarQube 后,Build 项目时,报错 SonarQube server [127.0.0.1:9000] can not be reached
说明 SonarQube server 没有连接上,需要在 Manage Jenkins -> Configure System -> SonarQube servers 中检查SonerQube server 配置,我报这个错是因为 server url 少写了 http://

其他设置

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 就被拷贝到自定义的路径了
在这里插入图片描述

重启Jenkins

路径最后输入 /restart 即可重启 Jenkins
在这里插入图片描述

参考
Android Jenkins+Git+Gradle持续集成-实在太详细
SonarQube的安装、配置与使用

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值