Jenkins-安卓项目打包

安卓项目开发,打包,需要分开不同阶段,不同人员进行负责,这里我尝试使用jenkins进行相关的控制和打包配置。

一、 列表内容

Jenkins安装

软件环境:

windows系统
jdk
android sdk
gradle

以上系统相关的安装方法和环境变量设置暂不详述。

到jenkins官网下载对应的最新版本windows安装包,装完就可以直接用http://localhost:8080访问
官网地址

安装成功后,进入首页,用管理员账号登录。

1.首先进入系统管理,插件管理,把需要的插件先装了:

这里写图片描述

需要安装的插件列表:
Branch API Plugin
build timeout plugin
build-name-setter
Credentials Binding Plugin
description setter plugin
Dynamic Parameter Plug-in
Environment Injector Plugin
fir-plugin(可选)
Git plugin(可选)
GIT server Plugin(可选)
Gradle Plugin
Pipeline: Basic Steps
Pipeline: Build Step
Pipeline: Input Step
Pipeline: Nodes and Processes
Pipeline: Stage Step
Post-Build Script Plug-in
SSH Slaves plugin
Subversion Release Manager plugin(可选)
Timestamper
Workspace Cleanup Plugin
Subversion Plug-in(可选)

2.打开主Module的build.gradle,该步坑比较多,主要是用于打包时候生成的包的类型控制,证书配置等信息,建议把对应的证书信息,存储在环境变量中,然后在jenkins中配置相关环境变量,如果不做修改,在每次编译过程中,还需要重新修改。

具体文件内容如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.0"

    defaultConfig {
        applicationId "com.test"
        minSdkVersion 14
        targetSdkVersion 15
        versionCode 28
        versionName "1.6.0.28"
    }
    signingConfigs {
        release {
        storeFile file("$System.env.KEYSTORE_PATH")
        storePassword "$System.env.STOREPASS"
        keyAlias "$System.env.ALIAS"
        keyPassword "$System.env.KEYPASS"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    repositories {
        flatDir {
            dirs 'libs' //this way we can find the .aar file in libs folder
        }
    }

    lintOptions {
        abortOnError false
        }

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile files('libs/EventBus-2.4.0.jar')
    compile files('libs/nineoldandroids-2.4.0.jar')
    compile(name: 'recyclerview-v7-22.2.0', ext: 'aar')
    compile files('libs/glide-3.7.0.jar')
    compile files('libs/okhttputils-2_3_9.jar')
    compile files('libs/okhttp-3.6.0.jar')
    compile files('libs/okio-1.10.0.jar')
    compile files('libs/pinyin4j-2.5.0.jar')
    compile files('libs/sqlcipher.jar')
    compile files('libs/commons-codec.jar')
    compile files('libs/guava-r09.jar')
    compile 'com.android.support:support-annotations:22.2.0'
    //    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.android.support:support-v4:23.0.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:design:22.2.0'
}

二、配置Jenkins参数
回到主界面->系统管理->Global Tool Configuration: 配置好JDK与Gradle。由于我本地已安装好JDK与Gradle所以只需为其指定路径即可。
这里写图片描述

另外,全局属性->Environment variables 增加各个相关需要的一些环境变量,可以被后续编译的程序中调用。

三、然后回到主界面->新建->构建一个自由风格的项目->ok:

1.勾选上参数化构建过程,先点击Choice可为其配置可选参数。我的项目需要配置的可选参数有API环境、打包渠道、是否来自Jenkins打包的标识。
这里写图片描述

2.点击String Parameter,让使用者可以自定义显示在App上的版本号,方便测试。可以再添加一个可输入的标签,最后把这个标签加到构建页的构建名称中。

这里写图片描述

3.点击Dynamic Parameter,注入Groovy脚本,主要是生成时间戳。
这里写图片描述

4.如果是SVN用户可选择List SubVersion tags,然后写地址帐号密码等,这个选项可以让你选择打包SVN上不同版本的代码。如果是Git用户可参照http://birdinroom.blog.51cto.com/7740375/1404930 上面的配置来拉取不同的版本。
这里写图片描述

5.勾选源码管理中自己所用的管理工具Git或者Subversion,填写好相关信息,当然我们的地址是动态的,所以需要引用上一步所选择的版本,如图。(如果是Linux后面得加上/,不然拉取的其目录下的内容不包含TAG_SVN这个目录)
这里写图片描述

6.在构建环境中勾选上Set Build Name,主要是动态生成每次显示在构建页上的名称方便查看。
这里写图片描述

7.Build periodically H 9 * * 1-6代表每周一至周六上午九点中的某一时间自动build一次。点击每一项后面的问号有详细说明可根据需求自行设置。
这里写图片描述

8.在构建栏里面选择Invoke Gradle Script->选择配置好的Gradle Version->在Tasks中输入Gradle命令(没了解过的建议先看下Gradle的基本命令),我们先执行一个clean,然后开始编译,这时候就可以用引用上面配置的一些参数了,这里可以用-P命令把参数传入,也可以更方便的把下面的Pass jod parameters as Gradle properties勾选上,其实内部也是用-Pkey=Value的命令->在Root Build script中动态指定你项目的目录,为什么是动态的呢?这是因为我们上面提供了可选版本的功能,所以拉取的每个版本所放目录是不一样的,想要编译相应的版本就得动态指定编译目录。
这里写图片描述

9.选择刚刚系统设置中的gradle版本,clean build代表每次都clean了再build。可自行配置命令行
这里写图片描述

10.构建后可能需要发邮件或者获得apk下载,如下,选择Archive the artifacts并填写apk路径。
这里写图片描述
选择该project job-》左边“状态”-》最后一次成功的构建结果,并点击下载apk。

注意事项:

1、参数传递的时候Jenkins里面的参数名称需要与build.gradle里面的一致,不然没什么卵用。如:这里写图片描述这里写图片描述

2、在服务器上的SDK最好与你本地的一致,不然指不定编译的时候会少东西。如果服务器的环境与你本地环境不同就不能直接copy过去了,最好的办法是下载一个服务器环境的SDKManager或者直接用Android Studio,然后对照你本地SDK里面的数据挨个下载,完了再copy到服务器。

3、local.properties中sdk.dir需设置成ANDROID_HOME路径,默认代码中最好删去该项,该项配置在环境变量中,动态获取

4、build.gradle的compileSdkVersion、buildToolsVersion需与ANDROID_HOME中的SDK一致

5、build.gradle脚本中可能需要加上lintOptions选项。该内容需要增加在主model的build.gradle中,并非根目录的文件中。

android{

lintOptions {
abortOnError false
}

}

参考1
参考2

展开阅读全文

没有更多推荐了,返回首页