Jenkins的使用
文章目录
前提: 使用 Git 作为公司的版本控制工具,使用 GitLab 作为对应的服务器
首先安装 Jenkins plugins, 下面列出两个关键的 Plugins
打包 APK
对于 APK 的打包,相信大家公司内部都有不同的测试环境,不同的功能需要在不同的测试环境上测试,不同的功能又对应不同的分支,如果开发人员负责根据测试人员的需求打包的话,测试人员麻烦,开发人员也麻烦。程序员一个极好的特质就是懒,那么,这时候,Jenkins 提供的This build is parameterized
功能就派上了用处。
勾选了这个选项之后,就可以添加自己需要的参数了,比如:
记住这个地方填写的name
, 这里的名称将会是 shell 里的变量,使用$来引用对应具体的变量,下面将会看到这些变量的使用。
既然环境和分支都已经可选,第二步是配置 Jenkins 去哪个地址拉源代码,即 SCM 配置,如下图:
可以看到,在Branches to build
的地方,我填的内容是*/$git_branch
,这个参数就是从前面This build is parameterized
位置添加的参数,所以用户填了哪个分支,这里就能拿到用户填写的分支,在 Build 的时候也就会拉对应分支的代码。
按照我们的意向拉了对应分支的代码,开头所说的另外一个问题,更改对应的环境,当然,可以使用ProductFlavor
来解决这个问题,再最后打包的情况下选择对应的ProductFlavor
,数量少了还好说,数量多了,就会变得很麻烦。因此,这里在Build Environment
的地方,打勾
Executor shell script on remote host using ssh
,如下图
这里需要插件SSH Plugin的支持
在Pre build script
的地方,修改你工程中决定使用哪个环境的文件,这里就可以使用最开头的$url_host
那个设定的参数。
当然还有Post build script
,需要的话就同样写一段 shell 来达到你的目的。
有些情况下,你需要获取这次打包对应的 git 信息,可以看到,每个打包都有一个 Git Build Data,这里面有对应的 git 信息,所以,勾选inject environment variables to the build process
即可将对应的信息添加到这次打包的环境变量中。
这个需要Environment Injector Plugin插件的支持。
这里有个问题,就是Evaluated Groovy Script
脚本的执行过程中,使用正常方式无法获取所有的 Jenkins 环境变量,那么需要使用currentBuild.getEnvironment(currentListener).get('var')
来获取 var 的环境变量。currentBuild 和 currentListener 在 Evaluated Groovy Script 右边的?
说明里
最后,测试人员肯定希望能下载打包完成的 APK,那么在最后的Post-build Actions
即可实现该需求。
在Archive the artifacts
里面填入打包完成的 apk 的路径,则 Jenkins 会以可以下载的形式输出该 Apk 的链接在对应的打包完成页面。
打包 AAR
打包 AAR 和打包 APK 的需求是不同的,对于 AAR 的输出,一定希望对开发透明,不需要任何人去点一下 build,才去打包 AAR,这个时候,我们前面安装的 GitLab Plugin 就十分有用。有了它,我们可以设定触发打包任务的条件:
画红线的 URL 代表 GitLab WebHook 需要回调的 URL,即 GitLab 收到某些事件(push, merge request ..etc),将会调用该 URL,此时将会触发打包。在最下面还有个红线,就是指定相应的分支,在这些分支另在 GitLab WebHook 回调的时候才进行打包,公司的特殊需求即可在这里定制。
有可能你想流式的打包,也可能你的 aar 有优先级,换句话说,A aar 可能依赖 B aar,那么一定要 B aar 打包完毕后,才能打包 A aar,那样的话你就需要下面这个插件 Jenkins Parameterized Trigger plugin 这个插件将前一个打包 aar 的 Build Env 传给后一个打包 aar 的过程中,那样,就拥有一致的 Build Env 了。