自动化打包 Jenkins 持续集成 Git Gradle MD
| Markdown版本笔记 | 我的GitHub首页 | 我的博客 | 我的微信 | 我的邮箱 |
|---|---|---|---|---|
| MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
自动化打包 Jenkins 持续集成 Git Gradle MD
目录
环境要求
Jenkins 环境配置
Jenkins 安装
全局工具配置
Android SDK 路径配置
邮件配置
创建并配置打包任务
参数化构建
工作空间配置
源码管理
构建触发器
构建
上传apk到蒲公英
构建后操作
打包
环境要求
JDK
打开cmd,输入java -version,可以看到打印的Java版本信息。如果没有,请配置java环境变量。
Git
打开cmd,输入git --version,可以看到打印的Git版本信息。如果没有,请配置Git环境变量。
Gradle
打开cmd,输入gradle -v,可以看到打印的Gradle版本信息。如果没有,请配置Gradle环境变量。
配置方式:环境变量--系统变量--Path--将你自己的AS安装目录下的gradle目录复制过来贴上,例如:【C:\Android\AS_2.2.2\gradle\gradle-4.4\bin】
Tomcat
双击运行Tomcat的bin目录下的startup.bat脚本将Tomcat运行起来,日志中最后会提示服务开启成功:Server startup in 3475 ms。
Tomcat的conf目录下的server.xml文件可以配置端口号,默认是8080,如果跟其他项目有冲突可以自行修改。
Jenkins 环境配置
Jenkins是一个很受欢迎的CI持续集成工具,能够实现项目的自动构建、打包、测试、发布等。还可以在构建失败、构建不稳定等状态后发送邮件通知。
Jenkins 安装
Jenkins下载
下载完之后,解压压缩包运行安装程序即可完成安装。
在Jenkins安装目录下的jenkins.xml文件中可以配置编码格式、端口号等参数:
<arguments>-Xrs -Xmx256m -Dfile.encoding=utf-8 -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8081 --webroot="%BASE%\war"</arguments>
war包下载
将下载的war包放到Tomcat的webapps目录下,双击运行Tomcat的bin目录下的startup.bat脚本将Tomcat运行起来(若Tomcat已经启动,先关闭再重新启动),此时正常会提示:Jenkins is fully up and running。
然后在浏览器访问http://localhost:8080/jenkins/即可进入Jenkins页面。
首次启动时会提示安装插件,则可能需要一点时间,一般我们安装推荐的插件即可,以后我们还可以在系统管理 -> 插件管理界面安装或卸载插件。
然后,按照提示路径获取密码57f6b65f714348b7947c966d2378f9a0后输入。
然后到用户名设置界面,这个界面你有两个选择可以操作:
- 直接点击 Continue as Admin 安装,默认此时的超级管理员为admin
- 输入用户名,密码,确认密码,全名,电子邮件地址。然后点击 Save and Finish
至此,Jenkins算是初步安装成功了。
全局工具配置
在Jenkins主界面,点击进入系统管理 -> 全局工具配置界面。
- JDK的配置:别名自取,取消选中
自动安装,JAVA_HOME中输入自己电脑上jdk所在的路径,例如C:\Android\jdk1.8.0_171。 - Git的配置,同样需要将自己电脑上git.exe所在的路径复制粘贴上来,例如
C:\Android\Git\bin\git.exe。 - Gradle的配置,例如
C:\Android\AS_2.2.2\gradle\gradle-4.4。
一定要注意,这里和在Path中配置的路径不一样,这里的路径要为bin的上一级目录,因为这个事我被坑惨了。
设置完以后保存即可。
Android SDK 路径配置
在Jenkins主界面,点击进入系统管理 -> 系统设置页面。点击全局属性 -> 环境变量,这里的和操作系统上配置的环境变量一致,通过勾选的名称也知道,指的就是系统环境变量。例如【ANDROID_HOME】【D:\software\android_sdk】

邮件配置
创建并配置打包任务
接下来针对某个Android APP项目创建专门的打包任务。
- 点击创建一个新任务 -> 输入任务名(不支持中文) -> 选择“构建一个自由风格的软件项目”
- 如果想根据一个已经存在的任务创建,可以使用下面的复制选项。
- 之后会进入到项目配置页,这些设置以后还可以更改:
设置之后点击确定便进入了任务配置页面,这些配置在以后都可以进行修改。
参数化构建
在实际的项目开发过程中,可能会这对不同的环境、配置进行打包,比如选择不同的环境、渠道、签名或第三方工具的key,这些都有可能需要定制。参数化构建就是实现这种效果的。我们所要做的就是就是把选择提供出来,各种选择可以通过参数的形式传递给打包服务,然后根据打包时的选择,来对应出包。

通过上图的下拉列表的选择,可以看到支持的各种参数类型,例如我们选择选项参数来提供指定环境的选择。

PS:有些配置如果我们不知道怎么填,可以点击后面的蓝色问号按钮,可以显示提示,再点一下就会关闭提示。
工作空间配置
配置完上一步后,点击右下角的“高级”按钮,配置我们的工作空间。以后Android项目代码以及打出的包都会在这个路径下。

源码管理
这一步是配置我们的源码,我们的项目可以托管在SVN上也可以在Git上。
如果安装了git插件,在源码管理会出现Git,我们选择以Git的方式管理,然后配置代码地址和要编译的分支。例如项目地址https://github.com/baiqiantao/LifecycleTest.git,分支使用默认的*/master。

然后点击Add添加Credentials(证书),有以下几种方式:

我们一般选择用户名+密码 或SSH方式,配置后就可以自动验证了。
构建触发器
触发器是决定什么时候触发构建,可以设置为定时构建:

还可以设置定时检查代码更新,有更新则编译,否则不编译:

定时规则案例:
- 每十五分钟【H/15 * * * *】
- 每小时的0-29分钟内每十分钟一次【H(0-29)/10 * * * *】
- 周一到周五9:00到16:00之间,每小时的第45分钟构建,每两小时构建一次【45 9-16/2 * * 1-5】
- 周一到周五9:00到16:00之间,每两个小时一次【H H(9-16)/2 * * 1-5】
- 除了12月之外,每个月的1日和15日每天一次【H H 1,15 1-11 *】
构建
点击构建中的增加构建步骤,可以在这里利用shell来修改源码中的配置文件,例如可以修改文件上传路径、访问地址或输出的包名等。
如果安装Gradle插件成功的话,应该会出现下图的Invoke Gradle script,我们选择这个:

然后选择Gradle Version,就是我们之前配置的Gradle的路径,直接下拉选择好版本就可以了。
注意,这里有一个bug:
为了在Jenkins中使用gradle,需要选择
Invoke Gradle选项,然后还必须在Use gradle wrapper选项中配置你要跑的任务才能成功的利用gradle程序构建你的程序,但是你千万不能选择该选项,否则Jenkins会默认调用gradlew程序执行任务,但是一般你配置gradle后,没有该程序,就会报错。
在Tasks可以配置【clean assembleDebug】或【clean build --stacktrace】等你想执行的命令。

其他地方都不需要配置。
注意:一般来说
local.properties不会添加到版本库,所以可能需要你手动copy到相应的目录下。
上传apk到蒲公英
如果没有蒲公英的账号,先 注册 一个,然后在“账户设置”中找到“API信息”,获取API Key【6f14e9f0420bcf9cb2ae45e29afd15db】和User Key【e9fbc97a0d37793aabf62bd629c9fb78】
然后需要使用 curl 上传文件。下载后直接解压即可,不需要安装,然后像其他配置环境变量一样将curl目录加入Path即可,例如【C:_Web\curl\curl-7.61.1】,然后在cmd中输入【curl --version】,若能显示版本信息,说明安装成功了。
点击构建中的增加构建步骤,添加执行shell,然后配置下面的上传命令:【curl -F "file=@app/build/outputs/apk/debug/app-debug.apk" -F "uKey=e9fbc97a0d37793aabf62bd629c9fb78" -F "_api_key=6f14e9f0420bcf9cb2ae45e29afd15db" http://www.pgyer.com/apiv1/app/upload】
配置完后,在下次构建后即可自动上传到蒲公英。
构建后操作
构建时可能会生成多个文件,我们可以设置只将自己需要的文件做存档。在存档文件中输入需要存档的文件路径,多个文件以逗号分割,存档文件默认路径为 WORKSPACE ,存档文件的相对路径既是 WORKSPACE 并且是以正则表达式路径去匹配需要存档的文件。

如果是apk包,可填写【**/*.apk】或【app\build\outputs\apk\*.apk】。
您可以使用
module/dist/**/*.zip之类的通配符。请参阅Ant文件集的includes属性以获取确切的格式。基目录是workspace。 您只能归档workspace中的文件。
在打包完成后,可以显示我们存档的文件:

打包
一切配置完成后,点击最右边的按钮即可通过jenkins进行打包:

打包过程:

至此,所有流程都走通了。
遗留问题:
- 邮件配置
- 存档不是保存每次生成的apk吗?从目前的配置来看,因为没保存到指定路径,很容易被覆盖呀!
自动化打包 Jenkins 持续集成 Git Gradle MD的更多相关文章
- 接口自动化平台搭建(四),自动化项目Jenkins持续集成
一.Jenkins的优点 1.传统网站部署流程 一般网站部署的流程 这边是完整流程而不是简化的流程 需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试 ,如果 ...
- 自动化项目Jenkins持续集成
一.Jenkins的优点 1.传统网站部署流程 一般网站部署的流程 这边是完整流程而不是简化的流程 需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试 ,如果 ...
- Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包,严禁转载!!!
导读 之前用的都是SVN,由于工作需要用到Git,求人不如求己,技多不压身,多学一项技能,未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用doc ...
- Linux-GitLab+Jenkins持续集成+自动化部署
GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...
- CentOS 7 Gitlab+Jenkins持续集成+自动化部署
基于上次的环境<部署Gitlab+Jenkins持续集成环境> 来实现自动化部署 系统管理–>插件管理–>安装以下插件: Credentials Plugin(默认已经安装) ...
- Python接口测试实战5(上) - Git及Jenkins持续集成
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Jenkins自动化构建系列:01敏捷开发、自动化构建与持续集成
<SVN与TortoiseSVN实战系列>已写完,今天新开一个<Jenkins自动化构建系列>,上周听了Bob Jiang老师的Agile1001公开课,一直想写个总结,这篇关 ...
- 漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃monkey日志
漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃日志 1.APP崩溃率标准 开发或测试app的同学,对于app崩溃肯定非常熟悉,频繁的线上崩溃属 ...
- jenkins持续集成源码管理选项为None,构建失败找不到git.exe解决办法
我的jenkins版本为Jenkins ver. 2.19.1 1.源码管理选项只有None的解决办法: 在插件管理中心,搜索对应的源码管理插件这里以git为例,搜索git plugin点击右下角的安 ...
随机推荐
- windows系统,联系人文件。个性化。
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha ======= 文件下载链接:
- hdu 5194 组合数学or暴力
直接凑了个公式带入,没想到直接ac了,至于题解中的期望可加性可以参考概率论相关知识 #include<cstdio> #include<iostream> #include&l ...
- 笔记本光驱位置装SSD固态硬盘(亲自试验)
我的笔记本买的早了,2010年的联想Z460,速度有点慢,本来想换台电脑,想想还是算了,没有太大必要.固态硬盘便宜了,于是在原来的光驱位置装了一个256G的SSD固态硬盘,现在的性能能达到刚买来时的1 ...
- 【转】InitializingBean的作用
原文链接:http://blog.csdn.net/maclaren001/article/details/37039749 最近工作需要得到sping中的每个事物需要执行的sql,称机会简单研究了一 ...
- j.u.c系列(03)---之AQS:AQS简介
写在前面 Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchron ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(七)——右键菜单
一个常用的功能就是禁止浏览器本身的右键菜单,靠在WPF中拦截鼠标事件是不行的,可以通过设置MenuHandler来实现. 首先实现一个IContextMenuHandler. public class ...
- 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计
在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...
- DroidGap
import com.phonegap.DroidGap; import android.app.Activity; import android.os.Bundle; p ...
- webrtc在ubuntu14.04上的编译过程(12.04亦可)
转自:http://blog.csdn.net/xiangjai/article/details/44409751 一.虚拟机环境搭建 1.安装ubuntu 14.04虚拟机: 因为可以屏蔽svn版本 ...
- Swift - UITableView状态切换效果
Swift - UITableView状态切换效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // TableViewTapAn ...