Centos上使用Jenkins配合Gradle进行Android APK构建和分发

Centos上使用Jenkins配合Gradle进行Android APK构建和分发

很多时候,测试人员和后台人员需要我们将各个环境APK包发给他们进行测试和调试,但是呢,我们不是时时都能响应他们的需求。此篇博客的目的就是为了解决这种情况,将复杂麻烦的打包简单化,让每个人都能轻松的打出各个环境,各个版本的包。

一 工具安装

JDK安装

Jdk的安装非常重要,Jenkins的安装和Android打包都需要用到。检查是否安装Jdk:java -version,如果已经安装,跳过此步骤。

  1. 在官网下载Jdk文件:jdk-8u131-linux-x64.tar.gz,使用Xftp上传至 /usr/local 目录
  2. 使用XShell 打开 /usr/local 目录,执行解压命令 tar -zxvf jdk-8u131-linux-x64.tar.gz
  3. 使用Xftp打开 /etc/profile 文件,在profile文件最下方追加代码:
    JAVA_HOME=/usr/local/jdk1.8.0_131
    JRE_HOME=/usr/local/jdk1.8.0_131/jre
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME
    export JAVA_HOME
    export JRE_HOME
    export PATH
    然后保存。
  4. java -version 检查是否安装成功

Jenkins 安装

  1. 下载源
    wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
    rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

  2. yum安装
    yum install jenkins

  3. 配置Jenkins的Java运行环境
    使用 Xftp打开 /etc/init.d/jenkins 找到/usr/bin/java那一行,在底下加入如下代码:/usr/local/jdk1.8.0_131/bin/java

  4. 修改端口
    Jenkins的默认端口为8080,而Tomcat的默认端口也是8080,所以我们需要修改Jenkins的端口,使用 Xftp打开 /etc/sysconfig/jenkins 文件,找到 JENKINS_PORT=“8080” 修改为 JENKINS_PORT=“9000”。

  5. 启动Jenkisn
    service jenkins start

  6. 测试Jenkins
    在浏览器中输入:服务器地址+:9000/,会出现Jenkins的初始页面。

  7. 修改Jenkins工作空间参考
    https://blog.csdn.net/u014221090/article/details/80566434

Android SDK 安装

  1. 下载sdk-tools-linux-4333796.zip
    用Xshell打开你想存放sdk的目录,执行代码:wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
  2. 解压sdk-tools-linux-4333796.zip
    在上个步骤的目录,执行代码:unzip sdk-tools-linux-4333796.zip
  3. 配置android环境变量
    使用 Xftp打开 /etc/profile 文件,在最后添加代码:
    export ANDROID_HOME="sdk路径"
    export ATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH" 然后保存。
  4. 查看已安装工具和可安装工具
    在tools bin 目录下 执行代码:sdkmanager --list
  5. 使用sdkmanager相关命令安装build-tools, platforms, build-tools
    执行代码:sdkmanager "platforms;android-25" "build-tools;25.0.2" 其他版本类似。

Git安装

  1. 查看是否安装git,执行代码:git --version
  2. 出现git版本信息,执行代码:whereis git,查看安装目录
  3. 未出现git版本信息,执行命令: yum install git
  4. 执行命令:git --version 查看是否安装成功
  5. 执行命令: whereis git 查看安装目录

Gradle安装

  1. 下载你想要的Gradle版本代替4.1
    用Xshell打开你想存放Gradle的目录,执行命令:wget https://downloads.gradle.org/distributions/gradle-4.1-all.zip
  2. 解压Gradle
    在上述存放目录,执行命令:unzip gradle-4.1-all.zip
  3. 配置Gradle环境变量
    使用 Xftp打开 /etc/profile 文件,在最后添加如下代码,然后保存。
    export GRADLE_HOME=/usr/local/gradle-4.1
    export PATH=$GRADLE_HOME/bin:$PATH
  4. 检验是否配置成功
    执行命令:gradle -version

二 全局配置

Jenkins配置

初始化

  1. 在浏览器输入你的服务器地址和加端口号,会出现下图Jenkins的初始页面:
    在这里插入图片描述
  2. 按照提示使用 Xftp 打开相应文件(路径地址可能不一样,和Jenkins安装位置有关)复制密码,输入密码,出现如下页面:
    在这里插入图片描述
  3. 选择左侧建议安装的插件,出现如下页面:
    在这里插入图片描述
  4. 下一步,进入如下创建Admin用户界面:
    在这里插入图片描述
  5. 保存后,进入如下页面,点击 Start using Jenkins,Jenkins初始化完成。
    在这里插入图片描述

Android打包配置

  1. 插件配置
    点击系统管理,点击插件管理,点击Available,如下图:
    在这里插入图片描述
    搜索插件:Git,Git Parameter,Gradle,Branch API,SSH,build-name-setter,description setter,user build vars,OWASP Markup Formatter ,Email Extension。点击 install without restart 依次安装。
    点击系统管理,点击全局安全配置,如下图配置:
    在这里插入图片描述
  2. 全局环境配置
    点击系统管理,点击全局工具配置(Global Tool Configuration),如下图:
    在这里插入图片描述
    点击ADD JDK(不要勾选自动安装),Name自定义,JAVA_HOME配置服务器的Jdk路径。按此步骤依次配置Git,Gradle,我的配置如下:
    在这里插入图片描述
  3. Android环境配置
    点击系统管理,点击系统设置,点击 Global properties,如下图:
    在这里插入图片描述
    勾选环境变量,Name填入 ANDROID_HOME,Value填入 服务器AndroidSDK位置。

三 项目配置

构建项目

新建项目

点击系统管理,点击 New 任务,进入如下页面:
在这里插入图片描述
选择 构建一个自由风格的软件项目 ,然后点击OK。

参数化构建配置

  1. 构建参数配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 源码地址配置
    在这里插入图片描述
    这里需要注意的是 最好采用 https的URL方式 ,点击Add如下图添加验证,username 和 password 就是代码保管网站的账号和密码,例如我用的是 coding。
    在这里插入图片描述

  3. Gradle配置
    在这里插入图片描述

  4. Android项目配置:
    gradle.properties 配置如下:
    在这里插入图片描述
    build.gradle文件配置如下

apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.butterknife'


static def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyy-MM-dd-HH-mm')
    return formattedDate
}


android {

    defaultConfig {
        applicationId "com.doutu.tutuenglish"
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode 2
        versionName APP_VERSION

        /**
         * 启用multiDex支持 解决方法数 超过 64k 的问题
         */
        multiDexEnabled true

        /**
         * 支持背景模糊
         */
        renderscriptTargetApi 25
        renderscriptSupportModeEnabled true

        ndk {
            //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "arm64-v8a", "x86_64"
        }

    }

    signingConfigs {//签名的配置
        sign {
            storeFile file('../tutu.jks')
            storePassword STORE_PASSWORD
            keyAlias 'tutuenglish'
            keyPassword ALIAS_PASSWORD
        }
    }


    buildTypes {
        debug {

            /***
             * 自定义字段【true:测试地址 false:线上地址】
             */
            buildConfigField "boolean", "IS_TEST", "true"
            /***
             * 自定义字段【true: Jenkins 打包 false: AS 打包】
             */
            buildConfigField "boolean", "IS_JENKINS", "${IS_JENKINS}"

            minifyEnabled false
            signingConfig signingConfigs.sign

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            
            /***
             * 自定义字段【true:测试地址 false:线上地址】
             */
            buildConfigField "boolean", "IS_TEST", "false"
            /***
             * 自定义字段【true: Jenkins 打包 false: AS 打包】
             */
            buildConfigField "boolean", "IS_JENKINS", "${IS_JENKINS}"

            /***
             * 代码混淆
             */
            minifyEnabled false
            /***
             * zipalign优化
             */
            zipAlignEnabled true
            /**
             * 移除无用的resource文件
             */
            shrinkResources false

            signingConfig signingConfigs.sign

            /*加载默认混淆配置文件*/
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    /*修改生成的apk名字*/
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def newName
            def timeNow = getDate().substring(5) // 去掉年


            if ("true" == IS_JENKINS) {

                if (variant.buildType.name == 'debug') {
                    newName = "tutuenglish-v${APP_VERSION}-debug.apk"
                } else {
                    newName = "tutuenglish-v${APP_VERSION}-release.apk"
                }

            } else {

                newName = "tutuenglish-v${APP_VERSION}-${timeNow}-" + variant.buildType.name + ".apk"

            }

            // jenkins打包时修改输出路径保存所有打包记录

            if ("true" == IS_JENKINS) {
                // 修改输出路径
                if ('debug' == variant.buildType.name) {
                    variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk/debug/")
                } else {
                    variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk/release/")
                }
            }

            outputFileName = newName

        }
    }


    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    lintOptions {
        abortOnError false
        checkReleaseBuilds false
    }

    compileSdkVersion 27
}

四 项目构建

打包

完成上面的配置后,我们就可以使用基本的动态入参打包了。点击 Build with Parameters 选项,页面如下:
在这里插入图片描述
这里的每个选项都对应了开始的构建参数配置,很简单,我就不解释了。点击 Build 开始构建。
构建历史会出现下图:

在这里插入图片描述
点击进度条,进入下图页面:
在这里插入图片描述
然后点击 Console Output 进入控制台:
在这里插入图片描述
在这里插入图片描述
到这里已经成功的构建了。

五 构建名称修改和项目分发

修改构建成功后的名称

项目配置中添加以下内容。
在这里插入图片描述
效果展示:
在这里插入图片描述

构建历史中添加 apk 的下载地址

这个需要和蒲公英配合使用,将应用上传到蒲公英,然后返回应用下载二维码的地址。教程点我
Jenkins配置如下:
在这里插入图片描述
效果展示:
上传:
在这里插入图片描述
构建记录:
在这里插入图片描述

将构建结果通过邮件进行分发

如果你是土豪,可以不用看这一步,上一步中,上传的蒲公英,蒲公英有自己的应用更新通知方法。花钱就可以享受。因为我是个技术男,所以我拒绝花钱(因为我穷)。所以我使用Jenkins的邮件功能进行结果分发。Jenkins原本的邮件不支持内容的多样性。所以我们需要使用插件Email Extension。
点击系统管理,点击系统设置,找到下图位置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接上图:
在这里插入图片描述
Default Content 模板:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>

<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
    offset="0">
    <table width="95%" cellpadding="0" cellspacing="0"
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
        <tr>
            <td>(本邮件是程序自动下发的,请勿回复!)</td>
        </tr>
        <tr>
            <td><h2>
                    <font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
                </h2></td>
        </tr>
        <tr>
            <td><br />
            <b><font color="#0B610B">构建信息</font></b>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td>
                <ul>
                   <li>触发原因:${CAUSE}</li>
                    <li>应用名称:${appName}</li>
                    <li>应用包名:${appIdentifier}</li>
                    <li>版&nbsp;本&nbsp;&nbsp;号:${appVersion}</li>
                    <li>文件大小:${appFileSize}</li>
                    <li>更新内容:${UPDATE_DESCRIBE}</li>
                    <li>下载地址:<a href="${appPgyerURL}">${appPgyerURL}</a></li>
                    <li>扫码下载:</li><br>
                    <img src="${appQRCodeURL}" width="118" height="118"/>
                </ul>
            </td>
        </tr>
    </table>
</body>
</html>

Jenkins 自带邮件分发功能设置和测试:
在这里插入图片描述
如果失败,请检查smtp是否打开和授权是否正确。
项目邮件分发配置:
在这里插入图片描述
点击高级,接上图
在这里插入图片描述

效果展示:

在这里插入图片描述

六 结束

结束语

到这里Jenkins一系列的打包分发已经全部完毕,如果遇到问题,请加我qq 839539179 我为你解答。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值