目录
一、下载安装Jenkins
二、安装Gitee插件
三、配置Jenkins
3.1 全局工具配置
3.2 环境配置
四、新建任务并配置
4.1 General
4.2 源码管理
4.3 构建触发器
--在Gitee中配置WebHook
4.4 构建
4.5 在jenkins中查看构建结果
五、参数化构建(重点!)
六、常见报错
6.1 构建时配置的gradle版本要与Android Studio中项目使用的版本一致。
6.2 AAPT2报错
6.3 安装包位置
Jenkins 官网下载地址:https://jenkins.io/download/
选择对应操作系统的版本进行下载(最好选LTS(Long-term Support ) 长期支持即稳定版)
下载完成之后安装,直接点击下一步即可。
安装完成之后浏览器会自动弹出窗口链接:http://localhost:8080
如图,找到对应路径里的文件把里面的密码复制粘贴上去。
可以安装推荐的插件(需要等待比较长的时间),也可以选择插件安装。
这里懒得选择直接安装了推荐插件,某些插件安装失败可以重试,如果重试了一两次之后还是失败就不用管了直接进入下一步创建用户,也可以使用admin,不过还是推荐自己创建用户,后期权限管理方便一些。
我们要用Gitee拉取代码,所以安装一下Gitee插件(系统管理->插件管理->可选插件->筛选Gitee->选中直接安装,安装成功之后重启jenkins服务)
系统管理(ManageJenkins)>全局工具配置(Global Tool Configuration)
1.JDK
别名可以随意,地址就是你的jdk绝对路径
2.Gradle
命名可以随意,建议使用版本号命名
默认路径在C:\Users(用户名).gradle\wrapper\dists\下
也可以直接选择版本自动下载,建议根据安卓项目需要配置多个版本的Gradle
3.Git(不确定是否必须,先配置一下)
4.Maven(不确定是否必须,先配置一下)
系统管理(ManageJenkins)>系统设置(Configure System)
1.Android SDK环境变量
键为“ANDROID_HOME”,值指向本地SDK目录
注意:这里的键需要和本机环境变量内的Android SDK目录的键一致
2.Gitee环境
链接名自定义,Gitee域名:https://gitee.com
点击添加,新增凭据,选择Gitee API 令牌,到对应地址去获取私人令牌
点击测试链接,出现“成功”,配置完成。
若出现 ERROR ,可能是缺少插件:Jersey 2 API
新建一个freestyle的项目
会自动填入上面配置的Gitee链接
记住这个Gitee WebHook的URL,同时在这里生成Gitee WebHook的密码。
其他步骤不重要,看着勾选。
Gitee中只能访问公有ip,无法访问本地的jenkins服务器,因此需要将内网转成外网域名
(推荐用内网穿透工具:ngrok)
然后填入Jenkins中生成的WebHook密码,点击测试,请求结果为........accepted 说明配置成功
注意这里GradleVersion要跟安卓项目中使用的Gradle版本一致,否则编译可能会出错。
构建命令一般是先clean,然后assembleRelease-打Release版本的包,或者assembleDebug-打Debug版本的包。
${JENKINS_HOME}/workspace/替换为为你的任务名称
${JENKINS_HOME}/workspace/替换为你的任务名称/替换为你的安卓工程名称/build.gradle
构建时可以设置参数,这样就可以打出不同参数的包。
主要用到的是Choice Parameter 可选参数。
项目中可能需要配置的参数:版本(Release 或 Debug),版本号,渠道名~等等
配置完参数还不算完,我们要在下方构建时候引用,首先找到构建标签处,将Tasks属性值修改为:
其中${PRODUCT_FLAVORS}和&{BUILD_TYPE}分别对应上面的参数名。
参数化构建配置上了,还需要在构建时将参数映射到代码中,如下图:
以上, Jenkins 上的参数化构建配置完成。我们还需要在代码中接收该参数。
参数会映射到gradle.properties文件中的对应参数名,所以我们要在该文件中定义一个同名参数并赋默认值:
......
APP_VERSION = 1.0.1
BUILD_TYPE = debug
PRODUCT_FLAVORS = qudao
......
然后可以在build.gradle中获取到参数并添加到BuildConfig.java中:
--APP_VERSION映射到versionName
--Jenkins中可选渠道productFlavors中的选项必须是在build.gradle中添加过的渠道
......
android {
......
defaultConfig {
minSdkVersion 19
targetSdkVersion 30
applicationId 'com.xxxx.xxxxxxxx'
ndk {
abiFilters 'armeabi-v7a'
}
versionCode 1
versionName APP_VERSION
flavorDimensions "default"
}
//渠道Flavors
productFlavors{
xxxxx_360{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xxxxx_360"]
}
xiaomi{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
......
}
......
这样,Jenkins打包时就可以通过选择版本、渠道等打出对应的包。
如上图AAPT2报错导致编译失败,百度的解决方案有三种,一是说在gradle.properties中加入代码android.enableAapt2=false,二是说统一各module的compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion等,三就是更不相干的东西了。
但是代码在本地肯定是跑过的,编译打包都正常,只是上了 Jenkins 才报了这个错,所以这三个解决方案都站不住脚。折腾了好久,最后在某不存在的搜索引擎找到个说法,Gradle路径太长了导致编译错误balabala……
项目设置里的构建处,点击右下角高级,找到下方此选项打勾。再重新编译,成功!
打包之后安装包默认位置:
C:\ProgramData\Jenkins\.jenkins\workspace\项目名\安卓工程名称\build\outputs\apk\release
也可以在build.gradle修改输出的apk文件名及安装路径:
android {
......
//修改生成的apk文件的名字和路径
android.applicationVariants.all { variant ->
variant.outputs.all {
if ("true".equals(IS_JENKINS)) {
//Jenkins打包输出路径
variant.getPackageApplication().outputDirectory = new File("D:\\JenkinsProject")
} else {
//本机打包输出在本机路径
variant.getPackageApplication().outputDirectory = new File("D:\\AndroidStudioProject")
}
//apk名
outputFileName = variant.flavorName +
"_" + variant.buildType.name +
"_" + variant.versionName +
"_" + new Date().format('yyyy-MM-dd') + ".apk"
}
}
......
}