Jenkins打包Android apk文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ddxxii/article/details/80207147

环境说明

  1. 博主是在Windows下搭建的,以下讲的是Windows中的搭建处理。
  2. 使用Tomcat9
  3. 使用Jenkins 2.107.2

一 : 搭建jenkins

在jenkeins官网下载.war包,本地安装Tomact即可,或者在docker中安装也行。下面说在Tomcat中搭建

  1. 下载Tomcat,并安装,如果本机没有Java环境,则还需要安装Java环境,暂时不要下Java9,最新版本的jenkins好好像是支持到了Java9,博主用的时候还没支持到java9,jenkins跑起来会报错。
  2. 将.war包放在Tomcat的webapps下,然后开启Tomcat服务

二 : 开启jenkins

如果端口没有修改则是8080,可以在tomcat配置文件中自行修改

  1. 在网页上访问localhost:8080/jenkins,此操作会开启jenkins,并启动和生成一些配置文件
  2. 输入密码,密码在页面中也有提示目录,在配置文件中,使用一次即可
  3. 配置一些插件
    1. Git plugin , 不用说,用git需要
    2. Gradle Plugin ,gradle需要
    3. description setter plugin ,描述构建类型插件
    4. Branch API Plugin
    5. SSH plugin
    6. Git Parameter,参数构建配置git参数使用
    7. Android Emulator Plugin ,可以管理Android sdk,也可以帮助集成Android项目

三: 配置环境变量

  1. 系统管理-> 系统设置
    1) 配置git路径 和 Android_HOME环境变量
    2) Android sdk root


  1. 系统管理-> 全局工具配置
    1) 配置JDK
    2) 配置GIT
    3) 配置Gradle

注意:

  1. 环境变量git,路径指定一定要到git.exe
  2. 配置gradle,可以使用自己下载的,指定目录就成。也可以自动安装,我是使用的自动安装,翻墙花点时间
  3. 配置jdk,jdk不用配置到bin目录,只需要安装目录即可
  4. Android的sdk可以先下载sdk包,再在使用命令操作sdkmanager下载其他包,方式可自行搜索,官方也有说明

四: 构建

1. 先说工程中的配置吧

  • build.gradle中的配置:

/**
 * 获取key路径,创建一份方法来获取key文件路径,jenkins和studio中可使用不同的路径
 * @return
 */
def getMyStoreFile() {
    if ("true".equals(project.IS_JENKINS)) {
        System.out.println("jenkins")
        return file(project.DemoAPP_KEYSTORE)
    } else {
        System.out.println("normal")
        return file(project.DemoAPP_KEY_STORE)
    }
}

android {
//签名配置
    signingConfigs {
        release {
            //别名
            keyAlias project.DemoAPP_ALAIS
            keyPassword project.DemoAPP_PSW
            //路径
            storeFile getMyStoreFile()
            storePassword project.DemoAPP_STORE_PSW
            v1SigningEnabled true       //对JAR签名
            v2SigningEnabled true       //对APK签名
        }

        debug {
            //别名
            keyAlias project.DemoAPP_ALAIS
            keyPassword project.DemoAPP_PSW
            //路径
            storeFile getMyStoreFile()
            storePassword project.DemoAPP_STORE_PSW
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            //这里控制签名文件
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            signingConfig signingConfigs.debug
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
  • gradle.properties中的配置,一般默认local.properties不推到远程,所以jenkins需要动态修改到配置在此地方设置即可
#jenkins中用到的变量
#默认是false,studio中使用本地配置签名路径
IS_JENKINS=false
#配置类型,在jenkins上可以配置选择,用此变量来动态打出对应BuildType的包
BUILD_TYPE=debug
#本地key路径
DemoAPP_KEY_STORE=/loacl/Apk/key
#签名的别名
DemoAPP_ALAIS=666
#签名的密码
DemoAPP_PSW=777
#密码
DemoAPP_STORE_PSW=777
#jenkins上使用的签名路径,我这里放在app工程目录下,实际使用可放在对应服务器上某个路径
DemoAPP_KEYSTORE=../app/key

2. Jenkins上项目配置

工程中配置的一些变量,目的就是为了在jenkins上可以动态选择和构建。看看jenkins上的配置。

(1) 首先建立项目

创建一个自由风格的软件项目即可。名称自取

(2) 进入配置项目

  • 描述、构建策略,根据需要自行配置即可

  • 参数化构建过程配置: 这是重点,咱们需要做可选择的动态参数来配置它,名字默认都是大写下划线隔开

(1) 配置是否是Jenkins构建,采用选择参数方式,它的用处很多,可在构建前选择对应参数。这里一般写死为true即可,这样在构建的时候选择的就是jenkins上用的签名文件了

(2) 配置编译类型,也就是签名说到的BUILD_TYPE,通过这个参数来选择编译哪种版本

(3) 配置Git Parameter来构建,这种方式可以在构建的时候,动态获取远程类型,比如分支啊,tag啊之类的,然后供选择来进行构建,是一个很好的方式,里面对应的参数可以试试,可以自己配置要显示的方式,过滤分支都行。当然这个需要安装签名说到的Git Parameter插件

(4) 配置源码管理,这里就是配置你项目路径的地方,推荐使用SSH的方式。当然需要配置一下私钥

私钥配置:一般key在本地的.ssh目录下的id_rsa,自行查看后复制上去:

工程中git配置: 添加对应的项目ssh地址,选择添加好的私钥,没有也可以在这里点Add添加,方式如上图:

(5) 配置构建触发器

方式一:通过配置多久来拉取一次,有远程有更新则拉取编译,没更新则不编译。如下面配置的是每5分支拉取一次

方式二:也可以设置Build periodically,周期性的执行编译任务。

注意: 这里如果配置了周期自动构建,那么对配置参数的选项参数默认是选择的选项是选择第一个,如BUILD_TYPE是release,IS_JENKINS是true。GIT_TAG默认是构建配置的默认分支的最新所拉取到的commit

(6) 构建配置

通过${类型},这样可以在编译时替换掉咱们签名配置的参数如BUILD_TYPE

(7) 配置完了,就可以开始构建了。

点击 Build with Parameters进行构建,右侧会显示出动态选择的参数,就如前面我们配置的那些选项。选好了,点开始构建就能进行构建了。因为我们没有配置输出目录,所以默认是在工作空间的,app/build/outputs/apk/。

上传到蒲公英

蒲公英是个很好到平台,咱们构建好到应用,可以上传到该平台,然后提供下载链接供测试人员下载之类的。免费版每天也可以有1000次下载次数,日常很多时候足够用了。官方也有jenkins相关的文档

  1. 先来下载蒲公英提供在jenkins中的插件

  1. 配置参数

这里只是贴下大概说明,其实蒲公英的官方对jenkins的文档说的非常清晰,跟着配置下就行。

最后构建一下就ok,上传蒲公英成功,并且将二维码放在了apk路径下。在jenkins上找到二维码的目录就能直接在浏览器上查看了。

构建踩坑记录

1.报错

The Gradle wrapper has not been found in these directories: H:\dradle\gradle-4.1

因为在设置的时候,以为创建gradle,然后自己定义本地gradle目录,结果不是,只需要选择下全局配置里配置好的就可以了。

2.报错

C:\Windows\System32\config\systemprofile\.jenkins\workspace\demoapp\local.properties (系统找不到指定的文件。)

这里是由于构建的时候在build.gradle里面配置了一些本地参数,由于loacl.properties没上传到云端,所以需要在gradle.properties里面补上

3.报错

Could not find com.android.tools.build:gradle:3.0.1.

由于我使用的是最新的gradle4.1和3.0.1来构建,所以需要同步,但是在老工程里没有加maven配置,只需要在工程的build.gradle里加上

 repositories {
        jcenter()
        mavenCentral() // add repository
        maven {
            url 'https://maven.google.com'
        }
    }

4.报错

Android\sdk' does not exist.

这里就明明配置了全局Android_Home,为什么还是找不到呢,结果之后发现由于上传到云端的项目local.properties也给上传上去了,因为这里里面有指定sdk目录,那目录是你电脑本地目录,服务器上的jenkins怎么可能找得到。所以配置一下忽略文件,local.properties这个文件是没必要传到云端的。

  1. 报错:
···ERROR: Unable to open PNG file

Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT error: check logs for details

诡异了,在死丢丢上能跑过的,经过摸索,发现错误原因2:文件路径太长

在windows系统中,由于对文件路径有长度限制,256个字节,如果图片的路径长度超过了这个限制,IDE也会报错

处理办法: 在jenkins中把工作目录给改一下,通过系统管理->系统设置,修改工作空间目录

  1. 报错
Execution failed for task ':app:compileReleaseAidl'.

也是在死丢丢上不出错,一到了jenkins上就报错。找到原因和第5条的错误原因一样。改了工作控件目录后就能正常编译了

  1. 打包时的错误,签名路径不是寻找的设置好的jenkins上用的路径。

原因在参数化构建:

打包过程,需要用到参数化构建,比如,默认打包选择的签名文件为本地文件,Jenkins打包选择为工程中的文件。那么参数化打包发现怎么用到的都是本地路径。

处理:

使用插件
1. Dynamic Extended Choice Paramete
2. description setter plugin

最主要的一步: 在配置构建的时候,勾选:Pass all job parameters as Project properties,只有勾选了它,才能在构建的时候替换掉项目中gralde.properties中的变量

Jenkins简单打包apk再上传还是很容易的,各路文档也很多,但是我们实际使用的项目是在一个大工程下,有很多小工程,然后我们一次只打包其中一个工程,还需要再摸索下如何打包。

猜你喜欢

转载自blog.csdn.net/ddxxii/article/details/80207147