热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ubuntu使用Jenkins进行Android自动打包

注1:Jenkins依赖于Java运行环境,所以安装Jenkins之前需要先安装Java注2:本文使用svn来checkout代码注3:打包完之后可将生成的apk传输到本机的ftp

注1:Jenkins依赖于Java运行环境,所以安装Jenkins之前需要先安装Java
注2:本文使用svn来checkout代码
注3:打包完之后可将生成的apk传输到本机的ftp目录,将本机作为打包服务器
注4:假如本机ip地址为192.168.100.60,那么局域网内其他电脑访问192.168.100.60:8080和ftp://192.168.100.60/可以访问到本机的Jenkins和ftp目录。所以本机适合做一个打包服务器

1. 安装Jenkins

  • 依次执行

wget -q -O – https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add –
sudo sh -c ‘echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list’
sudo apt-get update
sudo apt-get install jenkins

2. 配置

  • Jenkins默认端口是8080,如需修改,打开/etc/default/jenkins文件,将HTTP_PORT=8080修改为你需要的端口即可

3. 启动

  • 执行命令(后面跟的是选项)

/etc/init.d/jenkins {start|stop|status|restart|force-reload}

  • 复制初始密码

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

9b4e46e0c33e4e99b9bbc916a7adccac

  • 访问并粘贴至localhost:8080以Unlock Jenkins

4. 安装插件

  • 除安装推荐插件外,还可选择性安装以下插件
  • git plugin
  • SSH Credentials Plugin
  • Git Changelog Plugin: 获取仓库提交的commit log
  • build-name-setter:用于修改Build名称
  • description setter plugin:用于在修改Build描述信息,在描述信息中增加显示QRCode(二维码)
  • Post-Build Script Plug-in:在编译完成后通过执行脚本实现一些额外功能
  • Gradle plugin: Android专用

安装方式也比较简单,直接在Jenkins的插件管理页面搜索上述插件,点击安装即可。

5. 全局配置

  • 在 系统管理–>Global Tool Configuration 中配置JDK和Gradle路径,如下图所示

《Ubuntu使用Jenkins进行Android自动打包》 图1

设置完成后保存,进入主面板

6. 新建项目

  • 选择 新建–>构建一个自由风格的软件项目,输入项目名称后点击ok,进入项目面板
  • General设置如图2和图3
    《Ubuntu使用Jenkins进行Android自动打包》 图2

《Ubuntu使用Jenkins进行Android自动打包》 图3

  • 源码管理设置如图4

《Ubuntu使用Jenkins进行Android自动打包》 图4

  • 构建触发器设置如图5所示

《Ubuntu使用Jenkins进行Android自动打包》 图5

重点总结基于Build periodically和Poll SCM的日期表写法

  1. 第一个参数代表的是分钟 minute,取值 0~59;
  • 第二个参数代表的是小时 hour,取值 0~23;
  • 第三个参数代表的是天 day,取值 1~31;
  • 第四个参数代表的是月 month,取值 1~12;
  • 最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
    所以 0 表示的就是每个小时的第 0 分钟执行一次构建 H(25-30) 18 1-5: 工作日下午6点25到30分之间进行build H 23 1-5:工作日每晚23:00至23:59之间的某一时刻进行build H(0-29)/15 :前半小时内每隔15分钟进行build(开始时间不确定) H/20 :每隔20分钟进行build(开始时间不确定)
  • 构建设置如图6和图7所示

《Ubuntu使用Jenkins进行Android自动打包》 图6
《Ubuntu使用Jenkins进行Android自动打包》 图7

  • 全部设置完成后点击保存,进入Test项目面板

7. 使用命令行创建工作目录

注:这步是我自己在用的,先使用命令行将项目设置好,Jenkins中的项目就可以直接运行,省去了很多构建错误的麻烦。

  • 首先设置环境变量,在~/.bashrc中增加ANDROID_HOME环境变量和gradle的PATH,比如我的是添加如下两行

export PATH=/home/whatsid/Studio/gradle-3.3/bin:$PATH
export ANDROID_HOME=/home/whatsid/Android/Sdk

  1. 上面图3中设置了Jenkins的工作目录,此时这个目录应该还没有被创建(如果已有也可以),顺序执行下面的命令行(有些命令需要改动某些部分,请注意)
    注1:要看懂下面每行命令行的意思,否则容易出错,命令行都不难
    注2:例如svn仓库的地址是svn://xxxxxxxxx/trunk,那么执行svn co命令的时候,check下来的代码会在trunk目录下,所以下面的命令行没有mkdir trunk,这点需要注意
    注3:执行命令行的时候//以及后面的内容不要拷贝,这是注释
    注4:执行完下面的命令后就会在~/Jenkins/launcher/trunk/app/build/outputs/apk下生成apk包

cd ~
mkdir Jenkins
sudo chmod -R 777 ~/Jenkins
cd Jenkins
mkdir launcher //假如有多个Jenkins项目,为了方便管理,每个项目有自己单独的工作目录,如果要创建第二个项目,就可以mkdir launcher2,不至于多个项目混在一起
sudo chmod -R 777 ~/Jenkins/launcher
cd launcher
svn co your_svn_address –username your_svn_username //执行这行后需要输入svn密码
cd trunk
svn upgrade
svn update
sudo chmod -R 777 ~/Jenkins/launcher
gradle clean
gradle assemble
sudo chmod -R 777 ~/Jenkins/launcher

  1. 也可以使用组合命令,一步到位

cd ~;mkdir Jenkins;sudo chmod -R 777 ~/Jenkins;cd Jenkins;mkdir launcher;sudo chmod -R 777 ~/Jenkins/launcher;cd launcher;svn co your_svn_address –username your_svn_username;cd trunk;svn upgrade;svn update;sudo chmod -R 777 ~/Jenkins/launcher;gradle clean;gradle assemble;sudo chmod -R 777 ~/Jenkins/launcher;

8. 执行完上面的命令行后,Jenkins项目面板中点击立即构建即可构建成功

构建过程中有可能遇到以下错误

问题1. the working copy at ‘/home/whatsid/Jenkins/launcher/trunk’ is too old (format 8) to work with client version ‘1.9.3 (r1718519)’ (expects format 31). You need to upgrade the working copy first.

解决办法:在/home/whatsid/Jenkins/launcher/trunk目录下执行svn upgrade

问题2. java.nio.channels.NonWritableChannelException

解决办法:给权限,sudo chmod -R 777 /home/whatsid/Jenkins/launcher/trunk

问题3. org.tmatesoft.svn.core.SVNException: svn: E200030: BUSY

解决办法:删除.svn文件夹再重试,sudo rm -rf /home/whatsid/Jenkins/launcher/trunk/.svn

9. 安装ftp服务(可选)

  • 安装ftp

sudo apt-get install vsftpd

  • 配置

首先执行

sudo gedit /etc/vsftpd.conf

然后添加

#允许匿名访问
anonymous_enable=YES
#接受本地用户
local_enable=YES
#允许上传
write_enable=YES
#用户只能访问限制的目录
chroot_local_user=YES
#设置固定目录,在结尾添加。如果不添加这一行,各用户对应自己的目录,当然这个文件夹自己建
local_root=/home/ftp

调整文件夹权限,避免“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”

sudo chmod 777 /home/ftp

如果要将生成的apk放在/home/ftp/download/launcher中

cd /home/ftp
mkdir download
cd download
mkdir launcher
sudo chmod -R 777 /home/ftp/download

重启vsftpd

sudo service vsftpd restart

这样就可以用ftp://localhost/download/ 来访问本机的ftp文件夹了。看到的是local_root设置的/home/ftp,并且限制在该目录。

10. Jenkins项目自动打包生成的apk传入ftp文件夹下(可选)

  • 在Jenkins的项目中添加如下配置并保存,如图8和图9

《Ubuntu使用Jenkins进行Android自动打包》 图8
《Ubuntu使用Jenkins进行Android自动打包》 图9

  • 在/home/whatsid目录下新建launcher.sh,内容如下(除了第一行的#,其他的#及其后面的内容都是注释,不需要):

#! /bin/bash
datename=$(date +%Y%m%d_%H:%M:%S) #生成20170606_14:20:35格式的时间戳
mkdir -p /home/ftp/download/launcher/$datename #生成时间戳为名称的文件夹
#将生成的apk、logs、mapping三个文件夹拷贝到生成的文件夹中
cp -r /home/whatsid/Jenkins/launcher/trunk/app/build/outputs/apk/ /home/ftp/download/launcher/$datename
cp -r /home/whatsid/Jenkins/launcher/trunk/app/build/outputs/logs/ /home/ftp/download/launcher/$datename
cp -r /home/whatsid/Jenkins/launcher/trunk/app/build/outputs/mapping/ /home/ftp/download/launcher/$datename
#删除生成的文件夹,以免下次重复拷贝
rm -rf /home/whatsid/Jenkins/launcher/trunk/app/build/outputs/apk
rm -rf /home/whatsid/Jenkins/launcher/trunk/app/build/outputs/logs
rm -rf /home/whatsid/Jenkins/launcher/trunk/app/build/outputs/mapping

  • 给launcher.sh执行权限

sudo chmod -R 777 /home/whatsid/launcher.sh

  • 点击立即构建即可构建项目并将生成的apk文件传输到ftp文件夹下

以上


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • struts2重点——ValueStack和OGNL
    一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot( ... [详细]
  • 本人新手,用Unity3D想做一个简单的赛车游戏,现在的问题是转弯的时候很容易出现翻车的情况,求解决思路比如说你的中心是在(0,0,0),你把他设置成(0,-1.0,0)之类的就可 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 近来有一个需求,是需要在androidjava基础库中插入一些log信息,完成这个工作需要的前置条件有编译好的android源码具体android源码如何编译,这 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
  • javaftp上传,javaftp下载文件
    本文目录一览:1、javaftp上传5G以上大文件,怎么做 ... [详细]
author-avatar
利盈香玟倩文怡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有