前言
参数化构建目录
- 根据版本号构建项目(svn)
- 设置构建渠道版本
- 构建后文件过滤
- 结束语
- 参考链接
这一篇是利用Jenkins进行Android自动化构建
的姊妹篇,前者主要介绍了Jenkins
如何搭建,以及如何配置Android
的环境;这一篇主要介绍如何利用参数化构建,让Jenkins
自动化构建有更多可能性。搭建Jenkins
的环境还是Mac系统,版本控制工具是svn
,一些命令上的使用和Windows系统有一定区别,文章中会指出;下面我们开始可玩性很高的参数化构建。
根据版本号构建项目(svn)
根据上篇,我们知道可以通过svn地址构建项目,但是根据地址获取到的项目,一般都是最新版本,就是最新提交的代码版本,有时候项目中新添加了一个功能,我们也把项目提交了,但是这个时候老板说:这个新功能先不上,按之前的版本打包,这个功能下次再上。那这时候我们就不能拉取最新的代码,应该选择上一个版本,或者更往前的版本,那在Jenkins
中我们应该怎么选取svn的版本号呢?
Extended Choice Parameter插件
插件安装
Extended Choice Parameter
这个插件在默认情况下没有安装,需要我们在插件管理中自行进行安装,操作步骤如下:
在首页Manager Jenkins
找到插件管理项,点击Manage Plugins
选项,进入插件管理界面。
按照上面的步骤操作:
- 1、选择
Available
标签 - 2、在搜索框输入
Extended Choice Parameter
- 3、勾选搜索到的插件
- 4、点击下载并重启
jenkins
等插件下载完成后,就可以在我们要构建的项目中使用它进行版本的选择了。
插件应用
接着我们来看看这个插件怎么应用。首先找到我们的项目,找到配置项:
点击配置,就可以看到项目中之前设置项,我们在General
配置中进行操作:
勾选This project is parameterized
选项,接着在Add Parameter
中选择我们安装的Extended Choice Parameter
插件
选中后就可以看到Extended Choice Parameter
相关的很多参数可以配置。我们先看第一部分:
命名和展示设置
- 首先填写
Name
,名字可以随便写,这个名字我们在后面配置中还会使用到 Description
,是描述信息,我们可以写上获取这个参数的用途,在后面构建内的过程中会在界面上展示- 在
Basic Parameter Types
配置中 Parameter Type
指的是参数的选择类型,点击下拉箭头可以看到有单选、多选、选择框、按钮选择等很多选项,可以按照自己的需求进行选择,我们这里是用来选择构建的svn
版本号,所以我们选择Single Select
选项Number of Visible Items
是指在界面上显示可选的条目数,这里写10,表示供我们选择的版本数是10个Delimiter
是获取每个版本号用什么符号间隔,这里写的是英文模式下的,
逗号;(我尝试了用英文的.
句号,获取到版本号展示出的是横向排列的,,
逗号是竖向排列,等会在构建的时候可以看到)
获取版本号
下半部分的Choose Source for Value
配置就是如何获取svn
的版本号,这里提供的方法有四种:
Value
直接写入想要构建的版本号,这个需要在构建前每次都要进入项目配置重新编写数据Property File
读取属性文件,没尝试过Groovy Script
编写Groovy脚本获取Groovy Script File
通过Groovy代码文件获取
因为这个插件是支持Groovy
语言的,所以这里我们选择Groovy
脚本获取,一是可以自动的获取版本版本号,二来相对于写配置文件,脚本更简便一些。获取svn
版本号的脚本如下:
脚本内容:
def cmd=[“/bin/bash”,”-c”,”svn log 项目的svn地址 | grep -E r[0-9] | cut -b 2-6 | head”].execute().text.readLines()
简单解释一下脚本的意思:
- svn log 项目的svn地址 从svn获取log项目的提交日志,有兴趣的小伙伴可以打开终端尝试一下,获取到的是项目的所有日志
- 接着
grep -E r[0-9]
是对日志的第一次过滤,匹配以r
开头包含数字0-9的字符;grep
命令支持部分的正则表达式可以匹配到我们想要的内容,加上grep
命令后,获取到日志,是以字母r
开头的一整行日志,并不是我们最终想要的版本号,需要再次过滤
cut -b 2-6
在一行日志的基础上再进行过滤,从第2
个字符开始到第6
个字符结束进行剪切;因为是获取版本号,我们需要将r
字符过滤掉,从第二个字符开始是我们的版本号,因为我举例的项目最新的版本是五位数,所以最多是到第六位,截取后获取到的字符串就是我们的版本号;这个数字需要根据项目提交记录来具体设置,比如一个新项目的最新版本号是1000
,那么命令就需要改成cut -b 2-5
,如果是100
就改成cut -b 2-4
,以此类推
- 最后
head
命令,就是限制展示的条数,如果不写具体的数字,默认是10
条,如果想只展示5
条,需要将命令改成head -5
,这样就可以获取到我们想要版本号了,我们在命名和展示设置中的Number of Visible Items
设置的为10
,所以脚本中的head也设置为默认
- 后面的
execute().text.readLines()
是执行Groovy
脚本,以文本的形式输出一行。
整个脚本运行完成,会获取10
条版本号数据供我们选择,Parameter Type
设置的为单选,我们选择其中的一个就可以将选取的值赋值给我们命名的name
字段SVN_REVERSION
,我们先保存看一下效果。
特别提醒:
这里说一下这个脚本只在Mac系统上好使,如果用的Windows系统需要更换findstr
相关的过滤命令,但是我尝试了好久,搜索了很多教程,不管是用findstr
命令过滤、安装下载grep
命令,或者是使用Python
脚本,在Windows
系统上还是没能成功的实现过滤,最后使用了一种手填的方式实现,才解决了问题,在下面也会简单介绍一下手动的方法,如果有知道在Windows
系统如何编写Groovy
脚本过滤的朋友请告诉我,感谢!
构建选择版本号
保存完以后,回到项目的首页,这时候可以看到我们界面上的Build Now
变成了Build with Parameters
点击Build with Parameters
选项
我们在插件的配置部分填写的信息和设置都展示在了界面上,描述信息、展示十条数据、name等。点开下拉框就可以选择想要构建的版本号了;到了这一步根据版本号构建项目还没有结束,因为这里只是展示以及获取到了SVN_REVISION
版本号,并没有在构建时使用,如何将版本号应用在构建过程呢?
构建过程添加版本号
点击配置,找到Source Code Management
选项,将版本号配置在Repository URL
选项,添加的形式是@$你的name
,我们这里命名的是SVN_REVISION
,所以在在Repository URL
选项中的配置为:svn地址@$SVN_REVISION
保存配置,再次点击Build with Parameters
选项,构建成功的项目,就是按照我们选择的版本号进行构建的了。
如果不确定自己构建出来的项目,是否是按照版本号进行构建的,可以打开此次构建项目的控制台日志,日志中,可以看到构建的版本和日志信息。
如果日志输出的版本号和你选择的一致,则说明配置正确,如果始终是最新的版本号(默认最新),则需要检查配置是否正确,祝你成功😊。
String Parametre手动填写版本号构建(Windows系统)
上面我提到了,在Windows
系统上,进行了多次尝试;改成findstr
命令也好,下载grep
命令也罢,亦或是使用Python
脚本获取也好,就是不能实现自动获取svn
版本号(摔)。但是部署的Jenkins
环境转移到了Windows
系统上,不得不用,所以只能另辟蹊径了(有知道如何智能获取版本号的小伙伴,务必分享一下获取流程啊);
我们在上一步知道,最后应用版本号的时候是在Repository URL
上追加的获取到的版本号,前面界面的大部分内容也是如何智能的获取,但是现在我们没有办法智能获取,只能手动填写,如果查看svn
的提交记录,也是可以看到这个版本号的,把想要打包的版本号,直接追加到Repository URL
后面也是可行的,跟智能获取的效果一模一样,但是如果这样直接写的话,每次构建都需要先改一下版本号,感觉有点麻烦,这里介绍一种稍微稍微简便一些的方法(没办法了☹️)。
利用参数化构建,还是进入到配置项,之前选择的是插件Extended Choice Parameter
,这次换成String Parametre
在添加后的界面上填写信息,name
我们还是写SVN_REVISION
,Default Value
默认值可以不写,Description
描述信息,可以写上,描述一下填写这个参数的作用:
Extended Choice Parameter
和String Parametre
两个选择其中一个就可以,如果可以智能的 获取到版本号,那么就选前者,否则就选后者。
填写完信息别忘了在Repository URL
添加上svn地址@$SVN_REVISION
。保存回到项目首页,点击Build with Parameters
选项,这时候界面变成了下面这样:
每次构建前,需要我们查看svn
的日志,将需要的 版本号填写在空白处,这样构建出来的项目,也是按照填入的版本号构建的。
设置构建渠道版本
介绍完了根据版本号构建项目,再来说说如何进行多渠道打包,上篇文章在Build
选项中介绍的Task命令assembleDebug
,构建出的包是测试包,如果想要打正式包呢,就需要将命令修改成assembleRelease
,那如果项目分了付费版和免费版,或者分了海外版和国内版等等,这时候我们该怎么去进行呢,每次构建之前进来修改Task
命令吗?这时候还是需要参数化构建来救场。
Choice Parameter
这次在配置中的选项是Choice Parameter
在界面上填写我们需要的信息:
name
定义一个名字,后面要用Choices
可选择的参数值,这里的值,就是多渠道版本配置中的值;这里要说的是变量的值要注意区分大小写,遵守驼峰命名规则,因为我们这里写好的值,最后要拼接成Task
命令,如果我们选择的是Free
,那么最后拼接成的Task
命令就是assembleFreeRelease
,之所以这里要大写是有原因的。举个例子,打开项目的build.gradle
文件中productFlavors
写的是小写的free
,那到了jenkins
这里怎么就要变成大写呢,因为是’AS’帮我们自动拼接好,打开项目右上角的Gradle
,进入到app--Tasks--other
就可以看到我们要运行的Task
命令都自动拼接变成了首字母大写;
但是在jenkins
中并没有这种待遇,需要我们自己进行拼接,所以要区分大小写,在Choices
中写值时,可以打开AS
照着其中的Task
来写,取assemble
和Debug
中间的值。关于多渠道可以看Gradle productFlavors多版本打包 会对Task
命令了解更透彻一些。
上面配置好了参数,最后还是要拼接起来使用,组成Task
命令,我们滑到下面Build
选项,将命令assembleDebug
改成assemble${BUILD_TYPE}Debug
保存回到项目首页,点击构建,可以看到如下:
这样我们选择自己需要的渠道进行构建就可以了。
构建后文件过滤
最后再说一个,我们构建完的项目是在Work space
中,需要通过Build
文件层层的进入,才可以找到我们打包后的apk
或者aar
文件,我们可以通过Post-build Actions
选项,在构建完成后做一些工作,比如apk
文件的过滤;具体操作如下:
在Add Post-build Actions
中选择Archive the artifacts
接着在Files to archive
中编写,如果是过滤apk
文件就写上**/*.apk
,如果是过滤aar
文件就改写成**/*.aar
,再次构建项目,完成后,点击运行成功的编号:
就可以在Status
标签下看到我们已经过滤好的文件,点击即可下载。(截图是过滤的aar
文件)
结束语
参数化构建的内容暂时先说这么多,以后有写的技巧或者解锁新功能,再更新,祝大家jenkins
玩得愉快😊。