前言:前段时间因项目需要捣拾了一下Jenkins自动化打包,过程中遇到了很多的坑,在此记录一下。因为这篇博客是之后写的,所以有些具体的坑就不能回显了。
一,实现的功能
选择版本号,git 分支,渠道,服务器地址,指定apk输出目录条件生成apk
二,Jenkins的安装
1,Tomcat下载 ,下载地址:https://tomcat.apache.org/
2,Jenkins下载,下载地址:https://jenkins.io/download/
Jenkins 的安装在这里就不做过多的赘述,网上有很多可查阅的资料,本片博客主要是想记录一下遇到的坑。希望对其他小伙伴们能够有所帮助。
安装完之后是这个样子的
三,配置Jenkins
点击Manage Jenkins 主要配置三个地方
1,Manage Plugins
插件安装:Jenkins安装过程中会有提示安装插件,如果插件安装错误可在这里修改。Jenkins的插件是有依赖关系的,安装一个插件可能需要安装它所依赖的插件,否则会安装失败。勾选需要安装的插件,插件会自动安装。一般需要安装的插件的目录如下:
1.Branch API Plugin
2.build timeout plugin
3.build-name-setter
4.Credentials Binding Plugin
5.description setter plugin
6.Dynamic Parameter Plug-in
7.Environment Injector Plugin
8.Git plugin
9.GIT server Plugin
10.Gradle Plugin
11.Git Parameter Plug-In
12.Pipeline: Basic Steps
13.Pipeline: Build Step
14.Pipeline: Input Step
15.Pipeline: Nodes and Processes
16.Pipeline: Stage Step
17.Scriptler
18.Workspace Cleanup Plugin
19.Post-Build Script Plug-in
20.Email Extension Plugin
21.SSH Slaves plugin
22.Timestamper
如果你使用的SVN 还需要安装
Subversion Plug-in
Subversion Release Manager plugin
2,Configure System
全局配置ANDROID_HOME,
Name: ANDROID_HOME
Value: SDK所在的目录
在环境变量中配置ANDROID_HOME,注意两个位置的ANDROID_HOME的配置一定要保持一致
3,Global Tool Configuration
主要配置上面截图中的三个地方JDK,Git,Gradle。有些小伙伴可能会发现自己的jenkins中这三者中可能会少了某一个,造成这 个的原因应该是前面安装插件出了问题,返回到前面检查一下。
注意:
1,JDK的版本不能太低,Jenkins的高版本要求JDK要是1.8以上
2,Gradle:我这里选择的是Install antomatically 表示根据选择自动安装Gradle,你也可以根据自己本地有的Gradle版本配置。可以配置多个以应对多个Gradle版本。
四,开始一个新工程
1,点击 New Item,输入工程名点击Freestyle project 创建一个新工程
2,配置新项目
直接选择代码管理 Source Code Management,
1>需要输入代码管理的路径,我用的是Gitlab管理的。
2>添加通行证,第一次使用需要点击add 添加。Kind使用默认的Username with password。
Username: Git账户的用户名
Password: Git账户的密码
滚动到Build ,我这里使用的是 Use Gradle Wrapper,然后在Task任务栏中输入Gradle打包命令行。
clean assembleRelease:表示先clean 项目在打出所有的渠道包
3,点击保存,开始构建项目
回到jenkins的主目录找到之前创建的工程,点击进去,点击Build,开始构建项目。如果前面配置的信息都是正确的这个时候就可以看到打包成功了。如果失败了,点击当前构建,点击Console Output查看错误日志
五,参数化构建项目
重点来了,定制属于你自己的自动化
1,勾选 This project is parameterized (参数化构建项目),点击 Add Parameter ,常用的一般是图中标出的两个。第一个是Boolean类型的参数,第二个是选择类型的参数。选择第二个如下配置:
以此类推,你可以配置你的版本号,对应的Git分支,服务器地址等等。。常用的参数如下:
参数名 | 参数类型 | 参数对应的值 |
---|---|---|
APP_VERSION | Choice | 1.0.0 (版本号) |
BRANCH | Choice | dev/1.0.0 (Git对应分支) |
PRODUCT_FLAVOR | Choice | Xiaomi,Huawei (渠道) |
IS_JENKINS | Choice | true (来自Jenkins打包) |
BUILD_TYPE | Choice | Release ,Debug |
APP_SERVER | Choice | 服务器地址 |
2,完善代码管理
注意:Branches to build 这一栏{}中的字段一定要与上面配置的Git分支字段相对应
3,将参数注入到Android项目的Gradle文件中,这一步很重要。
1, Task任务栏变更:打出对应的渠道包,我这里打的都是正式包
2,勾选 Pass all job parameters as Project properties ,这一步很重要,这一步就是将配置参数注入到Gradle文件中
注意:刚开始弄Jenkins时参考了很多资料,很多说的是勾选 Pass job parameters as Gradle properties.但是我的Jenkins中却没有这一项,很多人的说法是添加命令行的方式,但是我试着勾选了图中的那一项也是可以的。
好了,上面的参数配置都已经配置完了,点击保存回到我们的工程,会发现之前的Build,变成了Build with Parameters.点击进去就可以看到你前面配置的参数选项。到这里还没完我们继续。
六,配置Gradle
1,Android Studio打开Android 本地项目,找到gradle.properties文件。将前面配置的参数配置进去
注意:标红框的位置要添加上,是一个缓存路径。不添加的话很可能会报错。具体的错误描述记不清了。大致是说需要查找的文件路径超出了window的文件路径长度。
2,配置build.gradle文件
buildConfigField "String", "API_SERVER", API_SERVER
上面这一段代码要注意,是动态配置到BuildConfig文件里的。我这里是在release,debug版本都配置了是为了动态写入Jenkins配置的服务器地址。
生成的apk:
1,指定了apk输出的路径
2,修改了生成apk的名称,按照:“demo”+输入路径文件夹大小+1+".apk"格式
3,获取Jenkins配置的服务器地址:
String baseUrl = BuildConfig.API_SERVER;
可能有些小伙伴有些疑惑:BuildConfig里没有前面配置的参数,因为BuildConfig文件是自动生成的,你需要build一下。至此,所有的配置都配置完了,回到Jenkins就可以开始你的自动化打包了。
七,满满的都是泪
1,前面已经说过的,window系统需要在gradle.properties文件中加入android:buildCacheDir = "xxx"
2,Jenkins中配置参数时有说到配置服务器地址并且动态写入到BuildConfig文件中,地址类型时String类型的,需要加上“”,例如:www.baidu.com,需要写成“www.baidu.com”。否者在BuildConfig文件中左边声明的是String类型的但是右边的却不是字符串,不知道是不是我自己在配置的过程中出了什么差错,欢迎小伙伴们留言。
3,If you are using NDK, verify the ndk.dir is set to a valid NDK directory. It is currently set to xxx\SDK\ndk-bundle.If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning. 这个问题可以忽略不会影响编译结果(ps在我这边是可行的)
在配置过程中遇到的点点滴滴的坑还是挺多的,距离上一次的配置有一段时间了大都忘记了。希望能够帮助到其他的小伙伴,也欢迎指正文中不足或是错误的地方。