Jenkins分为两种,一种是自带服务也就是安装版本(不需要tomcat服务器自带servlet), 另外是提供war版本,我这次是使用的安装版本,我个人建议的时还是使用tomcat + war的方式(会少很多坑,但是也有不足首先所有的东西会在C盘生成.Jenkins文件夹,有一些强迫症的,喜欢目录整洁,还是选择安装板吧),下面给出三种下载地址:
-
安装好了之后,直接打开网页输入http://locahost:8080,首次运行会要求输入管理员密码,如下图所示,图片上会显示密码的放置地址,看到没/Users/dmx/.jenkins/secrets/initialAdminPassword,这个地址就代表放置密码的位置,打开文件拷贝出密码输入就行
-
接着会跳出下面的界面,一般我们会选择第一项推荐安装,等安装完成后进入到页面
-
下面就是创建用户页面,这里建议创建用户,下面提供了Continue as admin按钮也可进入主页,但是后期想创建用户还是很麻烦的,所以建议创建用户 创建好用户,就可以进入到主页了~选择系统管理->管理插件->可选插件来开始安装我们需要的插件
Git plugin
Gradle Plugin
Email Extension Plugin
description setter plugin
build-name-setter
user build vars plugin
Post-Build Script Plug-in
Branch API Plugin
SSH plugin
Scriptler
Date Parameter Plug-in
Git Parameter Plug-In
必要的插件列表: 1.Branch API Plugin
2.build timeout plugin
3.build-name-setter
4.Credentials Binding Plugin
5.description setter plugin
6.Dynamic Parameter Plug-in
7.Environment Injector Plugin
9.GIT server Plugin
10.Gradle Plugin
11.Git Parameter Plug-In
12.Pipeline: Basic Steps
13.Pipeline: Build Step
14.Pipeline: Input Step
15.Pipeline: Nodes and Processes
16.Pipeline: Stage Step
17.Workspace Cleanup Plugin
18.Post-Build Script Plug-in
19.Email Extension Plugin
20.SSH Slaves plugin
21.Timestamper
如果你使用的SVN 还需要安装 Subversion Plug-in
Subversion Release Manager plugin
上面的这些插件你先全部安装下来选择的时候点直接安装就好(安装好后重启服务输入http://127.0.0.1:8080/restart),这里面有些我是写重复了,还有一些是已经过时了搜索不到了,这个可以不用管,你把能装的全部先安装上去就行,注意插件比较多,保证网络状态良好否则个别容易失败,需要重新安装 4. Jenkins配置(这是重点) 进入:系统管理→系统设置 先设置3个变量的环境(这么做是为了在打包的时候遇到坑,血的教训啊!相信我没错的) 选择环境变量点击增加如图:
Git 别名=随意 Path to Git = git.exe文件的全路径(d:\Git\bin\git.exe)
Gradle: 别名=随意 GRADLE_HOME= gradle的安装目录路径xx/gradle\gradle-2.14.1
android.enableAapt2=false
APP_VERSION = 1.0.0
IS_JENKINS = false
BUILD_TYPE = debug
PRODUCT_FLAVORS = xiaomi
ALIAS_PASSWORD = 123456
STORE_PASSWORD = 123456
BUILD_PATH_JENKINS = E:\\Jenkins\\workspace\\StarTeacher\\JenkinsApk
BUILD_PATH_LOCAL = E:\\AS_PROJECT\\TestJenkins
BUILD_TIME= ''
STORE_FILE=G:/android/zhangwork/StarTeacher/keystore/star.jks
APPNAME=starteacher
BUILD_PATH_JENKINS 这个设定的目录我是建立在Jenkins安装目录的workspace里面的项目里面,这样做是问了方便访问的到路径 app的.gradle文件
apply plugin: 'com.android.application'
def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMddHHmm')
return formattedDate
}
def verCode = 1000000
android {
compileSdkVersion 26
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
defaultConfig {
applicationId "com.shinyread.starteacher"
minSdkVersion 19
targetSdkVersion 26
versionCode verCode
versionName APP_VERSION
multiDexEnabled true
flavorDimensions "versionCode"
// 打包排除以下文件,屏蔽因as自身bug,在没有重复引用jar时,提示jar重复引用的问题
packagingOptions {
exclude 'META-INF/rxjava.properties'
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
}
signingConfigs {
signingConfig {
keyAlias 'star'
keyPassword ALIAS_PASSWORD
storeFile file(STORE_FILE)
storePassword STORE_PASSWORD
}
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.signingConfig
}
debug {
signingConfig signingConfigs.signingConfig
}
}
flavorDimensions "default"
productFlavors {
commonsoon {dimension "default"}
xiaomi {dimension "default"}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
//修改生成的apk名字及输出文件夹
applicationVariants.all { variant ->
variant.outputs.all {
//新名字
def newName
//时间戳
def timeNow
//输出文件夹
def outDirectory
//是否为Jenkins打包,输出路径不同
if ("true".equals(IS_JENKINS)) {
//Jenkins打包输出到服务器路径
timeNow = BUILD_TIME
//BUILD_PATH为服务器输出路径
outDirectory = BUILD_PATH_JENKINS
variant.getPackageApplication().outputDirectory = new File(outDirectory + "/" + timeNow)
//AutoBuildTest-v1.0.1-xiaomi-release.apk
newName=APPNAME+'_'+APP_VERSION+"_${variant.productFlavors[0].name}_"+variant.buildType.name+'.apk'
} else {
//本机打包输出在本机路径
timeNow = getDate()
outDirectory = BUILD_PATH_LOCAL
if ('debug'.equals(variant.buildType.name)) {
newName=APPNAME+"_${variant.productFlavors[0].name}_"+"${APP_VERSION}_debug.apk"
} else {
variant.getPackageApplication().outputDirectory = new File(outDirectory + "/" + timeNow)
//AutoBuildTest-v1.0.1-xiaomi-release.apk
newName=APPNAME+"_${variant.productFlavors[0].name}_"+APP_VERSION+'_'+variant.buildType.name+'.apk'
}
}
outputFileName=newName
}
}
}
其中variant.getPackageApplication().outputDirectory = new File(outDirectory + "/" + timeNow)是为了自定义apk的输出路径这个跟旧版本的方法不一样 下面我们进入到Jenkins对上述参数进行对应配置。 找到 参数化构建过程选项→打勾 选择→添加参数
- 选项参数使用 Peristent Choice Paramete
- 字符输入参数使用 String Parameter
- 时间参数使用 Date Parameter
- 在添加参数时,配置Name的值必须与.properties文件中定义的参数名称相同
clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug
并勾选选项如下图
安装图片支持插件Pillow和二维码生成库**qrcode** 安装Pillow命令:pip install -I --no-cache-dir -v Pillow 安装qrcode 命令:pip install myqr 这时我们要配置PYTHON的全局环境了,上面开始的时候我已经放了图片,具体位置看上图 生成二维码 进入项目→构建→增加构建步骤,选择Execute windows batch command, 填写生成二维码的命令如下
myqr http://127.0.0.1:8080/job/StarTeacher/ws/JenkinsApk/%BUILD_TIME%/%APPNAME%_%APP_VERSION%_%PRODUCT_FLAVORS%_%BUILD_TYPE%.apk -v 1 -l L -d E:/Jenkins/workspace/StarTeacher/JenkinsApk/%BUILD_TIME%
如果你是tomcat呢要怎么做? 进入tomcat安装目录conf找到server.xml文件,在Host节点中添加如下配置
<Context reloadable="true" docBase="E://JenkinsApk" crossContext="true" path="/JenkinsApk"/>
重启确保你能访问http://localhost:8080/JenkinsApk,最后只需要在二维码的命令中替换地址就好 展示二维码 找到构建后操作 → 增加构建后操作步骤→Set build description如下图
<img src='http://127.0.0.1:8080/job/StarTeacher/ws/JenkinsApk/${BUILD_TIME}/qrcode.png' width=200px height=200px > <br> <a href='http://127.0.0.1:8080/job/StarTeacher/ws/JenkinsApk/${BUILD_TIME}/${APPNAME}_${APP_VERSION}_${PRODUCT_FLAVORS}_${BUILD_TYPE}.apk'>点击下载-V${APP_VERSION}.apk</a>
OK大功告成看看最后的效果吧!惊喜不惊喜啊记得在全局安全配置里面把Markup Formatter的设置更改为Safe HTML,不然是不支持HTML显示的