美文网首页Jenkins
Jenkins下android项目配置教程

Jenkins下android项目配置教程

作者: 我的左键很准 | 来源:发表于2018-12-08 13:40 被阅读0次

Jenkins 是一款流行的开源持续集成工具,具有自动化构建、测试和部署等功能。本文以WIN10环境为例,总结一下在Jenkins部署android项目的流程,和遇到的一些问题。

1. 安装 Jenkins

官网:https://jenkins.io/

1.1 安装 JDK

Jenkins 是 Java 项目,所以要必须安装 JDK;

1.2 安装 Jenkins

这里我使用的是war包形式,从官网下载jenkins.war至Tomcat安装目录下的/webapps,然后启动Tomcat 会自动部署;

浏览器访问:http://localhost:8080/jenkins/

1.3 防火墙放行

默认的防火墙是不允许访问的,所以要添加一个入站规则。具体如下,Windows防火墙 > 高级设置 > 入站规则 > 右键新建规则,选择端口,端口选择tomcat的端口,我的是8080,然后一直下一步就好了。也可以参考这篇文章https://jingyan.baidu.com/article/fb48e8bee35d456e622e14b3.html

2 . 基本配置

2.1 登录

浏览器进入http://localhost:8080/jenkins/

首次进入需要输入初始密码来解锁,初始密码查看方法:C:\Windows\system32\config\systemprofile.jenkins\secrets\initialAdminPassword

复制好密码,点击下一步

image

这里选择安装推荐的插件就好了

image

可以看到下面有很多常用得插件,有git和gradle,由于要构建android项目,所以gradle插件是要需要的,我的项目是每次打包从git上拉取的,也得需要git插件。没有的话可以后续安装。这里安装插件得时候,最好地址栏地址别是ip地址,就使用默认的localhost,因为我之前安装插件的时候经常会下载失败。

image

创建一个用户,使用admin用户也可以,密码是前面文件内的密码

image

这里可以跳过,暂时不需要。

image

这样就进入了jenkins系统了

image

2.2 全局工具配置

在配置之前要先确认插件,需要安装的插件有:Android Lint Plugin,Gradle Plugin,Git plugin,如果缺少的话,在插件管理安装。

点击进入全局工具配置

image

分别配置jdk,git(需要下载git软件),gradle(如果使用项目内的封装gradlew,这里可以不配置)

gradle离线下载地址,http://services.gradle.org/distributions/

image

配置Android SDK,首先下载SDK工具,http://tools.android-studio.org/index.php/sdk

下载好了,进入系统设置

image

找到全局属性,新增一组环境变量,键名是ANDROID_HOME,值就填sdk的路径

image

到这里整个打包环境就搭建完毕了。

3. 创建打包任务

接下来针对某个Android项目创建的打包任务,在主界面点击“新建”,如图

image

1.创建任务

如图,输入任务名,选择“构建一个自由风格的软件项目”,然后点击最下方OK按钮。

image

2.任务配置

创建完任务,就来到了任务的配置界面,如图所示

image

1)参数化构建

Jenkins提供了“参数化构建过程的选择”,可以将参数传入项目中,那么就可以根据参数去选择app的开发环境,测试环境,并可以设置app的版本及是否加固等等。

image

通过不同的参数,去选择相应的app包,我配置了以下参数,BUILD_TYPE(是否混淆,正式测试签名),PRODUCT_FLAVORS(渠道),VERSION_NAME(版本号),VERSION_CODE(内部版本号),REINFORCE(是否加固)

image image image

2)workspace配置

配置完上一步后,点击右下角的“高级”按钮

image

配置我们的工作空间。Android项目代码以及打出的包都会在这个路径下。

image

3)源码管理

这一步是配置我们的Android源码,我这个项目是托管在Git上的,所以下面以Git为例

在Repository URL中填写项目的地址,如果需要clone权限的,需要在添加一个证书(git用户密码),点击Add添加

如果项目不是主分支,在Branches to build选择你要使用的分支

image

4)构建配置

触发器可以让项目定时打包还有根据是否有新上传打包等,由于我的android项目并不需要,所以这里不做讲解。

在这里提一下,如果需要更改每次编译的名字,可以下载 **build-name-setter **这个插件,

这是我的命名

#${BUILD_NUMBER}_${BUILD_USER}_${PRODUCT_FLAVORS}_${BUILD_TYPE}_${VERSION_NAME}

${BUILD_NUMBER} 项目打包的次数,下标(系统变量)

${BUILD_USER} 打包用户(系统变量)

其余几个是之前配置的构建参数

image

下面是最关键的,配置android的构建,增加构建步骤,选择Invoke Gradle Script

有两个选项,Invoke Gradle和Use Gradle Wrapper

选择第一个就要在选择一个gradle版本,这需要在全剧工具中配置

选择第二个是使用项目的封装gradlew

然后在Tasks中写入需要执行的任务,这需要知道一点gradle的命令

下面的意思是 清理项目 然后执行渠道打包

clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}

上面这两个参数是前面配置的

Switches里面配置的是编译的缓存路径,通过-P命令注入,也可以直接在系统的,或者项目中的gradle.properties中配置android.buildCacheDir=路径地址,已经配置过的可以忽略这个,不配置这个可能会出现缓存路径过长而无成功编译

image

怎么在项目中使用上面的自定义参数呢,有三种方法

1.是在tasks中 通过-D命令 将参数传入

2.是Switches中,通过-P命令 将参数传入

3.是勾选Pass all job parameters as Project properties,这样参数也能注入到项目

image

上面的三种方法,其实都是差不多的,只是最后一个更方便,配置好后,参数会传入项目的根目录下的gradle.properties中,会根据gradle.properties中的参数的名称对应的把相应的值设置,这就需要我使用哪几个参数,也要在gradle.properties中配置一个相应的,比如我想要知道打包的版本号和内部版本,那么我的文件就应该是这样的。

image

上面的弄好后,需要在build.gradle中使用gradle.properties中的值,而不是写死,这样就可以根据参数去打包了。

现在配置到现在,已经可以正常的打包了,但是我需要加固我的apk,我使用的加固是腾讯的乐固加固,它是有命令行加固方式的,所以我可以增加构建步骤,执行批处理命令来完成加固及其后续的操作。

image

下面是我批处理的代码,包含了加固签名,判断是否加固,还有生成二维码。
如果需要将生成的安装包上传到内测分发托管平台也可以在这之后去操作,或者使用对应的插件也可以。

生成二维码使用的是python下的myqr,我将python配置成系统环境了,可以直接调用,这里配置可以像前面配置ANDROID_HOME一样,在全局属性里配置,也可直接在win系统下操作。
github地址是https://github.com/sylnsfar/qrcode

加固使用的ms-shield.jar,sid skey请填入自己的。
sid和skey来自腾讯云账号,注册腾讯云账号后需要单独申请。
申请地址:https://console.cloud.tencent.com/cam/capi

ms-shield.jar下载地址
链接: https://pan.baidu.com/s/1j5g88ek758c2DGvGaRpWoA
提取码: h3ng

set jdk=C:\Program Files\Java\jdk1.8.0_181
set storeFile=签名文件位置
set storePassword=签名文件密码
set keyAlias=签名文件别名
::打包输出目录
set outputs=D:\software\apache-tomcat-9.0.12\webapps\app
::乐固加固临时目录
set leguTemp=D:\software\apache-tomcat-9.0.12\webapps\app\ysclegu

::生成的APK的命名
set apkName=app-%PRODUCT_FLAVORS%-%BUILD_TYPE%

rmdir /s/q %leguTemp%

if "%REINFORCE%"=="1" goto A 
if "%REINFORCE%"=="0" goto B 

:A
java -Dfile.encoding=utf-8 -jar "D:\tools\ms-shield.jar" -sid XXXXXXXXXXXXXXXXXXXXXXXXXXX -skey XXXXXXXXXXXXXXXXXXXXXXXXX -uploadPath .\app\build\outputs\apk\%apkName%.apk -downloadPath %leguTemp%
"%jdk%\bin\jarsigner.exe" -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %storeFile% -storepass %storePassword% -signedjar %outputs%\ysc_%apkName%_sign_%BUILD_ID%.apk %leguTemp%\%apkName%_legu.apk %keyAlias%
if "%errorlevel%"=="0" goto C
if "%errorlevel%"=="1" goto A

:B
copy %workspace%\app\build\outputs\apk\%apkName%.apk %outputs%\ysc_%apkName%_sign_%BUILD_ID%.apk
goto C

:C
myqr http://192.168.1.115/app/ysc_%apkName%_sign_%BUILD_ID%.apk -n ysc_%BUILD_ID%.jpg -d %outputs%/qrcode
exit

批处理的执行完之后,就会把安装包放到指定的位置,还有生成的二维码也存到了制定位置,接下来就增加构建后的操作步骤,来把二维码和下载地址显示出来
如果没有下面的选项,就安装description setter plugin这个插件

image.png

将要展示的html代码写在 Description里


image.png
<img src='http://192.168.1.115/app/qrcode/ysc_${BUILD_ID}.jpg' width=200px height=200px><br/><a href='http://192.168.1.115/app/ysc_app-${PRODUCT_FLAVORS}-${BUILD_TYPE}_sign_${BUILD_ID}.apk'>点击下载</a>

到这里全部的配置就基本完成了。保存这个job,然后点 [Build with Parameters]构建你的项目。
项目构建完成后,会在左下角显示构建的历史,和刚刚配置的html页面。


image.png

你可能暂时显示不出图片。
因为Jenkins出于安全的考虑,所有描述信息的默认都是采用文本模式,需要到全局安全配置中,将标记格式器设置为Safe HTML


image.png

另外全局安全配置中可以配置权限,省的别人把你的job删除,你可以配置不登录的用户只能使用构建。

启用安全才可以使用权限


image.png

相关文章

网友评论

    本文标题:Jenkins下android项目配置教程

    本文链接:https://www.haomeiwen.com/subject/snlqhqtx.html