前言
最近公司需求,需要部署jenkins方便运营自己打包不同渠道的apk去发布,我自己是在网上找了很多博客,最终发现他们的博客有些写的不是很全或者说现在插件都更新了,不适用以前的老办法了,所以我在这里重新写一篇博客方便Android开发者部署jenkins以方便运营可以不依靠技术自主的去编译apk去发布,当然,学会jenkins也会给你的简历上加分哦
1、Tomacat
Tomcat下载去下载Tomcat,下载解压后进入bin目录启动startup.bat文件就可以启动tomcat了
2、Jenkins
Jenkins下载去下载Jenkins,有两种选择,一种是 Long-term Support (LTS) 还有一种是Weekly,前者是稳定版本,后者则是更新比较频繁的版本,这里我们选择LTS就好,下载后的安装包解压安装,安装完成之后找到tomcat目录下的webapps下创建一个文件夹命名为jenkins,然后去jenkins安装目录下的war文件夹里的内容全部copy至刚刚创建的jenkins文件内,这个时候打开在浏览器打开http://localhost:8080/就可以进入到jenkins页面了,会让你输入密码,你根据他生成的文件路径去打开这个密码文件把密码输入进去就会进入到这个界面
可能是英文的也可能是中文的,不管是什么语言,点击左边,安装一些jenkins推荐的插件,这些插件安装失败可以重试,如果重试了一两次之后还是失败就不用管了直接进入下一步创建用户,也可以使用admin,不过还是推荐自己创建用户,后期权限管理方便一些
3、安装插件
- Git plugin
- Gradle Plugin 这里下载1.26版本的
- description setter plugin
- build-name-setter
- user build vars plugin
- Post-Build Script Plug-in
- Branch API Plugin
- SSH plugin
- Scriptler
- Dynamic Parameter Plug-in
- Git Parameter Plug-In
如果某些插件找不到或者下载不了可以在这里下载,如果没有积分可以私信我邮箱,我会发给你,csdn强制要求最低2积分,无法设置为免费,我也没办法,本地下载的插件可以通过系统管理>管理插件>高级>上传插件来离线安装插件
4、配置环境
需要额外配置gradle环境当然java环境和android sdk的环境也要配置,然后进入jenkins主界面
进入系统管理>全局工具配置>找到jdk、gradle、和git
-
别名可以随意,地址就是你的jdk绝对路径
-
git的name可以随你的心意去命名路径就写你git.exe的绝对路径
-
gradle的name也是随意的,推荐配置多个版本的gradle,gradle默认路径就在C:\Users(用户名).gradle\wrapper\dists\下
cccc.png
然后回到主页面>系统管理>系统设置
找到全局属性设置勾选环境变量设置android sdk
开始创建项目
-
主页面新建任务,输入项目名称,然后选择构建一个自由风格的软件项目后点确定
-
然后点击源码管理选择git,svn也大同小异,先点击add添加账号密码,然后再输入你的项目地址
在kind项下你也可以选择SSH Username with private key,选择enter directly填入你的私钥
#cat ~/.ssh/id_rsa.pub
是公钥,#cat ~/.ssh/id_rsa
是私钥
填好之后就是这样,下面的Branches to build 填你分支的名字
然后就点击保存,回到项目主页点击Build with Parameters或是立即构建按钮开始构建,构建成功后在
可以看到,你们的可能是#1,然后回到jenkins的根目录找到workspace目录然后找到你的项目名字的文件夹不带@tmp的文件夹,进去看看你们的代码有没有被拉下来,如果没有或者配置失败则检查你的源码配置或路径
自定义参数
111.png 33333.png 4444444.png 6666666.png 77777777.png 555555555.png 2222222222.png然后是构建>增加构建步骤>invoke gradle script
先解释一下被红色条遮住的内容,这个内容就是你新建项目的任务名称其他的都一样就行
${JENKINS_HOME}/workspace/替换为为你的任务名称
${JENKINS_HOME}/workspace/替换为你的任务名称/app/build.gradle
你也可以使用${JOB_NAME}自动去获取任务名称
${JENKINS_HOME}/workspace/${JOB_NAME}
${JENKINS_HOME}/workspace/${JOB_NAME}/app/build.gradle
下面解释红色箭头和Tasks里的的内容,然后打开你的AndroidStudio,打开你的项目,找到属于Project properties的gradle.properties文件,打开它,然后增加如下参数
APP_VERSION = 1.0 //对应你jenkins的选项参数APP_VERSION
IS_JENKINS = false //对应你jenkins的选项参数IS_JENKINS
BUILD_TYPE = debug //与上方一一对应
PRODUCT_FLAVORS = 你的渠道
CHANNEL=你的渠道
BUILD_PATH_JENKINS = F:\jenkins\workspace\你的项目名\jenkinsapk //你jenkins编译后的路径
BUILD_PATH_LOCAL = F:\jenkins\workspace\你的项目名\jenkinsapk\testjenkins //非jenkins编译后的apk
BUILD_TIME= 2018-4-24 //对应上方的BUILD_TIME选项参数
APPNAME = hbw //对应上方的文本输入参数
android.buildCacheDir=F:/AndroidStudio/build-cache-cache //可以不添加,如果编译报错需要添加这行,具体作用可以自己去stackoverflow上找
现在可以开始解释红色箭头的作用了,它的作用就是把你jenkins填写的内容覆盖到你的gradle.properties内,上面的NAME必须与gradle.properties内的命名对应,你们可以随意发挥想象,比如,因为我公司的特殊性,我们的渠道不是指的各大app store而是指的和我们公司合作的各大公司,所以我定义了一个Name为CHANNEL的文本参数,这样,运营就可以在jenkins上随意输入内容,这样他生成的APK的CHANNEL则会把我gradle.properties里的CHANNEL的内容覆盖掉,这样我在我app的build.gradle里就可以这样声明
这样我就可以在代码内部在BuildConfig类中取出这个自定义的渠道名称,上面其他的APP_VERSION,APP_NAME之类的你们也可以随意发挥想象,gradle本身就是一个框架,你们可以尽情发挥想象力去完成你们各自公司的不同的功能,不仅仅只是渠道,但是你们现在可能发现了,那上面的PRODUCT_VLAVORS和BUILD_TYPE参数和Invoke Gradle script下的Tasks里的clean assemble${PRODUCT_VLAVORS}${BUILD_TYPE}是什么意思啊,说这个意思之前得先普及一点 Gradle命令的知识
assemble
命令用于打包,比如assembleDebug
就可以编译打一个debug包,assembleRelease
就可以编译出一个release包,除此之外,assemble还可以搭配productFlavors使用,比如你在gradle里设置设置了一个腾讯应用宝
那么就可以通过assemble+你的渠道名字,如我们上面写的应用宝assembleyingyongbao
或者assemble+你的渠道名+Release或Debug,也就是assembleyingyongbaoRelease
或assembleyingyongbaoDebug
,当然assemble的作用远不于此,更多的你们自己去发现
讲完了这些知识有些人可能已经懂了assemble${PRODUCT_VLAVORS}${BUILD_TYPE}是什么意思了,没错,就是${PRODUCT_VLAVORS}会获得上面所选择的你设置的渠道${BUILD_TYPE}则会获得你上面选择的Release或Debug,这样就拼接成了assemble+渠道名+Release或Debug,这一点很多博客都没有讲清楚,还有一点需要注意,你PRODUCT_VLAVORS参数下的选项必须是你在app下的build.gradle脚本的productFlavors方法里声明的渠道,比如我只声明了yingyongbao,那么我的选项只能是有yingyongbao,因为assemble+你的渠道这条命令会去找这个task,如果没有,则会报错,到这里相信没接触过Jenkins的人都应该对jenkins有一个大概的了解了,基本上这样就会编译出apk,如果你想控制编译后的apk名字,则可以在app的build.gradle脚本内这样写
因为我希望生成出来的apk名字为jenkins内输入的APP_NAME+_+jenkins内输入的CHANNEL,但是我还有个功能是生成apk后上传到后台的ftp服务器上,而服务器上是不能存在中文的,会不兼容,所以我首先判断了一下是否为中文,如果是中文则把中文转换成拼音,这个isChinese()和getChinesetoPinyin()方法是在android接口之上声明的
大家看到了吧,所以,gradle可以让你的构建过程通过代码来控制,所以推荐大家去学习一下gradle和groovy,为什么我要把大家都说的什么什么节点之下称之为方法呢,原因就是你们可以ctrl+左键点击android节点,productFlavors节点,compileSdkVersion、buildToolsVersion、defaultConfig、applicationId等等等等,实际上都是调用的gradle提供的api,如果你gradle声明的参数有疑问,那么点进去,看看他的需要的参数要求,你就解决问题起来就会方便很多,基本上就是这些,剩下的就留给各位开发者自己想象。
构建出apk后上传到后台的ftp或者sftp服务器
如果后台是ftp服务器,则导入| publish-over-ftp/ |插件,具体的用法可以百度这个插件如何使用,因为我公司是sftp服务器,所以这里我拿publish-over-ssh/插件来演示
- 回到jenkins主页面,系统管理>系统设置>Publish over SSH
- Name可以随意填写
- Hostname填写需要连接ssh的主机名或ip地址,此处填写应用服务器IP(建议ip)
- Username填写进入这个服务器的用户名
- Remote Directory:远程目录(根据需要填写文件传到此目录下)
- 然后点击高级勾选Use password authentication,or use a different key
- Passphrase / Password填写访问服务器的密码
- port填写22,一般ftp端口是21,sftp服务器端口是22
- Timeout (ms)填写超时
-
然后保存>回到主页面>进入你的项目>配置>点击构建后操作
name选择你刚才在系统设置里填的name,source files则填写你apk生成的相对路径,相对于jenkins的workspace里你的项目下,这样我们后台的sftp服务器的路径(在系统设置里的Remote Directory)下会多出一个jenkinsapk文件夹,这个文件夹下会出现你生成的apk
-
Remove prefix和Remote directory的作用分别是删除本地的的和服务器的目录,可以不填写,Exec command可以不填写,这个警告不会影响编译,然后我们就回到项目主页点击Build with Parameters或是立即构建按钮开始构建
看到结尾的SUCCESS就代表我们就编译并且上传成功了
后言
jenkins的配置差不多就是这样了,还有很多各种各样的插件,比如钉钉的,比如你可以不使用ssh插件,蒲公英和fir.im这两个应用内测托管平台也有相应的插件可以构建后直接上传到他们的服务器,比如生成二维码发邮箱,比如定时去构建等等许多功能,都有不同的插件可以做到,只需要发挥你的想象力就可以搭建一个完全不需要技术人员维护的一个构建平台让运营等不懂技术的人单独做到生成apk >发布。
网友评论