安装Jenkins:
从Jenkins官网下载安装包或war包。
通过安装包安装
正常安装后,通过浏览器访问http://localhots:8080即可
通过war包安装
修改安装路径
jenkins默认安装在c盘 C:\Users\Administrator.jenkins下
新建一个系统变量:JENKINS_HOME,值为D:\jenkins,或者其他目录。再将此路径添加至Path里。
Jenkins的启动方法有两种:
- 第一种是使用tomcat直接打开:
把jenkins.war放入tomcat下的 webapps目录下,当启动jenkins时,就会自动在webapps下建立jenkins目录。然后通过浏览器访问http://localhost:8080/jenkins即可。 - 另一种方法是通过命令行:
首先要确保系统中安装了jdk,并且配置了环境变量,检测方法就是在命令行输入java回车后有多行的命令符提示。
直接在命令行输入java -jar %jenkins.war所在文件夹%/jenkins.war
即可启动jenkins,默认会运行在8080端口,然后通过浏览器访问http://localhots:8080即可。
安装Jenkins插件:
系统管理->插件管理->管理插件->可选插件
按照下面的插件列表,搜索并勾选下载安装。务必不要缺失,造成后续配置缺少参数选项和部分功能缺失。
必要的插件列表:
Branch API Plugin
build timeout plugin
build-name-setter
Credentials Binding Plugin
description setter plugin
Dynamic Parameter Plug-in
Environment Injector Plugin
Subversion Plug-in
Subversion Release Manager plugin
GIT server Plugin
Gradle Plugin
Git Parameter Plug-In
Pipeline: Basic Steps
Pipeline: Build Step
Pipeline: Input Step
Pipeline: Nodes and Processes
Pipeline: Stage Step
Scriptler
Workspace Cleanup Plugin
Post-Build Script Plug-in
Email Extension Plugin
SSH Slaves plugin
Timestamper
手动下载插件
有些插件从可选插件中找不到,可以手动下载安装:http://mirror.xmission.com/jenkins/plugins/
PS:安装Dynamic Parameter Plug-in要先手动安装 Scriptler Plugin 这个插件,然后在手动安装 Dynamic Parameter 这个插件。
Jenkins配置-重点
环境配置:
主界面->系统管理->Global Tool Configuration
: 配置好JDK与Gradle。
JDK :
别名=随意。
JAVA_HOME=即环境变量中JAVA_HOME中的内容-
Gradle:
别名=随意
GRADLE_HOME= gradle的安装目录路径xx/gradle\gradle-2.14.1
(可以直接配置android studio 安装目录中的gradle,也可以是 .gradle\wrapper\dist目录下。
gradle可以配置多个,兼容不同编译版本。)
打包配置
主界面->新建->构建一个自由风格的项目->ok
,进入到新建项目后,填写名称及说明。
- 选择→源码管理
- 选择→构建插件,我们准备的是gradle,所以选择 Invoke Gradle script
选择配置的gradle的版本,在 taks 栏输入 命令:clean assembleRelease --stacktrace --debug
点击保存!
无属性构建
点击立即构建,在 build history可看到任务执行。
任务前有个蓝色小圆点,如果项目构建失败,任务前的小圆点为红色,构建成功依然为蓝色。
同时在Console Output中可查看构建日志, 日志最后出现Finished: SUCCESS,即构建成功。
如果出现 Finished:Failed构建失败,日志内容比较多,直接全局搜索error查看报错信息。
进入→**工作空间**中可看到和工程目录一样的结构,找到apk包。
以上就完成了简单的部署和构建。
自定义属性配置
使用自定义属性,我们需要使用到gradle文件和properties文件
配置需要使用的自定义属性
.properties文件
APP_VERSION = 1.0.1
IS_JENKINS = false
BUILD_TYPE = debug
PRODUCT_FLAVORS = xiaomi
ALIAS_PASSWORD = android
STORE_PASSWORD = android
BUILD_PATH_JENKINS = E\:\\JenkinsApk
BUILD_PATH_LOCAL = D:\\AS_PROJECT\\TestJenkins
BUILD_TIME= 1970-1-1
APPNAME = JKApp
.gradle文件
apply plugin: 'com.android.application'
def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMddHHmm')
return formattedDate
}
def verCode = 14
android {
//渠道Flavors
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
compileSdkVersion 23
buildToolsVersion "25.0.0"
signingConfigs {
release {
keyAlias 'androiddebugkey'
keyPassword ALIAS_PASSWORD
storeFile file('sinkkey.keystore')
storePassword STORE_PASSWORD
}
}
defaultConfig {
applicationId "zsw.testjenkins"
minSdkVersion 16
targetSdkVersion 23
versionCode verCode
versionName "1.0"
versionName APP_VERSION
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.release
}
}
//修改生成的apk名字及输出文件夹
applicationVariants.all { variant ->
variant.outputs.each { output ->
//新名字
def newName
//时间戳
def timeNow
//输出文件夹
def outDirectory
//是否为Jenkins打包,输出路径不同
if ("true".equals(IS_JENKINS)) {
//BUILD_PATH为服务器输出路径
timeNow = BUILD_TIME
outDirectory = BUILD_PATH_JENKINS
//JKApp-v1.0.1-xiaomi-release.apk
newName = APPNAME+"-v"+APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk'
} else {
//本机打包输出在本机路径
timeNow = getDate()
outDirectory = BUILD_PATH_LOCAL
newName = APPNAME+"-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:23.0.0'
testCompile 'junit:junit:4.12'
}
上面我们配置了、渠道包、签名文件、版本号、apk命名、apk输出文件夹,在.properties文件中需要 一 一 与之对应。
下面我们进入到Jenkins对上述参数进行对应配置。
Jenkins对应参数配置
找到 参数化构建过程选项→打勾
选择→添加参数
选项参数使用 Choice
字符输入参数使用 String Parameter
-
时间参数使用 Dynamic Parameter
在添加参数时,配置Name的值必须与.properties文件中定义的参数名称相同。
我们需要用到的仅这三个,具体输入如下图。
参数类型 | 参数名 | 值 |
---|---|---|
Choice | APP_VERSION | 1.0.1 1.0.2 1.0.3 |
PRODUCT_FLAVORS | xiaomi wandoujia |
|
BUILD_TYPE | release debug |
|
IS_JENKINS | true | |
Dynamic | BUILD_TIME | return new Date().format('yyyyMMdd-HHmm') |
String | APPNAME | JKApp |
将需要的参数按类别添加即可。
参数引用
找到上面我们使用Gradle 插件的 Invoke Gradle script
修改tasks命令clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug
,应用上面的参数。(PRODUCT_FLAVORS
和BUILD_TYPE
即我们上面配置的参数,务必保持一致)
并勾选Pass job parameters as Gradle properties选项。如下图。
点击保存,回到项目首页。
就可以看到,原先的 立即构建已经变成了 Build with Parameter
点击参数构建,就可以看到如下上面我们配置的参数。
等待构建完成,前往在.Gradle文件中配置的路径中即可找到我们配置的命名apk。
修改构建名称
原命名只是构建编号,无辨识度
进入项目配置找到→构建环境→勾选Set build Name 设置参数
重新打包,如上图我们使用了BUILD_NUMBER 自带参数,以及 APPNAME、APP_VERSION、BUILD_TYPE ,最后效果如下图。
二、生成二维码
RT:生成二维码还没实践过……
相关知识
Jenkins提供的全局变量
全局变量 | 解释 |
---|---|
BRANCH_NAME | 项目分支名称 |
CHANGE_AUTHOR | 修改项目的作者 |
BUILD_NUMBER | 构建的序列号 |
JOB_NAME | 构建的项目名称 |
WORKSPACE | 服务器构建项目的位置 |
JENKINS_HOME | jenkins的根目录 |
GIT_COMMITTER_EMAIL | Git提交作者的邮箱 |
这些变量可以在写脚本,包括gradle脚本以及python脚本的时候可以调用,我们也可以自己通过插件来配置一些变量,用来进行构建不同的渠道包,下面选取了一些常用的:
全局变量 | 解释 |
---|---|
BRANCH_NAME | 项目分支名称 |
CHANGE_AUTHOR | 修改项目的作者 |
BUILD_NUMBER | 构建的序列号 |
JOB_NAME | 构建的项目名称 |
WORKSPACE | 服务器构建项目的位置 |
JENKINS_HOME | jenkins的根目录 |
GIT_COMMITTER_EMAIL | Git提交作者的邮箱 |
Jenkins登陆无效解决方案
当关掉jenkins的网页,再重新打开的时候,会让你重新登录,但是当你输入正确的用户名跟密码的时候,却会提示你登陆无效,解决方案如下:
1.找到安装目录下的config文件
2.找到useSecurity节点,将true改为false
3、找到authorizationStrategy跟securityRealm节点,删除这两个节点
4、重启jenkins,不知道怎么重启的,直接重启电脑,再次启动jenkins即可。
简单的Groovy语法
普通标识符:以字母、美元符号$或下划线_开始,不能以数字开始
def date = new Date()
引号标识符:使用单引号括住的字符串
def name = 'android'
括号{}:表示引用
美元符号$:表示拼接
assemble${PRODUCT_FLAVOR}${BUILD_TYPE}
//相当于assembleWandoujiaRelease
基本的gradle命令
命令 | 解释 |
---|---|
gradlew clean | 删除app目录下的build文件 |
gradlew build | 编译debug跟release包 |
gradlew assembleDebug | 编译debug包 |
gradlew assembleRelease | 编译release包 |
引用:
Android-解放双手告别测试-使用Jenkins自动化打包
利用Jenkins玩转Android自动打包发包
Jenkins安装修改默认路径和端口的方法
当 jenkins遇上Android Studio 3.0