文档章节

Jenkins+Gradle实现android开发持续集成、打包

菠萝
 菠萝
发布于 2013/08/28 15:19
字数 945
阅读 28699
收藏 37

Jenkins简介

    Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。Jenkins 的前身是Hudson是一个可扩展的持续集成引擎。

Jenkins安装与配置

    下载地址:http://mirrors.jenkins-ci.org/war/latest/jenkins.war将下载的jenkins.war包直接放到tomcat下的webapps目录,启动tomcat即可安装完成

    编码问题:进入jenkins系统管理页面,会出现如图提示,可修改tomcat的server.xml配置,在Connector  标签添加上 URIEncoding="UTF-8" 。    

    

    安全配置:如图

    

    首先的先添加一个administer用户作为超级管理员,全部权限都打勾,如图boluo用户。保存,重启。用刚刚添加的超级管理员作为帐号名注册一个帐号,即可拥有超级管理员权限。

    JDK、gradle如果系统环境变量设置的话就不用再设置,用默认的就行。

    邮件通知:系统管理>系统设置  如图

    


Jenkins gradle插件安装

    系统管理>管理插件>可选插件 选中Jenkins Gradle plugin插件安装重启即可。

    安装慢的话,可以把插件下载下来,手动上传插件或设置代理。如图

    


Jenkins新建任务

    点击新Job,输入任务名称选中构建一个自由风格的软件项目,点击OK,跳到配置页面

    源码管理:如图。

    

    Repository URL: svn 的 的地址,如果输入的地址需要输入用户名和密码,将自动跳出红色的提示信息,点击"enter credential" 进入设置svn 用户名

    构建触发器:如图

    

    Build periodically:周期进行项目构建(它不关心源码是否发生变化)    

    Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。

    这里我选Poll SCM,(H/5 H(9-23) * * *)

    第一个参数代表的是分钟 minute,取值 0~59;
    第二个参数代表的是小时 hour,取值 0~23;
    第三个参数代表的是天 day,取值 1~31;
    第四个参数代表的是月 month,取值 1~12;
    最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
    如H/5 * * * * 表示的就是每5分钟检查一次源码变化。

    构建:添加Invoke Gradle script,配置如图

    

    Switches :即gradle 后面所接的命令。上面相当于执行gradle clean build命令。

    构建后操作:构建失败可以发送邮件通知,如图

    

gradle 介绍

    Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具。现在已是android的默认构建工具了。

android build.gradle配置


buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.6'//依赖
    }
}

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')//添加android依赖libs
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"
	//签名
    signingConfigs {
        myConfig {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
    
    defaultConfig {
        versionCode 1
        versionName getVersionName()
        minSdkVersion 8
        targetSdkVersion 17
    }

    //渠道
    productFlavors {
        google{
        
        }
        tantai{
        
        }
    }
    
    buildTypes{
        release {
            signingConfig signingConfigs.myConfig
            runProguard true
            proguardFile 'proguard.cfg'
        }
    }
	
    sourceSets {
        main {
            manifest {
                srcFile 'AndroidManifest.xml'
            }
            java {
                srcDir 'src'
            }
            res {
                srcDir 'res'
            }
            assets {
                srcDir 'assets'
            }
            resources {
                srcDir 'src'
            }
            aidl {
                srcDir 'src'
            }
		}
	}
}


tasks.withType(Compile) {
    options.encoding = "UTF-8"
}
//替换AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串为渠道名称
android.applicationVariants.all{ variant -> 
    variant.processManifest.doLast{ 
        copy{
            from("${buildDir}/manifests"){
                include "${variant.dirName}/AndroidManifest.xml"
            }
            into("${buildDir}/manifests/$variant.name")

            filter{
                String line -> line.replaceAll("UMENG_CHANNEL_VALUE", "$variant.name")
            }

            variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml")
        }    
   }
}

遇到的问题:tomcat下gradle 构建如果遇到Could not load Logmanager "org.apache.juli.ClassLoaderLogManager"

解决:注释掉catalina.bat里面的set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%即可

© 著作权归作者所有

共有 人打赏支持
菠萝
粉丝 7
博文 7
码字总数 1398
作品 0
广州
程序员
加载中

评论(14)

haizhiyun
haizhiyun
如果手动触发远程构建怎么写脚本?谢谢
p
patrickhe

引用来自“donhui”的评论

gradle Switches与gradle tasks有什么区别呢?
switch 就是 option,例如 --offline。 task 是要执行的任务,例如 build, distTar。
p
patrickhe

引用来自“donhui”的评论

gradle Switches与gradle tasks有什么区别呢?
switch 就是 option,例如 --offline。 task 是要执行的任务,例如 build, distTar。
KnightOneAdmin
KnightOneAdmin
公司就是用这个的,但没弄明原理。
donhui
donhui
gradle Switches与gradle tasks有什么区别呢?
菠萝
菠萝

引用来自“song314”的评论

不需要配置android的SDK,JDK,那些东西吗?

我按照楼主的方法做了,但是一直build失败,只是把source code给下载下来了。

引用来自“菠萝”的评论

需要配置

引用来自“song314”的评论

我用的是mac,没有搞过,但是我给的是绝对路径呀
看下是不是没有权限 http://blog.sina.com.cn/s/blog_be735f850101k0do.html 解决不了的话,我也不知道是什么问题了
song314
song314

引用来自“song314”的评论

不需要配置android的SDK,JDK,那些东西吗?

我按照楼主的方法做了,但是一直build失败,只是把source code给下载下来了。

引用来自“菠萝”的评论

需要配置
我用的是mac,没有搞过,但是我给的是绝对路径呀
song314
song314
能麻烦发一下你的配置页面的截图吗,我始终搞不定。http://static.oschina.net/uploads/space/2014/0428/112941_gAxG_46820.png
菠萝
菠萝

引用来自“song314”的评论

不需要配置android的SDK,JDK,那些东西吗?

我按照楼主的方法做了,但是一直build失败,只是把source code给下载下来了。
需要配置
song314
song314
不需要配置android的SDK,JDK,那些东西吗?

我按照楼主的方法做了,但是一直build失败,只是把source code给下载下来了。
React Native 【学习总结】-【Jenkins集成】

简述 Jenkins是一个持续集成工具,它本身有很丰富的插件提供使用,方便持续集成,为开发省时省力,下面是项目中对新的RN项目做的持续集成例子,通过该例子学会如何使用jenkins。 Jenkins安装...

Pape
05/18
0
0
Flutter新锐专家之路:工程研发体系篇

作者:闲鱼技术-正物 写在前面 当前,闲鱼客户端已经实现了基于Flutter的商品详情页的全量重构,线上效果良好。从alpha一路走来,我们遇到了很多问题,或基于原理,或透过社区,或与官方合作...

闲鱼技术
08/06
0
0
html5+ & mui框架facebook登录插件(android版)

贴出源码回报社区! 下面贴出关键代码,稍后完善更多细节步骤。个人android开发经验不多,如果有更好的集成方式,请大家分享! 前提: 1. 能在android stuido成功运行官方给出的android SDK...

coton_chen
06/27
0
0
【必看】Android干货整理

哗啦啦,为方便大家更好的学习交流,小编特地整理了一大波干货!预备 前方高能预警,一大波干货袭来,接住了!!!!!!!!!!!! 如果你是零基础小白,不知如何上手Android开发,不知应学习哪些工具...

慕课网官方_运营中心
08/01
0
0
java或android使用web3j开发以太坊智能合约的快速入门教程

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁
06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
47分钟前
1
0
Jenkins使用

clean install -Dmaven.test.skip=true

1713716445
57分钟前
0
0
多线程

1. 多线程概念。并发和并行的概念。 多线程指的是一段时间内cpu同时执行多个线程。一个程序至少运行>=1个进程,进程就是运行中的程序,而一个进程至少运行>=1个线程,线程是操作系统能调度的...

鱼想吃肉
今天
2
0
HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
今天
3
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部