Android自动打包-通过Jenkins

安装Jenkins:

从Jenkins官网下载安装包或war包。

Android自动打包-通过Jenkins_第1张图片

通过安装包安装

正常安装后,通过浏览器访问http://localhots:8080即可

通过war包安装

修改安装路径

jenkins默认安装在c盘 C:\Users\Administrator.jenkins下

新建一个系统变量:JENKINS_HOME,值为D:\jenkins,或者其他目录。再将此路径添加至Path里。

Android自动打包-通过Jenkins_第2张图片
image

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 这个插件。

Android自动打包-通过Jenkins_第3张图片

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可以配置多个,兼容不同编译版本。)

    Android自动打包-通过Jenkins_第4张图片

打包配置

主界面->新建->构建一个自由风格的项目->ok,进入到新建项目后,填写名称及说明。

  • 选择→源码管理
    Android自动打包-通过Jenkins_第5张图片
  • 选择→构建插件,我们准备的是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对应参数配置

找到 参数化构建过程选项→打勾

Android自动打包-通过Jenkins_第6张图片

选择→添加参数

  • 选项参数使用 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
Android自动打包-通过Jenkins_第7张图片

Android自动打包-通过Jenkins_第8张图片

Android自动打包-通过Jenkins_第9张图片

Android自动打包-通过Jenkins_第10张图片

Android自动打包-通过Jenkins_第11张图片

Android自动打包-通过Jenkins_第12张图片

将需要的参数按类别添加即可。

参数引用

找到上面我们使用Gradle 插件的 Invoke Gradle script
修改tasks命令clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug,应用上面的参数。(PRODUCT_FLAVORSBUILD_TYPE即我们上面配置的参数,务必保持一致)
并勾选Pass job parameters as Gradle properties选项。如下图。

Android自动打包-通过Jenkins_第13张图片

点击保存,回到项目首页。
就可以看到,原先的 立即构建已经变成了 Build with Parameter
点击参数构建,就可以看到如下上面我们配置的参数。
等待构建完成,前往在.Gradle文件中配置的路径中即可找到我们配置的命名apk。

修改构建名称

原命名只是构建编号,无辨识度


进入项目配置找到→构建环境→勾选Set build Name 设置参数


Android自动打包-通过Jenkins_第14张图片

重新打包,如上图我们使用了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
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

你可能感兴趣的:(Android自动打包-通过Jenkins)