Ubuntu使用Jenkins进行Android自动打包

注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路径,如下图所示
图1

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

6. 新建项目

  • 选择 新建-->构建一个自由风格的软件项目,输入项目名称后点击ok,进入项目面板
  • General设置如图2和图3
    图2
图3
  • 源码管理设置如图4
图4
  • 构建触发器设置如图5所示
图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所示
图6
图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
图8
图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文件夹下

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容