Jenkins分为两种,一种是自带服务也就是安装版本(不需要tomcat服务器自带servlet), 另外是提供war版本,我这次是使用的安装版本,我个人建议的时还是使用tomcat + war的方式(会少很多坑,但是也有不足首先所有的东西会在C盘生成.Jenkins文件夹,有一些强迫症的,喜欢目录整洁,还是选择安装板吧),下面给出三种下载地址:
- 安装版官网地址
- war包地址
- tomcat9地址 安装板的安装非常的简单,一直下一步下一步就好接着往下走我们上主菜了
- 安装好了之后,直接打开网页输入http://locahost:8080,首次运行会要求输入管理员密码,如下图所示,图片上会显示密码的放置地址,看到没/Users/dmx/.jenkins/secrets/initialAdminPassword,这个地址就代表放置密码的位置,打开文件拷贝出密码输入就行
- 接着会跳出下面的界面,一般我们会选择第一项推荐安装,等安装完成后进入到页面
- 下面就是创建用户页面,这里建议创建用户,下面提供了Continue as admin按钮也可进入主页,但是后期想创建用户还是很麻烦的,所以建议创建用户 创建好用户,就可以进入到主页了~选择系统管理->管理插件->可选插件来开始安装我们需要的插件Git pluginGradle PluginEmail Extension Plugindescription setter pluginbuild-name-setteruser build vars pluginPost-Build Script Plug-inBranch API PluginSSH pluginScriptlerDate Parameter Plug-inGit 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个变量的环境(这么做是为了在打包的时候遇到坑,血的教训啊!相信我没错的) 选择环境变量点击增加如图:
PYTHON是以后生成二维码图片用到的,还没到那一步可以先不用设置,ANDROID_HOME是SDK的路径(不要忘记环境变量G:\android\android-sdk\platform-tools;G:\android\android-sdk\tools的添加) GRADLE_USER_HOME这个是干嘛的呢,说来就是血泪史了,困惑了我好久,我打包时因为一个java aapt的异常一直打包失败,这个异常跟aapt2不同,aapt2只需要在gradle.properties中加上android.enableAapt2=false就好,而这错误就是因为路径问题导致到,再仔细查看错误日志之后才发现路径错了,所以如果你使用的时安装版记得加上这个路径 环境配置: 找到 JDK、Gradle、Git 三个模块最好把jdk和git加入电脑的环境变量。 JDK : 别名=随意。 JAVA_HOME=即环境变量中JAVA_HOME中的内容
Git 别名=随意 Path to Git = git.exe文件的全路径(d:\Git\bin\git.exe)
Gradle: 别名=随意 GRADLE_HOME= gradle的安装目录路径xx/gradle\gradle-2.14.1
可以直接配置android studio 安装目录中的gradle 如果你使用android studio 直接更新过gradle,他们在 系统盘\users\用户名.gradle\wrapper\dist目录下。 gradle可以配置多个,兼容不同编译版本我配置了2个4.1和2.14.1 5.打包设置 新建→构建一个自由风格的软件项目,进入到新建项目后,填写名称及说明。 找到→源码管理,选择对应的代码管理工具,我这里使用的是git 填写信息: 使用git还需要添加认证,即账号登陆,点击Add输入git账号信息 接下来选择→构建插件 我们准备的是gradle,所以选择 Invoke Gradle script 选择配置的gradle的版本,在 taks 栏输入 命令:clean assembleRelease --stacktrace --debug点击保存 无属性构建 点击立即构建,在 build history可看到任务执行。 任务前有个蓝色小圆点,如果项目构建失败,任务前的小圆点为红色,构建成功依然为蓝色。 同时在Console Output中可查看构建日志, 日志最后出现Finished: SUCCESS,即构建成功。 如果出现 Finished:Failed构建失败,日志内容比较多,直接全局搜索error查看报错信息。 进入→工作空间中可看到和工程目录一样的结构,找到apk包。 以上就完成了简单的部署和构建 6. Jenkins自定义参数配置,和二维码生成 自定义属性配置 使用自定义属性,我们需要使用到gradle文件和properties文件 配置需要使用的自定义属性 gradle.properties文件
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文件中定义的参数名称相同
参数引用 找到上面我们使用Gradle 插件的 Invoke Gradle script 修改tasks命令
clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug
复制代码
并勾选选项如下图
最后进入项目配置找到→构建环境→勾选Set build Name 设置参数 点击应用保存,回到项目首页 就可以看到,原先的立即构建已经变成了Build with Parameter 点击参数构建,就可以看到如下上面我们配置的参数。 等待构建完成,前往在.Gradle文件中配置的路径中即可找到我们配置的命名apk,同时也可以看到我们生成好的项目如图 7. 生成二维码 这里必须用到Python这个语言 下载安装 Python 注意安装时要选上pip这个选项打钩 依次配置环境变量在path里面配置E:\Python\Scripts;E:\Python;这两项路径填你自己的路径 然后命令行输入 pip list 检查是否安装成功
安装图片支持插件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显示的