JenKins 是什么?
理解:是一个集成各种插件,通过配置、管理 的本地Web,去自动化打包Android、IOS的工具。
整体流程
插件配置——————》系统设置 sdk HOME 和路径 ,全局设置JDK、GRADLE 、GIT 的本地路径 交由JenKins 管理(即Jenkins通过上步安装的插件 配置好 就可以管理本地的gradle了)新建一个任务————》动态构造自定义本地参数写入build。gradle ——————》配置git 或svn 路径(下载源码到jenkins 好接管编译)——————————》配置gradle 及task (编译命令和编译写入构造好的参数)——》设置编译的版本名称————》构建项目 ——————控制台看log ——————》自定义的输出apk路径 找到打出的apk包
环境变量配置:其实就是将本地计算机的配置 在JenKins上面配置一遍,Jenkins 通过插件就可以自己去管理了。原本studio 通过gradle 编译的android 项目在jenkins上处理了。
注:下面截图上传失败 只能语言表达了。
step.1
JDK
JDK 7.0+
Gradle
Gradle 中文网 安装板或解压版 对应目录下的 gradle.xxx.zip 包
apache 的官网 http://tomcat.apache.org/
Jenkins的官网下载https://jenkins.io
step.2
将Jenkins.war放到 其解压后的webapps的目录下
step.3
解压后的tomcat的bin目录下 点击startup.bat 启动tomcat (shutdown.bat 停止tomcat)
step.4
打开本地浏览器
http://localhost:8080/jenkins/
然后注册用户名密码。
这时候会出现 一个文件夹路径 拷贝到C盘 打开此文件夹 ,会出现数字密码。将其复制到 下面密码框即可。
step.5 插件配置
进入系统管理--》插件管理界面
可选插件 安装如下插件,这些插件之后会用到。 点击下载后在安装。下载成功后。关闭tomcat 在打开。在访问genkins 同上面step3 和step4. 在次进入 已安装即可查看到。
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
13.Pipeline: Basic Steps
14.Pipeline: Build Step
15.Pipeline: Input Step
16.Pipeline: Nodes and Processes
17.Pipeline: Stage Step
18.Scriptler
19.Workspace Cleanup Plugin
20.Post-Build Script Plug-in
21.Email Extension Plugin
22.SSH Slaves plugin
23.Timestamper
使用git安装如下
9.Git plugin
10.GIT server Plugin
11.Gradle Plugin
12.Git Parameter Plug-In
如果你使用的SVN 还需要安装
Subversion Plug-in
Subversion Release Manager plugin
step.6 设置全局属性
系统管理--》进入设置全局属性
点击environment variables 选项 配置 SDK
ANDROID_HOME
xx\sdk -----SDK 具体路径 (studio 引用的sdk绝对路径)
step.7 设置重点属性(理解就是在本地的名称 和其绝对路径)
系统管理--》进入Global Tool Configuration
JDK 模块:
name:jdk_1.8
home :复制jdk 在本地文件夹的绝对路径 xxx/jdk_1.8
gradle模块:
注:引用 android studio 安装板或解压版 对应目录下的 gradle 即可
name:gradle-2.14.1
home:复制jdk 在本地文件夹的绝对路径 xxx/gradle/gradle-2.14.1
git模块也一样 使用svn 此模块就默认就好。
step.8 新建任务
点击新建任务
输入名称
Jenkins-》新建-》构建一个自由风格的软件项目-》
点击ok即可
step.9 配置项目
1. 自定义动态参数配置
这边对应设置gradle.properties文件 ,给build.gradle动态赋值 管理
找到参数化构建过程选项→打勾
选项参数使用 Choice 理解为下拉框多选
字符输入参数使用 String Parameter 理解为一个字符串参数
时间参数使用 Dynamic Parameter 理解为一个计算的js脚本
在添加参数时,配置Name的值必须与.properties文件中定义的参数名称相同。
2. SVN 同步源码配置
源码管理:选择具体的版本控制软件,并填写项目URL,如本人为svn,只需在Repository URL填具体项目svn地址,其它为默认。
会自动将svn代码下到jenkins 的workspace 目录下
C:\Users\...\.jenkins\workspace
3. 设置项目名
进入项目配置找到→构建环境→勾选Set build Name 设置参数
注意和上面配置参数名一致如我们使用了BUILD_NUMBER 自带参数,以及 APPNAME、APP_VERSION、BUILD_TYPE
${BUILD_NUMBER}${APP_VERSION}
4. gradle 配置
注意和上面配置参数一致
这边对应设置gradle.properties文件 ,给build.gradle动态赋值 管理
找到上面我们使用Gradle 插件的 Invoke Gradle script
修改tasks命令,应用上面的参数,并勾选Pass job parameters as Gradle properties选项。
选择 gradle 上面配置的名称
task:clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}
pass job parameters as gradle propertiers checbox 打钩
PRODUCT_FLAVORS和BUILD_TYPE即我们上面配置的参数,务必保持一致。
点击保存,回到项目首页。
就可以看到,原先的立即构建已经变成了Build with Parameter
点击参数构建,就可以看到如下上面我们配置的参数。
等待构建完成,前往在.Gradle文件中配置的路径中即可找到我们配置的命名apk。
step.10 构建项目
立即构建----》Build with Parameter
step.11 控制台查看log
step.12 APK编译到指定路径
step.13 source 对应
gradle..properties文件
APP_VERSION=2.4.0
APP_VERSION_CODE=2
IS_JENKINS=false
BUILD_TYPE=debug
PRODUCT_FLAVORS=internal
BUILD_PATH_JENKINS=E\:\\AA
BUILD_PATH_LOCAL=D:\\BB\\CC
BUILD_TIME=1970-1-1
APPNAME=JKApp
build.gradle 文件
productFlavors {
// Because Android Meta-data does not support getLong method, NOTIFICATION_PROJECT_NUMBER
// is prefixed with 'L'('L' will be trimed when be used.
internal {
manifestPlaceholders = [BASE_URL: "http://",
HOST: "133.",
PORT: "",
HTTP: "http://",
API_VERSION: "api2",
CONTENT_REFERER_HTML: "http:"]
if("true".equals(IS_JENKINS)){
versionName = "J" + BUILD_TIME+"_internal_api2"
}else{
versionName = "F" + getDate()+"_internal_api2"
}
}
open {
manifestPlaceholders = [BASE_URL: "https:/",
HOST: "pf",
PORT: "",
HTTP: "https://",
API_VERSION: "api",
CONTENT_REFERER_HTML: "https:"]
if("true".equals(IS_JENKINS)){
versionName = "J" + BUILD_TIME+"_public"
}else{
versionName = "F" + getDate()+"_public"
}
}
myTest {
manifestPlaceholders = [BASE_URL: "http:",
HOST: "192.7",
PORT: "8383",
HTTP: "http://",
API_VERSION: "api2",
CONTENT_REFERER_HTML: "http:/"]
if("true".equals(IS_JENKINS)){
versionName = "J" + BUILD_TIME+"_test"
}else{
versionName = "F" + getDate()+"_test"
}
}
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
// buildOutputDir,
"${variant.versionName}.apk")
}
}
AndroidManifest.xml 文件
android:value="${BASE_URL}"/>
android:value="${HOST}"/>
android:value="${PORT}"/>
android:value="${HTTP}"/>
android:value="${API_VERSION}"/>
Application 文件
@Override
public void onCreate() {
super.onCreate();
instance = this;
readMetaDataFromApplication();
}
private voidreadMetaDataFromApplication() {
try{
ApplicationInfo appInfo =this.getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String BASE_URL = appInfo.metaData.getString("BASE_URL");
String HOST = appInfo.metaData.getString("HOST");
String PORT = appInfo.metaData.getString("PORT");
String HTTP = appInfo.metaData.getString("HTTP");
String API_VERSION = appInfo.metaData.getString("API_VERSION");
String CONTENT_REFERER_HTML = appInfo.metaData.getString("CONTENT_REFERER_HTML");
Constants.BASE_URL= BASE_URL;
Constants.HOST= HOST;
Constants.PORT= PORT;
Constants.HTTP= HTTP;
Constants.API_VERSION= API_VERSION;
Constants.CONTENT_REFERER_HTML= CONTENT_REFERER_HTML;
}catch(PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
本文源码链接下载:
http://download.csdn.net/detail/jxmy_1989/9756479
GIT 及证书签名请 参考以下链接:
http://www.jianshu.com/p/915c1ae69144
http://www.open-open.com/lib/view/open1482371829772.html