Android自动打包-通过Jenkins

来源:互联网 发布:java中的迭代器是什么 编辑:程序博客网 时间:2024/06/08 06:51

安装Jenkins:

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

通过安装包安装

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

通过war包安装

修改安装路径

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

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

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 Pluginbuild timeout pluginbuild-name-setterCredentials Binding Plugindescription setter pluginDynamic Parameter Plug-inEnvironment Injector Plugin    Subversion Plug-inSubversion Release Manager pluginGIT server PluginGradle PluginGit Parameter Plug-InPipeline: Basic StepsPipeline: Build StepPipeline: Input StepPipeline: Nodes and ProcessesPipeline: Stage StepScriptlerWorkspace Cleanup PluginPost-Build Script Plug-inEmail Extension PluginSSH Slaves pluginTimestamper

手动下载插件

有些插件从可选插件中找不到,可以手动下载安装:http://mirror.xmission.com/jenkins/plugins/
PS:安装Dynamic Parameter Plug-in要先手动安装 Scriptler Plugin 这个插件,然后在手动安装 Dynamic Parameter 这个插件。

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

打包配置

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

  • 选择→源码管理
  • 选择→构建插件,我们准备的是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.1IS_JENKINS = falseBUILD_TYPE = debugPRODUCT_FLAVORS = xiaomiALIAS_PASSWORD = androidSTORE_PASSWORD = androidBUILD_PATH_JENKINS = E\:\\JenkinsApkBUILD_PATH_LOCAL = D:\\AS_PROJECT\\TestJenkinsBUILD_TIME= 1970-1-1APPNAME = 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对应参数配置

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



选择→添加参数

  • 选项参数使用 Choice

  • 字符输入参数使用 String Parameter

  • 时间参数使用 Dynamic Parameter

    在添加参数时,配置Name的值必须与.properties文件中定义的参数名称相同
    我们需要用到的仅这三个,具体输入如下图。

参数类型参数名值ChoiceAPP_VERSION1.0.1
1.0.2
1.0.3 PRODUCT_FLAVORSxiaomi
wandoujia BUILD_TYPErelease
debug IS_JENKINStrueDynamicBUILD_TIMEreturn new Date().format('yyyyMMdd-HHmm')StringAPPNAME

JKApp



    

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

参数引用

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


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

修改构建名称

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


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



重新打包,如上图我们使用了BUILD_NUMBER 自带参数,以及 APPNAME、APP_VERSION、BUILD_TYPE ,最后效果如下图。



二、生成二维码

RT:生成二维码还没实践过……


相关知识

Jenkins提供的全局变量

全局变量解释BRANCH_NAME项目分支名称CHANGE_AUTHOR修改项目的作者BUILD_NUMBER构建的序列号JOB_NAME构建的项目名称WORKSPACE服务器构建项目的位置JENKINS_HOMEjenkins的根目录GIT_COMMITTER_EMAILGit提交作者的邮箱

这些变量可以在写脚本,包括gradle脚本以及python脚本的时候可以调用,我们也可以自己通过插件来配置一些变量,用来进行构建不同的渠道包,下面选取了一些常用的:

全局变量解释BRANCH_NAME项目分支名称CHANGE_AUTHOR修改项目的作者BUILD_NUMBER构建的序列号JOB_NAME构建的项目名称WORKSPACE服务器构建项目的位置JENKINS_HOMEjenkins的根目录GIT_COMMITTER_EMAILGit提交作者的邮箱

Jenkins登陆无效解决方案

当关掉jenkins的网页,再重新打开的时候,会让你重新登录,但是当你输入正确的用户名跟密码的时候,却会提示你登陆无效,解决方案如下:

1.找到安装目录下的config文件
2.找到useSecurity节点,将true改为false
<useSecurity>false</useSecurity>
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