Docker-Jenkins编译android-app的两种方案

Docker-Jenkins编译android-app的两种方案

android开发使用jenkins编译,自动集成修改点/自动命名/自动备份,将修改的apk发布到测试服务器+发布网盘,而不需要用通讯工具传来传去。

jenkins用在互联网开发编译比较常见,如果android开发也想用,该怎么设计呢?

由于用jenkins开发android app的文章比较多,本文只提炼了干货。

关键点1

在app端需要做哪些修改?

  • 使用android studio开发,IDE会帮忙默认签名。

    而用jenkins编译肯定要用到gradle编译,所以需要在build.gradle里面加入针对于jenkins编译需要做自行签名的代码。

    java 复制代码
    android {
        signingConfigs {
            debug {
                storeFile file('.\as_key.jks')
                storePassword '123456'
                keyPassword '123456'
                keyAlias 'key0'
            }
            release {
                storeFile file('.\as_key.jks')
                storePassword '123456'
                keyPassword '123456'
                keyAlias 'key0'
            }
        }
    }
  • local.properties中的sdk.dir需要改为jenkins可以用到sdk

关键点2

Android SDK+JDK的配置

  • 可以在Jenkins的Tools里面配置本地路径
  • 也可以引用/映射本地的SDK环境,包括java环境
  • Docker里面一般只有一个固定的jdk android sdk版本,但你需要下载编译你app对应的环境

包括gradle版本也是头疼的事情,建议google官方出一个集成常用jdk+常用android sdk+特定gradle版本的docker,但是镜像的体积估计不会小,几个G应该有。

以下是我个人启动docker通过映射启动的方式:

ruby 复制代码
docker run  --network host  --rm -p 8080:8080 -p 50000:50000   
-v /home/ldeng/code/Docker/home/jenkins_home/:/var/jenkins_home   
-v /etc/localtime:/etc/localtime  
-v /home/ldeng/code/Android/Sdk:/var/jenkins_home/workspace/AndroidSDK 
-v /usr/lib/jvm/java-11-openjdk-amd64/:/var/jenkins_home/workspace/jdk11/ 
-v /usr/lib/jvm/java-8-openjdk-amd64/:/var/jenkins_home/workspace/jdk8/  
-v /home/ldeng/.gradle/:/var/jenkins_home/.gradle     
--name lucasd-jenkins  jenkins/jenkins:latest

关键点3

如何编译? 废话,用gradle。

下载代码

方案一:使用gradle编译

  1. 先配置gradle

    但是这种配置方式,必须要和app默认支持的gradle版本保持一直,必须也是6.5的版本

  2. 使用gradle编译

  1. 注意task需要填写:
makefile 复制代码
app:clean
app:assembleDebug
  1. 编译完成:

方案二:使用gradlew编译

如果不想gradle版本被限制死了就需要用gradlew的方式编译,

它会自动解析当前项目支持哪个版本的gradle。

但是需要映射gradle下载的缓存路径:

ruby 复制代码
-v /home/ldeng/.gradle/:/var/jenkins_home/.gradle

这个很重要!

不然每次下载都要下载一次gradle 6.5, 这个时间是比较长的,所以建议映射到本地gradle路径。

脚本代码:

bash 复制代码
pwd
ls
export ANDROID_HOME=/var/jenkins_home/workspace/AndroidSDK
export ANDROID_SDK_ROOT=/var/jenkins_home/workspace/AndroidSDK
export ANDROID_SDK_ROOT=/var/jenkins_home/workspace/jdk8
export GRADLE_HOME=/var/jenkins_home/.gradle/wrapper/dists/gradle-6.5-bin/6nifqtx7604sqp1q6g8wikw7p/gradle-6.5
export GRADLE_USER_HOME=/var/jenkins_home/.gradle
echo $ANDROID_HOME
echo $ANDROID_SDK_ROOT
echo $JAVA_HOME
echo $GRADLE_HOME
#ls /var/jenkins_home/workspace/AndroidSDK
/usr/bin/env bash gradlew clean
/usr/bin/env bash gradlew assembleDebug

关键点4

发送apk/jar/arr等工件到测试服务器,

用到了Publish artifacts over SSH

相关推荐
遇见火星8 小时前
生产级 DevOps 自动化交付模板(基于 Kubernetes 与 GitOps)
kubernetes·自动化·devops·gitops
Azure DevOps1 天前
Azure DevOps:应用远程MCP服务器,提升工作效率
服务器·microsoft·flask·azure·devops
biubiubiu07062 天前
Ubuntu 22.04 单台 VPS 的基础安全初始化流程
devops
H_老邪2 天前
什么是 devOps?Jenkins ?云效工作台?
运维·devops
竹林8182 天前
用Python脚本批量发布Markdown文章,我踩了三个坑才搞定
python·markdown·自动化运维
AustinXu3 天前
AI时代,运维工程师如何不被淘汰?从 Ops 到 Platform Engineer 的思维跃迁
自动化运维
2301_787328493 天前
60.devops-kubernetes
运维·kubernetes·devops
代码派3 天前
免费本地部署的数据库 DevOps 工具,能覆盖多少日常工作场景?以 NineData 社区版为例
运维·数据库·database·devops·数据库管理工具·数据管理·sql工具
Azure DevOps3 天前
Azure DevOps Server:2026年3月份补丁
运维·microsoft·azure·devops
Azure DevOps4 天前
Azure DevOps Server:扩充数据库服务器的磁盘
服务器·数据库·microsoft·azure·devops