![](https://i-blog.csdnimg.cn/blog_migrate/a2cd9a53cd7782cbe1da8464095e38d5.webp?x-image-process=image/format,png)
你没有看错,用手机浏览器访问Jenkins,就可以打包apk,并生成下载二维码,发送邮件通知测试人员下载,从此解放双手,告别打包测试。先上本人手机邮箱收到的打包成功通知效果图:
![](https://i-blog.csdnimg.cn/blog_migrate/23f58ed1b7b7da93fef5f784a56065d0.webp?x-image-process=image/format,png)
废话少说,开干!
本人用的是Mac,以下操作都是在Mac环境下配置的,Windows环境的配置移步到Android使用Jenkins自动化构建测试打包apk
一、安装Jenkins
打开mac终端(本人用iTerm2),输入 brew install jenkins,brew命令得安装Homebrew,安装方法移步Mac终端软件安装利器:Homebrew
![](https://i-blog.csdnimg.cn/blog_migrate/29ee88ab64d0663da0edad602f752ea3.webp?x-image-process=image/format,png)
一会儿jenkins就装好了,默认安装路径为/usr/local/Cellar/jenkins,在终端输入 jenkins启动jenkins
![](https://i-blog.csdnimg.cn/blog_migrate/a075b282e29ea11174cd5dc5e3335848.webp?x-image-process=image/format,png)
第一次启动jenkins会提示一个秘钥,登录控制台要用到,也可以在路径/Users/用户名/.jenkins/secrets/initialAdminPassword下查看秘钥
![](https://i-blog.csdnimg.cn/blog_migrate/7ea5ffc4e14dead359b6c00c2ed7ab4b.webp?x-image-process=image/format,png)
在浏览器输入localhost:8080就可以登录jenkins控制台,输入刚才的秘钥,点击继续
![](https://i-blog.csdnimg.cn/blog_migrate/fd9923738cfb4289bafbd7acae1b1f9b.webp?x-image-process=image/format,png)
插件安装选推荐的就好了
![](https://i-blog.csdnimg.cn/blog_migrate/31e513672a97e5bcfbd116ca7ec3ec2a.webp?x-image-process=image/format,png)
等待自动安装完成
![](https://i-blog.csdnimg.cn/blog_migrate/a02fe0276c27e6f451339d7c8746aecf.webp?x-image-process=image/format,png)
创建一个管理员用户,保存并继续
![](https://i-blog.csdnimg.cn/blog_migrate/b4592f697383b81363c2c8982af8ed08.webp?x-image-process=image/format,png)
设置Jenkins URL,默认为localhost,改成自己电脑的IP,即http://IP:8080,点击保存并完成
![](https://i-blog.csdnimg.cn/blog_migrate/1d833d11185adcb1a178a09cf195be0e.webp?x-image-process=image/format,png)
点击开始使用Jenkins,就可以进入控制台
![](https://i-blog.csdnimg.cn/blog_migrate/dda5b22b6b7990fdb58a227fdedac7ca.webp?x-image-process=image/format,png)
二、配置jenkins
点击 系统管理--系统设置
![](https://i-blog.csdnimg.cn/blog_migrate/12303ca16cf9f72cee46cfa8932bf0a2.webp?x-image-process=image/format,png)
拉到全局属性,勾选环境变量,添加键值对配置Android SDK
![](https://i-blog.csdnimg.cn/blog_migrate/93fa31f0c286a119291c4742b0173c48.webp?x-image-process=image/format,png)
找到系统管理员邮件地址,输入自己的邮箱
![](https://i-blog.csdnimg.cn/blog_migrate/26460f5efe21917c205eb7ffd7853843.webp?x-image-process=image/format,png)
找到邮件通知,如下配置,qq邮箱的SMTP服务器为smtp.qq.com,其他邮箱的自行百度
![](https://i-blog.csdnimg.cn/blog_migrate/94f8dff1195fa4588505b9304653fe76.webp?x-image-process=image/format,png)
记得勾选使用SMTP认证,密码不是你的qq密码,而是邮箱服务器密码,可以到邮箱查看邮箱服务器密码,打开qq邮箱,点击 设置--账户 拉到如下位置
![](https://i-blog.csdnimg.cn/blog_migrate/800d3af638fefaef1340d9f25981e5e9.webp?x-image-process=image/format,png)
点击开启POP3/SMTP服务,如果之前已经开启了,先点击关闭再点开启,提示要验证密保
![](https://i-blog.csdnimg.cn/blog_migrate/7cf59ca2321a41af3b5cf3a273b26bb0.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/bfaaaf740bb065fa3983f1a890bcaac3.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/821f1dbe028acc5f4391059b60b17488.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/542a4e6bf8e8de5aeb30994aec7b5b6e.webp?x-image-process=image/format,png)
由于jenkins自带的邮件通知样式过于单调,而且不好用,所以我们用邮件扩展功能来自定义,拉到Extended E-mail Notification(没有这个选项的就是没装插件,主界面打开 系统管理--插件管理--可选插件,右上角搜索Email Extension Plugin进行安装),如下配置,跟刚才配置差不多
![](https://i-blog.csdnimg.cn/blog_migrate/c5018b7575d5c98135ea22da8716f6c2.webp?x-image-process=image/format,png)
勾选Require Administrator for Template Testing,点击右边的Default Triggers...
![](https://i-blog.csdnimg.cn/blog_migrate/3e189b8dad27c7942a02a21512e27cd8.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/6cb066e23d958a39bc3cc13a7fc43f17.webp?x-image-process=image/format,png)
点击保存,完成系统设置
![](https://i-blog.csdnimg.cn/blog_migrate/27ba5d98dbb6cafc7b9cd74e6922ecad.webp?x-image-process=image/format,png)
接下来配置一下Gradle
![](https://i-blog.csdnimg.cn/blog_migrate/74c713f3ea225374c37d7e62815b00af.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/51941c109e674c4a35d2d0e0bbca8fab.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/5c7d9cd0fefdc50cd67efd74c4ee5bcc.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/6496066f825efe342619964303fe8031.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/617e72669972dd478b1458234263b2f3.webp?x-image-process=image/format,png)
用Android Studio打开svn项目,在gradle.properties添加如下配置
APP_VERSION = 1.0.0 IS_JENKINS = true BUILD_TYPE = release PRODUCT_FLAVORS = dev BUILD_PATH_JENKINS = /Users/zachary/Documents/jenkins/remote BUILD_PATH_LOCAL = /Users/zachary/Documents/jenkins/local BUILD_TIME= 2018-7-27 APPNAME = SevenStars
以上为默认配置,字段等下在jenkins配置要用到,BUILD_PATH_JENKINS和BUILD_PATH_LOCAL为打包本地缓存目录
在app/build.gradle的android{}节点内修改下打包的apk名称
android.applicationVariants.all { variant -> variant.outputs.all { //新名字 def newName //输出文件夹 def outDirectory //是否为Jenkins打包,输出路径不同 if ("true".equals(IS_JENKINS)) { timeNow = BUILD_TIME outDirectory = BUILD_PATH_JENKINS //BUILD_PATH为服务器输出路径 variant.getPackageApplication().outputDirectory = new File(outDirectory) newName=APPNAME+"-v"+APP_VERSION+'-'+variant.productFlavors[0].name+'-'+variant.buildType.name+'.apk' } else { outDirectory = BUILD_PATH_LOCAL //本机打包输出在本机路径 variant.getPackageApplication().outputDirectory = new File(outDirectory) newName=APPNAME+"-v"+APP_VERSION+'-'+variant.productFlavors[0].name+'-'+variant.buildType.name+'.apk' } //在这里修改apk文件名 outputFileName = newName } }
回到jenkins,点击 配置--General,勾选参数化构建过程,选择 添加参数--选项参数
![](https://i-blog.csdnimg.cn/blog_migrate/faf590947489d0a3c243ca3152b33d4b.webp?x-image-process=image/format,png)
输入名称,与gradle.properties配置的字段一致,设置选项,输入app版本,描述随便填
![](https://i-blog.csdnimg.cn/blog_migrate/1ab6071b42857fee7dfcb5420e87874e.webp?x-image-process=image/format,png)
继续点击 添加参数--字符参数
![](https://i-blog.csdnimg.cn/blog_migrate/03b00429f8fcf744fec102276cba76be.webp?x-image-process=image/format,png)
继续点击添加参数,添加两个选项参数,如下配置
![](https://i-blog.csdnimg.cn/blog_migrate/833230063009b5d0aa76b6ae206469bb.webp?x-image-process=image/format,png)
这样配置的目的是为了让打包有更多可选项,设置完立即构建就变成了Build with Parameters
![](https://i-blog.csdnimg.cn/blog_migrate/fcdc84c19bf2307dc9ba11f4bfe157f9.webp?x-image-process=image/format,png)
点击Build with Parameters可以看到多了构建选项
![](https://i-blog.csdnimg.cn/blog_migrate/22246814dd43f99a9ef68c5e788fbce5.webp?x-image-process=image/format,png)
现在还不能构建,因为还没配置构建,回到 配置--构建 ,勾选Invoke Gradle
![](https://i-blog.csdnimg.cn/blog_migrate/63792f192d213c89dc93d3ba5b52c745.webp?x-image-process=image/format,png)
clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}
类似于Android Studio里的命令
![](https://i-blog.csdnimg.cn/blog_migrate/e28ed57cd84bf775b9b90fa33e29f87c.webp?x-image-process=image/format,png)
点击 增加构建步骤--执行shell(上传apk到蒲公英生成二维码)
![](https://i-blog.csdnimg.cn/blog_migrate/060a286fceb9d76397d6e36e4e2da8f0.webp?x-image-process=image/format,png)
输入命令
curl -F "file=@/Users/zachary/Documents/jenkins/remote/SevenStars-v${APP_VERSION}-${PRODUCT_FLAVORS}-${BUILD_TYPE}.apk" -F "uKey=bfeb1a2e4febecd1b83878dd52c4fbfa" -F "_api_key=4481e4790641520d52c088291b4d8e79 " https://www.pgyer.com/apiv1/app/upload > /tmp/upload_app.txt url=$(cat /tmp/upload_app.txt|awk -F':' '{print $(NF)}'|sed 's#\\##g') echo "download_URL:<img src=$url>"
file的地址与gradle.properties配置的字段一致,自己体会啊哈哈......我怕被打,还是说一下,SevenStars-v${APP_VERSION}-${PRODUCT_FLAVORS}-${BUILD_TYPE}.apk
就是匹配如下路径的apk,然后上传蒲公英
![](https://i-blog.csdnimg.cn/blog_migrate/20f19a44dd796af959a1f5593bd20f31.webp?x-image-process=image/format,png)
uKey和_api_key登陆蒲公英可拿到(注册一个蒲公英账号就有啦)
![](https://i-blog.csdnimg.cn/blog_migrate/9aa22974352b3363f5367f6eae0bb2e8.webp?x-image-process=image/format,png)
点击保存,回到项目任务,如下点击,开始构建
![](https://i-blog.csdnimg.cn/blog_migrate/ad897cd0e11792edda7601d956e34414.webp?x-image-process=image/format,png)
可以打开下拉列表选择 控制台输出 查看日志
![](https://i-blog.csdnimg.cn/blog_migrate/09c895a4f9701308575d8bf85a6854f0.webp?x-image-process=image/format,png)
看到构建成功
![](https://i-blog.csdnimg.cn/blog_migrate/240e2f18c41dc12a0a3bc3231e5b2f81.webp?x-image-process=image/format,png)
此时还没有二维码,登陆蒲公英,如下操作复制二维码地址
![](https://i-blog.csdnimg.cn/blog_migrate/f4c0a17c97f93c041938d5a82df1e137.webp?x-image-process=image/format,png)
回到 配置--构建,点击 增加构建步骤
![](https://i-blog.csdnimg.cn/blog_migrate/e1250a70ec71472e18a530e9661ea16d.webp?x-image-process=image/format,png)
在Description中设置二维码地址,语法为HTML<img src="蒲公英二维码地址">
![](https://i-blog.csdnimg.cn/blog_migrate/256756f9acf386182813e11620458d07.webp?x-image-process=image/format,png)
点击保存,然后再次构建项目,就可以看到二维码啦
![](https://i-blog.csdnimg.cn/blog_migrate/1c49488d836a501a09dbf70fbde975a5.webp?x-image-process=image/format,png)
接着我们来配置邮件模板,点开 配置--构建后步骤,选择 增加构建后步骤--Editable Email Notification
![](https://i-blog.csdnimg.cn/blog_migrate/9b943f4e0c123771299ab3db35172585.webp?x-image-process=image/format,png)
在Default Content中黏贴如下html模板
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> <tr> <td>(本邮件是程序自动下发的,请勿回复!)</td> </tr> <tr> <td><h2> <font color="#0000FF">构建结果 - ${BUILD_STATUS}</font> </h2></td> </tr> <tr> <td><b><font color="#0B610B">下载二维码</font></b></td> </tr> <tr> <td><img src="https://www.pgyer.com/app/qrcode/m9dz"> </td> </tr> <tr> <td><br /> <b><font color="#0B610B">构建信息</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>项目名称 : ${PROJECT_NAME}</li> <li>构建编号 : 第${BUILD_NUMBER}次构建</li> <li>SVN 版本: ${SVN_REVISION}</li> <li>触发原因: ${CAUSE}</li> <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> <li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li> <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> <li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> </ul> </td> </tr> <tr> <td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li> </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"} </td> </tr> <tr> <td><b>Failed Test Results</b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td><pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> <br /></td> </tr> <tr> <td><b><font color="#0B610B">构建日志 (最后 100行):</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <!-- <tr> <td>Test Logs (if test has ran): <a href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a> <br /> <br /> </td> </tr> --> <tr> <td><textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea> </td> </tr> </table> </body> </html>
以下地方改成你的蒲公英二维码地址
![](https://i-blog.csdnimg.cn/blog_migrate/ffc43dfde93ef9685ccfefc37e0ed392.png)
拉到下面,Attach Build Log设置编译日志要不要发送到邮件,看具体需求,点开右边 高级设置
![](https://i-blog.csdnimg.cn/blog_migrate/51d4de78d638a8bde9f2f67ae85c9514.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddad659330c73c983ca25ccdd4fd6439.webp?x-image-process=image/format,png)
输入要发送的邮箱地址,多个用“,”隔开,一定要配置,不配置打死收不到邮件
![](https://i-blog.csdnimg.cn/blog_migrate/062b96e608703e45cf137c11be074998.webp?x-image-process=image/format,png)
点击保存,再次点击构建项目,不出意外的话,就可以收到邮件通知啦!
![](https://i-blog.csdnimg.cn/blog_migrate/d775dce1a756f8f78eb9e284d96200c4.webp?x-image-process=image/format,png)
http://IP:端口号
(电脑和手机连接的网络必须在同一个局域网)登陆jenkins控制台,点击构建,就可以打包apk啦!
如果同一个局域网还不能访问,链接launchd配置文件,终端输入
$ ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
进入 /usr/local/opt/jenkins(Finder前往)用编辑器打开homebrew.mxcl.jenkins.plist
![](https://i-blog.csdnimg.cn/blog_migrate/c2f0a7e39b862e64bd62edb68d336f25.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/6d725dbea87b33e0f463c8842fc4cb75.webp?x-image-process=image/format,png)
修改完成,执行命令行:
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
这样局域网的其他电脑就能访问你的ip啦如果要外网也能访问,可以把jenkins部署到Tomcat或者服务器(自己研究啊哈哈~)
![](https://i-blog.csdnimg.cn/blog_migrate/53867eba8911f28fc541f0ee7859f201.webp?x-image-process=image/format,png)
Githubhttps://github.com/Zachary46
博客园https://www.cnblogs.com/Zachary46
CSDN博客https://blog.csdn.net/Zachary_46