澳门新葡萄京官网首页 40

Jenkins实现Android自动化打包

Jenkins简介

Jenkins是一个开源软件项目,旨在提供多个绽开易用的软件平台,使软件的不停集成产生也许。这段时间超越二分之一集团都在采纳Jenkins来不断创设。

转发请表明出处:
正文来源【赵彦军的博客】

Jenkins下载与安装配备

1、Tomcat

进入 官方网站,下载最新的 tomcat
安装包并且安装。

安装落成后,运行 tomcat 后,在浏览器中输入 ,
假设见到下边包车型大巴分界面,那么tomcat 就安装配置好了。

澳门新葡萄京官网首页 1

Jenkins下载

设置Jenkins有二种办法:

先是种就是下载安装包直接设置,下载地址:http://mirrors.jenkins-ci.org

澳门新葡萄京官网首页,其次种便是下载war包,放到汤姆cat中运转。war包下载地址:http://mirrors.jenkins-ci.org/war/,
或者

此处因为自身计算机下面早先装了汤姆cat,所以自身动用直接下载war包的秘诀打开设置。

2、Jenkins 部署到 Tomcat

进入jenkins 的官网 , 依据你搭建平台的不一样,下载
jenkins war 包 ,大家那边用 windows 平台做示范。

澳门新葡萄京官网首页 2

war 包如下图所示

澳门新葡萄京官网首页 3

把 war 包放在 tomcat 的 webapps 目录下,如下图所示:

澳门新葡萄京官网首页 4

然后在浏览器中做客 : ,
你将拜谒到如下界面 , 代表 Jenkins 已经陈设到位了,下一步安装 Jenkins.

澳门新葡萄京官网首页 5

Jenkins安装

将下载的jenkins.war放到汤姆cat下的webapps目录下,然后运维汤姆cat。在浏览器中访谈”汤姆cat访问地址/jenkins”就可以安装,因为本人的汤姆cat装在本机,而且端口为8080,所以访谈

3、填写 Jenkins 一级管理员密码

在上图的输入框内要输入一流管理员权限的密码,那一个
密码在浅暗绛红路径的文书里 ,输入密码后,点击 continue , 如下图所示:

澳门新葡萄京官网首页 6

Jenkins配置

Jenkins安装之后能够扩充客户的权杖设置、插件的设置等布署。

客商权限设置

系统管理–>Configure Global Security

如下图所示,在那地能够拉长、删除客商以至安插顾客权限。

澳门新葡萄京官网首页 7

插件安装

搭建Android自动化打包情况急需设置Gradle插件,若是利用Git还亟需Git的插件,安装Jenkins时暗中同意已经设置了那三个插件。若无安装能够进来“系统一管理理>管理插件”实行插件的设置。

澳门新葡萄京官网首页 8

4、Jenkins 插件安装和特等管理员配置

填写完密码后,将会看见插件安装分界面

澳门新葡萄京官网首页 9

我们选用第一项,安装暗中认可Jenkins插件。安装插件进程如下图所示:

澳门新葡萄京官网首页 10

等全体的插件都安装完毕,大家将会看出客商名设置界面。

澳门新葡萄京官网首页 11

其一分界面你有五个接纳能够操作,

  • 筛选一:直接点击 Continue as Admin 安装,暗中同意这时的特等管理员为
    admin .

  • 筛选二:输入客商名,密码,确认密码,全名,电子邮件地址。然后点击
    Save and Finish . 注意你输入的客商名正是 Jenkins
    的特级管理员。须求在意的是,下面的每一种都亟需填写,不然点击 Save
    and Finish 开关一点意义都没有。

等方面包车型大巴步子都操作甘休,你将拜看见如下分界面,代表 Jenkins
的插件安装和特等助理馆员已经安插好了。

澳门新葡萄京官网首页 12

创建Jenkins任务

要想Jenkins能够帮大家自行营造项目,大家要求创建二个任务,并且配备那个职务要它帮我们举行什么样操作,以致哪些时候实践等。

澳门新葡萄京官网首页 13

如上航海用教室所示,点击“新建”按键何况选取“创设一个私自风格的软件项目”,完了之后会进去到职务的安插分界面,配置好之后职责会不由自主在如上海教室左边的职分列表中。

5、成立职分

澳门新葡萄京官网首页 14

点击创设三个新的天职,如下图所示:

澳门新葡萄京官网首页 15

义务布置

创办三个职务之后,会活动跳转到职分的配置分界面前碰着该职分扩充示公布署,大约包含如下配置:

源码管理

澳门新葡萄京官网首页 16

构建项目,当然得有代码了。Jenkins帮忙选用版本调控工具来拓展源码处理,比如Git恐怕SVN。这里小编动用的是Git,项目利用的是本身的github上边的多个多门路打包的demo。在Repository
U奥迪Q7L中输入项目地址,点击Add按键增多认证消息,然后选用营造的分段,作者那边运用的是master分支。

创设触发器

澳门新葡萄京官网首页 17

Jenkins帮助上海教室所示的触发机缘配置,假使都不选,则为手动营造,须要点击“马上营造”按键才创设。

Build periodically:周期进行项目创设(它不关怀源码是否爆发变化);
Build when a change is pushed to
GItHub:表示假设GitHub上边源码一更新即开展零器件;
Poll
SCM:按期检查源码更换(依据SCM软件的版本号),如果有修正就checkout最新code下来,然后试行创设动作。

Build periodically和Poll
SCM都接济日程表的装置,这些与Spring框架中反应计时器的日程表配置相仿,有5个参数:

第叁个参数代表的是分钟 minute,取值 0~59;
其次个参数代表的是时辰 hour,取值 0~23;
其多个参数代表的是天 day,取值 1~31;
第2个参数代表的是月 month,取值 1~12;
最后三个参数代表的是星期 week,取值 0~7,0 和 7 都是象征星期六。

如:

选取Build periodically并设置日程表为“0
”,则代表每日清晨4点创设三次源码。
筛选Poll
SCM并设置日程表为“
/10 ”,则意味着每10分钟检查三回源码变化,要是有改正才开展构建。

构建筑工程具

因为明天Android项目默许都以接收Gradle来进展营造的,所以在营造中自己选择的是Invoke
Gradle script。当然你也得以选用此外的塑造筑工程具,举例Ant。

挑选Invoke Gradle script之后方可选Invoke Gradle和Use Gradle
Wrapper,选拔Invoke
Gradle正是调用本地安装配置好的Gradle,那时供给内定Gradle路线。为了方便具有开荒者同意Gradle版本,日常都施用Gradle
Wrapper。关于Gradle和Gradlew的分别能够看那篇随笔https://www.zybuluo.com/xtccc/note/275168。

澳门新葡萄京官网首页 18

Tasks中填上急需试行的gradle的task。上边小编填的clean
assembleRelease,即举办gradlew clean assembleRelease。

创设后的操作

配备创设后的操作能够让Jenkins在营造完事后实行什么样操作,比方邮件布告、营造其余品类等。

澳门新葡萄京官网首页 19

这里自身布置了Archive the
artifacts,在“用于存档的文书”中填入供给存档的文书名,能够动用通配符。比方上边作者安插了app/build/outputs/apk/v*.apk,表示疑v开端的apk文件都存档。营造完事后在义务首页可以下载存档的文件。

任务安插达成未来,点击义务首页的“立刻营造”开关,就能够开始创设,构建进度首先会将源码下载下来,坐落于jenkins目录下的workspace中。然后实践配置好的gradle命令,即使接纳gradlew,第2回应该会下载gradlew设置的版本的gradle,末了施行营造任务。创设完事后,如下图,能够见到存档的文件,点击就可以下载。

澳门新葡萄京官网首页 20

6、项目货仓配置

澳门新葡萄京官网首页 21

1、选取源码管理工科具,Git 可能 Subversion . 上边大家的示范选用 Git.
2、填写 Git 仓库地址
3、接受 Git 证书凭证, 若无开创过申明,展现 none , 能够点击左边的 Add
开关增添三个证书凭证。
4、增多证书凭证,增加的点子详见下边包车型客车图。
5、接纳 Git 饭馆的道岔
6、源码浏览器,Git 有过多微型机,大家那边接纳自行就好了。

  • 加多证书

从 Git 上拉替代码,有二种艺术:顾客名+密码、SSH . 依照自身的急需采纳。

澳门新葡萄京官网首页 22

填写 Git 客栈的客商名和密码

澳门新葡萄京官网首页 23

附:Android工程build.gradle文件

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.lauren.multichanneldemo"
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    signingConfigs {
        release {
            def liulingStoreFile = System.getenv("LIULING_STORE_FILE")
            def liulingKeyAlias = System.getenv("LIULING_KEY_ALIAS")
            def liulingKeyPassword = System.getenv("LIULING_KEY_PASSWORD")
            def liulingStorePassword = System.getenv("LIULING_STORE_PASSWORD")
            def isSigning = (liulingStoreFile != null) && (liulingKeyAlias != null) && (liulingKeyPassword != null) && (liulingStorePassword != null)
            if(isSigning){
                storeFile file(liulingStoreFile)
                keyAlias liulingKeyAlias
                keyPassword liulingKeyPassword
                storePassword liulingStorePassword
            } else {
                storeFile file("debug.keystore")
                keyAlias "AndroidDebugKey"
                keyPassword "android"
                storePassword "android"
            }
        }
        debug {
            storeFile file("debug.keystore")
            keyAlias "AndroidDebugKey"
            keyPassword "android"
            storePassword "android"
        }
    }

    buildTypes {
        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //启用混淆代码的功能
            minifyEnabled true
            //压缩对齐生成的apk包
            zipAlignEnabled true
            //指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            shrinkResources true
            signingConfig signingConfigs.release //打包命令行:gradlew assembleRelease
        }

        debug {
            signingConfig signingConfigs.debug
        }
    }

    lintOptions {
        abortOnError false
    }

//    productFlavors {
//        _91 {
//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "91"]
//        }
//        wandoujia {
//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "wandoujia"]
//        }
//        xiaomi {
//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "xiaomi"]
//        }
//
//        _360shoufa{
//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "360shoufa"]
//        }
//        anzhi{
//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "anzhi"]
//        }
//        baidushoufa{
//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "baidushoufa"]
//        }
//        huaweishoufa{
//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "huaweishoufa"]
//        }
//    }

    // 如果嫌上面写法麻烦,也可以这样简写,加上一个批量处理即可.
    productFlavors {
        _91 {}
        wandoujia {}
        xiaomi {}
        _360shoufa{}
        anzhi{}
        baidushoufa{}
        huaweishoufa{}
    }
    //批量处理
    productFlavors.all {
        flavor ->
            def channel = name.startsWith("_") ? name.substring(1) : name
            flavor.manifestPlaceholders = [MTA_CHANNEL_VALUE: channel]
    }

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (variant.buildType.name.equals('release')) {
                //可自定义自己想要生成的格式
                def channel = variant.productFlavors[0].name.startsWith("_") ? variant.productFlavors[0].name.substring(1) : variant.productFlavors[0].name
                def fileName = "v${defaultConfig.versionName}_${releaseTime()}_${channel}.apk"
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }
    apply from: 'productFlavors.gradle'

}

def releaseTime() {
    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}

7、Jenkins 全局配置

JDK 和 Gradle 配置

出于Android 是依照 java 的,大家须求配置 JDK;由于大家用 Gradle
构建Android 项目,大家供给安装 Gradle 的碰到 。

在 系统处理 –> Global Tool Configuration

澳门新葡萄京官网首页 24

Android SDK 配置

系统管理 –> 系统装置 — 全局属性

在 Environment variables 里面扩充二个键值对.
键:ANDROID_HOME
值:SDK 路径

澳门新葡萄京官网首页 25

8、成立 Jenkins 塑造职分

澳门新葡萄京官网首页 26

1、代表安排的档期的顺序
2、营造立模型块
3、选拔 Gradle
创设筑工程具的本子号,能够选择默许塑造版本号,也得以选择本人自定的版本号。
4、填写 Gradle 营造职分

  • 打 release 包

    app:clean     
    app:assembleRelease
    

解释:

app:clean : 清除....../app目录下的build文件夹
app:assembleRelease : 编译并打Release的包
  • 打 debug 包

app:clean     
app:assembleDebug

解释:

app:clean : 清除....../app目录下的build文件夹
app:assembleDebug: 编译并打Debug的包
  • 同时打 debug 包和 release 包

app:clean
app:assembleDebug 
app:assembleRelease

9、实施创设职分

点击即刻营造按键,在那在此以前施行创设职务。

澳门新葡萄京官网首页 27

- 【1】、点击立即构建,开始执行构建任务
- 【2】、进度条,表示正在构建的项目。
- 【3】、蓝色的图标表示构建成功
- 【4】、红色的图标表示构建失败

动图演示如下图所示:

澳门新葡萄京官网首页 28

点击正在营造的条约,能够进去正在创设的新闻。

澳门新葡萄京官网首页 29

  • 情状集:创设人顾客名、创设git 节点

  • 改动记录:

  • Console
    Output:创设进程中的输出调控台,会输出创设进度中的详细消息,这么些意义很要紧,若是塑造失败,能够从那边找到错误的缘故。

  • 编辑编写翻译音信:每一次营造职分的时候,构建名字是数字格局叠合,这里能够自定义构建职分的名字。

  • Git Build Data:此番营造 Git 货仓的相干音信。

10、营造结果

在 Console Output 面板中,出现了 BUILD SUCCESSFUL , 代表职务创设设成功。

澳门新葡萄京官网首页 30

11、创设后操作

fir
是我国提供测验应用极速公布,应用崩溃实时解析、顾客反馈搜集等一文山会海开荒测量检验成效工具服务,协理开垦者将愈来愈多精力放在产物的开销与应用的优化上。

官网:

登陆后,在 fir 官方网站的个人资料中, 能够找到 API Token , 这几个 token
我们在后头会用到。

澳门新葡萄京官网首页 31

fir.im Jenkins 插件使用方法:

下载插件

Jenkins 营造产生后,生成的 apk 文件,我们通过插件的章程上流传 fir .
通过地点的连年,大家下载 Jenkins 的 fir 插件到地点。

澳门新葡萄京官网首页 32

安装插件

系统管理 –> 插件管理 –> 高等 –> 上传插件

澳门新葡萄京官网首页 33

应用插件

布置 –> 创设后操作 –> 扩展营造后操作步骤 –> Upload to fir.im

澳门新葡萄京官网首页 34

填写 API Token

澳门新葡萄京官网首页 35

构建结果

澳门新葡萄京官网首页 36

通过日记看到上传 fir 成功。

总结

到此处关于 Jenkins
的自动化打包的显要内容已经介绍完了。上面将会介绍一些附加的操作,能够越来越好的行使
Jenkins .

12、营造触发器

在上边部分我们提倡构建的通令是点击 随时创设 的开关,Jenkins
里面有营造触发器的秘籍,提供远程创设职责。

澳门新葡萄京官网首页 37

  • 1、触发远程创设(例如,使用脚本卡塔尔:填入身份验证令牌,能够随意填写,大家这里填入 123456
    , 填写实现后,在输入框的江湖有提示

Use the following URL to trigger build remotely: JENKINS_URL/job/AppTest/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
Optionally append &cause=Cause+Text to provide text that will be included in the recorded build cause.

基于提醒,大家自浏览器中寻访地址:
http://127.0.0.1:9999/jenkins/job/AppTest/build?token=123456
这样就足以触发塑造任务。

  • 2、Build after other projects are built :
    在其它职责完成后,开首这一次营造义务。

以身作则:在 AppTest1 项目构建产生功后,开端此番塑造职分。

澳门新葡萄京官网首页 38

①Trigger only if build is stable:其他类型营造设成功
②Trigger even if the build is unstable:别的品种不安宁
③Trigger even if the build fails:其余连串营造退步

  • Build periodically:周期进行创设(它不关怀源码是或不是爆发变化)

日程表:

H 2  * * *  //每天凌晨2天构建

H 16  * * *   //每天下午4点构建,16 代表下午4点

0 16 15 * *  //每个月15号下午4点构建,15代表天,16代表下午4点,0代表0分钟

H 6,12,18 * * *  //每天的 6时,12时,下午6时构建

15,30,45 * * * * //每个小时 15分,30分,45分 发起构建

* * * 1,3,5,7,9 * //每年的1, 3,5,7,9 月发起构建

示例:

澳门新葡萄京官网首页 39

注意

1、在日程表中,# 能够代表注释,可是急需单独写一行。

2、官方日程表语法:

3、日程表的语法字段据守cron的语法(略有不一样)。
具体来讲,每行由5个由TAB或空格分隔的字段组成:MINUTE HOUQashqai DAY MONTH WEEK

4、时间顺序和: MINUTE (0-59卡塔尔国, HOULX570 (0-23State of Qatar, DAY (1-31State of Qatar, MONTH (1-12卡塔尔国, DAY
OF THE WEEK (0-7卡塔尔国

任何的日程表:

30 08 * * 1-6  //周一至周六 早上08:30开始构建,最后一个字段是 WEEK ,1-6 代表周一到周五,0 代表周日

00 0,12 * * 0-5 //周日到周五,每天建成两次,中午12:00和午夜00:00

H 16 * * 1-5 //工作日 下午4点左右开始每天开始建设,构建时间 16:00 -16:59,具体的时间取决于项目哈希:
  • GitHub hook trigger for GITScm polling:hookplugin 检查测量试验到源码的 push
    操作触发营造 , 认为Poll SCM
    更有支持些,假诺提交频仍,则那么些触发就能够一再,看事情须要安装。

  • Poll SCM : 按时检查源码改动(依据SCM软件的版本号),假设有改善就
    checkout 最新code下来,然后施行营造动作。

日程表示例:

H/5 * * * *  //每5分钟检查一次

H/60 * * * * //每1个小时检查一次

H H/2 * * *  //每2个小时检查一次

H * H/10 * * //每10天检查一次

H * * H/3 *  //每3个月检查一次

H * * * 1  //每一周检查一次

示例:

澳门新葡萄京官网首页 40


个人Wechat号:zhaoyanjun125 , 接待关切
澳门新葡萄京官网首页 41

发表评论

电子邮件地址不会被公开。 必填项已用*标注