Docker+Jenkins搭建Android持续集成环境(二)

    技术2022-07-11  67

    前言

    gradle、git、jdk环境配置比较简单,主要说下Android SDK配置。Jenkins搭建完后还不能构建Android项目,因为没有Android开发环境,因此还需要配置Android开发环境。如果没配ANDROID_HOME环境的话,构建时会找不到响应的task,如 Task ‘assembleRelease’ not found in project ‘:app’.

    1、下载Android SDK

    下载SDK的方式有两种,一种是在宿主中下载然后拷贝到镜像中;一种是直接在镜像中下载。两者区别不大,都是要通过sdkmanager。

    方法一

    在宿主中下载sdkmanager或者sdk,然后通过命令复制到jenkins镜像中

    docker cp <宿主filepath> :<镜像filepath>

    如:docker cp commandlinetools.zip jenkins:/home/downloads

    方法二

    进入jenkins镜像中下载

    1、进入镜像bash环境

    docker exec -i -t -u root <镜像name> /bin/bash

    2、下载sdkmanager

    wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip

    3、根据需要下载sdk

    sh sdkmanager “platforms;android-28”

    解压sdkmanager后如果报错:

    Warning: Could not create settings java.lang.IllegalArgumentException at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.(SdkManagerCliSettings. ... 创建ANDROID_HOME变量(如/usr/local/android)把下载后的commandlinetools.zip解压后得到tools文件夹,放到cmdline-tools(ANDROID_HOME的子目录,如/usr/local/android/cmdline-tools)下添加文件夹 $ANDROID_HOME/cmdline-tools/tools/bin到 PATH环境变量中(可选)

    2、设置ANDROID_HOME环境变量

    在 Manage Jenkins > Configure System 下配置全局变量,如

    3、构建

    设置源码目录,Credentials设置为github账号

    添加构建任务,需要注意工程可能不能直接构建,则需要指定构建目录Root Build script(如JsBridge是项目工程,但是app才是可构建的项目,则 Root Build script设置为 ${WORKSPACE}/app)

    构建成功如图所示

    生成的apk文件在 ${WORKSPACE}/app/build/outputs/apk/xxx目录下,如

    3.1、带参数构建

    为了应付Flavors的存在,可以自定义一些构建参数,如

    相应的改变构建脚本

    最后可视化构建操作为

    比如选择Release、Flavors1,则构建任务为assembleFlavors1Release。

    还可以把Jenkins中配置的参数替换到Gradle 脚本的gradle.properties中。

    Jenkins自带的环境变量有 JOB_NAME、BRANCH_NAME等.

    3.2、修改构建命名

    设置格式

    效果如图

    3.3、构建完成后操作

    构建完成后给外部提供apk下载地址,然后发送通知或者做其他操作。

    3.3.1、搭建tomcat服务

    下载并启动tomcat,在conf/server.xml文件下配置文件下载地址,在把conf/web.xml中的listings参数修改为true,访问地址为:http:ip:port/apk/

    <!-- server.xml --> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 文件下载地址 --> <Context docBase="/home/jenkins_downloads" path="/apk" reloadable="true" crossContext="true"/> ... <!-- web.xml --> <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <!-- false 修改为 true --> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
    3.3.2、通知构建者

    构建完后把构建日志、包等信息发送给构建者,可以通过邮件或者其他方式,这里利用企业微信的群机器人。

    通过PostBuildScript Plugin这个插件可以再在构建成功、失败后执行一些额外操作,比如shell脚本

    脚本做的操作是先在tomcat下载目录创建目标文件夹(通过构建时间、渠道、构建类型等信息),然后把生成的apk拷贝过去,就可以通过tomcat地址访问了。

    构建日志地址为:http://ip:port/job/${JOB_NAME}/${BUILD_NUMBER}/consoleText

    下载地址为:http://ip:port/apk/${JOB_NAME}/${PRODUCT_FLAVORS}/${BUILD_TYPE}/${BUILD_DATE}

    用到的插件

    Date Parameter

    Build Name and Description Setter

    PostBuildScript Plugin

    参考:

    sdkmanager

    Android Jenkins+Git+Gradle持续集成-实在太详细

    jenkins 内置变量

    Android Command line tools sdkmanager always shows: Warning: Could not create settings

    Processed: 0.012, SQL: 9