感谢博友分享,这边记录下https://blog.csdn.net/jiankeufo/article/details/78228334html
个人密码7789cc2b62114e9da9fb78b0aa3cb0c8 帐号 adminjava
上来就是干的,首先到Jenkins的官网下载https://jenkins.io,点击Download Jenkins按钮会弹出两个版本选择:LTS Release(长期支持版本),Weekly Release(每周更新版本)。首先说一下这两个版本,我的以为和MIUI的更新相似,一个开发版本一个稳定版,你们能够自行选择,功能上几乎没区别。点击尖角号会弹出操做系统,能够选择对应的操做系统安装,也能够直接下载2.xx.x.war包而后放在Tomcat(下文会详细介绍Tomcat一些功能)的webapps目录,新建Jenkins文件夹再放入。python
我选择的是Windows安装版的,首先安装版和war版我都尝试过,功能是没区别的,主要的区别在于目录上,安装版指定安装目录之后几乎全部的东西都会在对应的文件夹下生成,好比Jobs(即存放工程目录),不会在其余磁盘再生成多余的文件夹,而war版放在Tomcat目录下之后,用浏览器打开,全部的东西会在C盘生成.Jenkins文件夹。我本身是有一些强迫症的,喜欢目录整洁,不生成多余文件夹的。还有一个理由就是安装版能够不依赖Tomcat,即便本机没有安装Tomcat,安装版安装完成后依然能够用本机ip:port启动。你们能够自行选择喜欢的版本。linux
因为安装部分比较简单,就不上图了。android
接下来就要说说,Jenkins最强大的部分之一了,那就是插件。Jenkins提供了很是多的插件,几乎你想要的插件全有,前提是你能找的到~官网提供了插件搜索功能,选择Plugins页就能够各类搜索了。git
重点来了(敲黑板,啪啪啪~):首次进入,首先要输入一个密钥来进入Jenkins,接下来...接下来...上图github
通常选择第一项便可,会自动安装推荐的插件,注意:这里并非全部插件都能安装成功,有的安装失败也不影响,全部的安装完进行下一步就能够了。web
But,有时候点击之后会发生下面的状况浏览器
怎么点击Retry按钮依然是错误,这时候不要慌张,我们选择第一张图中的第二项,进行本身选择,这里系统推荐的插件默认也是选中的,直接点安装便可。But,个别状况依然会出现上图的错误页面,那么解决办法就是:进入自行选择页面,清空选项即全部都不选,而后点安装按钮,进入下一页。服务器
下一页就是建立用户页面,这里建议建立用户,下面提供了Continue as admin按钮也可进入主页,可是后期想建立用户仍是很麻烦的,因此建议建立用户。
建立好用户,就能够进入到主页了~选择系统管理->管理插件->可选插件来开始安装咱们须要的插件。
注意:列表中为主要插件,而Jenkins的插件是有依赖关系的,安装一个插件可能要先安装它依赖的插件,不然会安装失败。在可选插件勾选列表中的插件便可,依赖插件会自动下载,是否是很棒。
在系统管理选项中找到Global Tool Configuration进入,若是上面的插件安装成功,在这里会看到三个板块,如图
分别是JDK,Git,Gradle板块,分别配置这三个的路径。
这个Gradle的目录,能够是Android Studio默认下载的Gradle目录,在用户目录的.gradle\wrapper\dists文件夹下,可是目录不是很整洁;也能够到http://www.androiddevtools.cn找到gradle资源处下载经常使用的gradle版本,放到一个指定的文件夹,而后配置路径便可,目录比较整洁。
在这里最好配置一下全局属性,这里先说一个,就是配置Android SDK目录,在打包是有可能会出现ANDROID_HOME not found的状况,因此在系统管理->系统设置->全局属性版块勾选上Environment variables选项,而后添加
记得更改值内的路径为本机sdk目录。
注意:这里的键须要和本机环境变量内的Android SDK目录的键一致
距离开始打包又近了一步,接下来就开始建立新项目了,点击首页的新建,进入下图界面
给本身的项目起个名字,而后选择构建一个自由风格的软件项目,点击OK按钮,进入项目的配置界面。
直接选择源码管理tab或者向下滚动找到源码管理,如图;
选中Git选项,会出现上图的界面,配置Git项目的URL,我测试用的是Github项目,而且传输协议选择的是HTTP,须要选择Credentials选项,选择通行证,第一次须要点击Add添加通行证,如图:
Kind种类选择默认的Username with password,而后在Username和Pasword处分别输入Git帐户的用户名和密码,而后滚动到下方点击Add,而后在Credentials中选择咱们刚才添加的通行证。
接着滚动到构建Tab,点击添加构建步骤,而后选择Invoke Gradle script,如图:
而后配置构建时的Gradle版本,和须要执行的任务,如图:
这个Tasks是先clean工程,而后打包全部渠道的Release版本,这是Gradle的命令,很少说了。而后点击保存按钮,立刻就能够打包了。
点击保存后,进入项目界面,如图:
点击左侧菜单栏的当即构建,开始构建项目,这时候Build History版块会出现构建任务列表,点击进入能够查看构建详情页,如图
又不少菜单能够选择来查看状态,点击Console Output来查看构建输出的日志,全部的信息都会显示,日志最后输出Finished: SUCCESS即构建成功。
成功以后,返回项目地址就能够点击工做空间,在app的build目录下面查看apk生成状况。
以上就是Jenkins打包最简单的配置,我知道你们想要的不止这些,更精彩的还在后面。
在咱们打包的时候,咱们大多时候不想只是简简单单打一个版本的包,咱们想经过配置一下参数,来知足一些需求,好比根据渠道打不一样版本的包、根据Tag打不一样的包等,下面就来讲一下Jenkins参数化构建。
在咱们项目中须要配置的选项有:版本(Release 或 Debug),版本号,渠道包,根据Tag打包。另外咱们还须要加上打包途径,AS打包仍是Jenkins打的包,还要加一个时间戳。全部的参数列出来了,下面就配置Jenkins的参数化构建吧~
在Jenkins项目主页选择配置,进入配置页,在General tab将参数化构建过程选中,如图:
接下来就能够添加参数了,下面我先列出参数表格:
参数名 | 参数类型 | 参数值列表 |
---|---|---|
BUILD_TYPE | Choice | Release or Debug |
IS_JENKINS | Choice | true |
PRODUCT_FLAVORS | Choice | Xiaomi 、Wandoujia等 |
BUILD_TIME | Dynamic Parameter | 2016-12-21-11-11 |
APP_VERSION | Choice | 1.0.0、1.0.1等 |
GIT_TAG | Git Parameter | tag1.0.0等 |
下面直接放个人配置截图:
配置完参数还不算完,咱们要在下方构建时候引用,首先找到构建标签处,将Tasks属性值修改成:
clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug
clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug
其中${PRODUCT_FLAVORS}
和&{BUILD_TYPE}
分别对应上面的参数名。配置如图:
看了图你们确定留意到了红色框内的选项并且很好奇吧,这个选项是APP_VERSION、IS_JENKINS、BUILD_TIME须要用到的,由于这三个参数须要注入到Android项目中的配置同样,而红色框中的这个选项能够帮咱们侵入到gradle.properties文件中替换值,而且build.gradle文件可以直接引用gradle.properties文件中的属性,因此起到了侵入的效果。下面分别是个人gradle.properties和主项目的build.gradle文件全代码:
//gradle.properties
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
#http://www.gradle.org/docs/current/userguide/multi_project_builds.html
#sec:decoupled_projects
#org.gradle.parallel=true
APP_VERSION=1.0.1
IS_JENKINS=true
BUILD_TIME=''
//build.gradle
apply plugin: 'com.android.application'
def getDate() {
def date = new Date()
def formattedDate = date.format('yyyy-MM-dd-HH-mm')
return formattedDate
}
def verCode = 14
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.zyyoona7.autobuildtest"
minSdkVersion 15
targetSdkVersion 23
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
versionCode verCode
versionName APP_VERSION
}
signingConfigs {
signingConfig {
//因为本地打包使用的是本机上的KeyStore
//而Jenkins打包用的是服务器上的KeyStore
//两个路径不同
if("true".equals(IS_JENKINS)){
storeFile file("服务器上KeyStore的路径")
}else {
storeFile file(STORE_FILE_PATH)
}
keyAlias KEY_ALIAS
keyPassword KEY_PASSWORD
storePassword STORE_FILE_PASSWORD
}
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.signingConfig
}
debug { }
}
dexOptions {
javaMaxHeapSize "2g"
}
//渠道Flavors
productFlavors {
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
//修改生成的apk名字及输出文件夹
applicationVariants.all { variant ->
variant.outputs.each { output ->
//新名字
def newName
//时间戳
def timeNow
//输出文件夹
def outDirectory
//是否为Jenkins打包,输出路径不一样
if ("true".equals(IS_JENKINS)) {
//Jenkins打包输出到服务器路径
timeNow = BUILD_TIME
//BUILD_PATH为服务器输出路径
outDirectory = BUILD_PATH
//AutoBuildTest-v1.0.1-xiaomi-release.apk
newName = 'AutoBuildTest-v' + APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk'
} else {
//本机打包输出在本机路径
timeNow = getDate()
outDirectory = output.outputFile.getParent()
if ('debug'.equals(variant.buildType.name)) {
newName = "AutoBuildTest-v${APP_VERSION}-debug.apk"
} else {
//AutoBuildTest-v1.0.1-xiaomi-release.apk
newName = 'AutoBuildTest-v' + APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk'
}
}
output.outputFile = new File(outDirectory+'/'+timeNow, newName)
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.0'
testCompile 'junit:junit:4.12'
}
这样在Jenkins打包的时候上面三个参数就会随着选择变化而变化了。
GIT_TAG参数使用配置,只需在源码管理处的Branch引用改成$GIT_TAG
引用参数名,如图:
参数配置完毕,看一下主页面的效果吧,如今当即构建选项变成了 Build with Parameters,完成图:
提示:
因为篇幅缘由加上这个功能我没用在项目中,因此请参考使用Jenkins搭建iOS/Android持续集成打包平台的配置构建触发器部分。
每次构建的时候,Build History模块显示是这样的,如图:
每次构建都只显示数字(#xx),这样很很差看,咱们想要它显示更多的信息怎么办呢?好比加入构建者姓名、构建的app版本、构建的类型等。请看下图:
配置完之后再次打包,变成了这个样子,如图:
是否是很Nice,固然你们还能够根据需求自行发挥~
打完包放在服务器上,咱们得配置一下下载环境才能下载,首先是Tomcat的安装,这里对Tomcat安装就不作详细的介绍了,若是不熟悉的请自行谷歌或百度,下面内容需基于Tomcat环境进行,个人Tomcat版本为8.0+。
这里说一下如何使用Tomcat配置下载地址,首先进入Tomcat目录下的conf文件夹,而后打开server.xml文件在最后添加如图代码:
添加完这句话之后启动Tomcat服务,打开浏览器输入IP:Port/downloadApk,就能够访问了点击你想要的文件下载吧。
二维码下载功能,如今网上大多数的作法是经过蒲公英或者fir.im来生成二维码,这两个都是内测平台,我体验过蒲公英,须要将文件传到蒲公英网站而后他们生成二维码返回,传到别处总感受怪怪的,因而我决定本身生成二维码而后放在下载地址的文件夹中,经过连接显示。
首先要在电脑上安装python环境,请看http://www.cnblogs.com/yuanzm/p/4089856.html和(Python问题一)python 安装PIL (Python Imaging Library )来进行安装,若是已经安装继续往下看。生成二维码我用了qrcode这个库,感谢大神的分享,这个库如何使用就不介绍了,我只说一下Jenkins如何执行python。
添加python的环境变量到Jenkins的环境变量中,文章前面有提到过,在系统管理->系统设置中,如图添加python环境变量:
注意:键名须要和电脑上系统环境变量内的键名保持一致。
而后打开项目配置页面,在构建版块点击添加构建步骤,如图:
在编辑框内输入qrcode项目的使用命令
注意:下载地址须要本身拼接,生成路径也须要本身拼接。
这样每次打包后都会在生成apk的文件夹内生成一个对应的二维码。扫一扫就能够下载啦~~~
构建完成后,我但愿将下载地址和二维码放在Build History的版块中,方便下载,那么咱们就来设置一下,打开项目配置页,如图操做:
在Description输入框内添加
打完包,我想通知须要下载的人怎么办?发邮件~~Jenkins自带了邮件功能,可是不太好用,因此我选择了Email Extension Plugin这个插件来实现发邮件功能(已经在插件列表中)。进入系统管理->系统设置页面,如图:
邮件格式:
注意:请自行修改对应的地址,关于最近修改请参照http://stackoverflow.com/questions/7773010/how-to-include-git-changelog-in-jenkins-emails
最终的效果图是介个样子的:
在将Jenkins部署到linux服务器的时候出现了这个错误,lib/libc.so.6是linux系统的c库,因为咱们公司服务器的linux系统太老,致使最高支持GLIBC_2.5
,虽然能够经过升级内核来解决,可是有风险,因此最后决定仍是部署到了Windows服务器上面。因此在部署到Linux服务器上面以前先检查你的Linux系统所支持的GLIBC_2.xx
的版本,Android Build-Tools 25.0.0的须要GLIBC_2.14
。
很差意思,由于没及时记录因此这个错误我只记了大概,并且配置完之后,想出现这个错误居然没复现,因此只能看个大概了。这个错误主要是配置Android SDK路径为ANDROID_HOME环境变量没有配置。Windows上面配置一下环境变量;名字ANDROID_HOME:值为Android SDK路径。还有一种方法,配置Jenkins的环境变量名字和值和上面同样,添加到系统管理->系统设置->全局属性下面有一个Environment variables 勾上,而后添加环境变量便可
Jenkins打包并不难,最难的地方就是安装插件,因为公司网络不太给力致使安装插件至少半天,坑啊~~~
若是在Linux系统上和Mac上使用Jenkins的化设置起来几乎无差异,只是须要的文件格式大同小异而已。
因为篇幅比较多,但愿你们看完多多反馈,有什么问题也能够留言。
参考