概述:公司经历了半年的稳定,半年的扩张,业务流程已趋于完善。 为了进一步提升公司的研发效率,给予研发人员更多的不间断思路,计划上自动化构建工具,替代研发人员打包过程,研发最重要的是什么?思路连贯性,不去做无用功,我们打一次包因为数量较多,一次得占用研发15~20分钟左右 ,一但出什么错误重打 几个小时过去,太坑爹。最终选型TeamCity势在必行。
运行环境:Centos 7 + Android studio 所以 将分两部去整理:
第一步、Android SDK for Linux
第二步、TeamCity for Linux
Android SDK for Linux
因为使用的服务器版本Centos 7,并没有图形化,无法运行android studio(安装时会提示...X11...错误),所以只能安装adnroid sdk 然后使用sdkmanager一点点配置吧
从谷歌官方下载:https://developer.android.com/studio/index.html
使用unzip解压到/home/目录下,sdkmanager会下载很多东西,要保证磁盘空间够用,TeamCity在安装时也要注意这个问题,如果不够用也有解决办法,趟过坑,后面会介绍。
cd /home
unzip sdk-tools-linux-3859397.zip
再接下来 配置环境变量
vim /etc/profile
添加如下配置
//sdkmanager
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export PATH=$PATH:/home/android-tools/tools/bin
export PATH=$PATH:/home/android-tools/platform-tools
//ANDROID_HOME
export ANDROID_HOME=/home/android-tools
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
在任意地方输入 sdkmanager --list
Installed packages:
Path | Version | Description | Location
------- | ------- | ------- | -------
build-tools;27.0.2 | 27.0.2 | Android SDK Build-Tools 27.0.2 | build-tools/27.0.2/
build-tools;27.0.3 | 27.0.3 | Android SDK Build-Tools 27.0.3 | build-tools/27.0.3/
cmake;3.6.4111459 | 3.6.4111459 | CMake 3.6.4111459 | cmake/3.6.4111459/
extras;android;m2repository | 47.0.0 | Android Support Repository | extras/android/m2repository/
extras;google;m2repository | 58 | Google Repository | extras/google/m2repository/
ndk-bundle | 15.2.4203891 | NDK | ndk-bundle/
platform-tools | 27.0.1 | Android SDK Platform-Tools | platform-tools/
platforms;android-23 | 3 | Android SDK Platform 23 | platforms/android-23/
platforms;android-24 | 2 | Android SDK Platform 24 | platforms/android-24/
platforms;android-25 | 3 | Android SDK Platform 25 | platforms/android-25/
platforms;android-26 | 2 | Android SDK Platform 26 | platforms/android-26/
platforms;android-27 | 1 | Android SDK Platform 27 | platforms/android-27/
tools | 26.0.1 | Android SDK Tools 26.0.1 | tools/
Available Packages:
Path | Version | Description
------- | ------- | -------
add-ons;addon-g..._apis-google-15 | 3 | Google APIs
add-ons;addon-g..._apis-google-16 | 4 | Google APIs
add-ons;addon-g..._apis-google-17 | 4 | Google APIs
............
add-ons;addon-g..._apis-google-23 | 1 | Google APIs
add-ons;addon-g..._apis-google-24 | 1 | Google APIs
add-ons;addon-g...e_gdk-google-19 | 11 | Glass Development Kit Preview
build-tools;19.1.0 | 19.1.0 | Android SDK Build-Tools 19.1
build-tools;20.0.0 | 20.0.0 | Android SDK Build-Tools 20
build-tools;21.1.2 | 21.1.2 | Android SDK Build-Tools 21.1.2
build-tools;22.0.1 | 22.0.1 | Android SDK Build-Tools 22.0.1
build-tools;23.0.1 | 23.0.1 | Android SDK Build-Tools 23.0.1
build-tools;23.0.2 | 23.0.2 | Android SDK Build-Tools 23.0.2
build-tools;23.0.3 | 23.0.3 | Android SDK Build-Tools 23.0.3
build-tools;24.0.0 | 24.0.0 | Android SDK Build-Tools 24
build-tools;24.0.1 | 24.0.1 | Android SDK Build-Tools 24.0.1
build-tools;24.0.2 | 24.0.2 | Android SDK Build-Tools 24.0.2
build-tools;24.0.3 | 24.0.3 | Android SDK Build-Tools 24.0.3
............
system-images;a...ult;armeabi-v7a | 4 | ARM EABI v7a System Image
system-images;a...16;default;mips | 1 | MIPS System Image
system-images;a...-16;default;x86 | 5 | Intel x86 Atom System Image
system-images;a...google_apis;x86 | 5 | Google APIs Intel x86 Atom Sys...
............
platforms;android-17 | 3 | Android SDK Platform 17
platforms;android-18 | 3 | Android SDK Platform 18
platforms;android-19 | 4 | Android SDK Platform 19
platforms;android-20 | 2 | Android SDK Platform 20
............
extras;m2reposi...er;1.0.0-alpha5 | 1 | Solver for ConstraintLayout 1....
extras;m2reposi...er;1.0.0-alpha6 | 1 | Solver for ConstraintLayout 1....
extras;m2reposi...er;1.0.0-alpha7 | 1 | Solver for ConstraintLayout 1....
Available Updates:
ID | Installed | Available
------- | ------- | -------
ndk-bundle | 15.2.4203891 | 16.1.4479499
tools | 26.0.1 | 26.1.1
这里 其实就是我们在android studio里常看到的 sdkmanager工具,总分三大块:Installed packages(已安装)、Available Packages(所有列表)、Available Updates(可升级)
需要根据自己项目的提前下载,命令如下:
//下载安装 build-tools;27.0.3
[root@localhost /]# sdkmanager "build-tools;27.0.3"
安装全后 teamcity编译时才不会出问题,提前看好你工程所需的环境吧,后期会省事些,项目多 这里下载的东西就会多,所以之前有建议过这工具一定要下载在磁盘空间足够多的地方,后继到是可以再换地方,不过 要记得再次修改etc/profile环境变量。
至于ADB 用的不多,这里可以不用调式。
接下来开始安装Teamcity
TeamCity for Linux
安装
最新版本 2017.2.3
安装环境要求:JDK 1.7 以上,如果你要使用的是 2016 最新的 TeamCity 9.1 的话,JDK 官网推荐的 1.8
-
开始安装 (TeamCity-2017.2.3.tar)
- 解压压缩包(解压速度有点慢):
tar zxf TeamCity-2017.2.3.tar
- 下载的 tar.gz 的本质是已经里面捆绑了一个 Tomcat,所以如果你会 Tomcat 的话,有些东西你可以自己改的。
- 根目录下硬盘空间小,所以解压缩的目录放在 home 目录下 500G:
mv TeamCity/ /home/
- 进入解压目录:
cd /home/TeamCity/
- 启动程序:
/home/TeamCity/bin/runAll.sh start
- 停止程序:
/home/TeamCity/bin/runAll.sh stop
- 启动需要点时间,最好能给它一两分钟吧
- 解压压缩包(解压速度有点慢):
-
首次进入
- 访问(TeamCity 默认端口是:8111):[http://192.168.1.113:8111/]
- 如果访问不了,请先关闭防火墙:service iptables stop
- 你也可以选择把端口加入白名单中:
sudo iptables -I INPUT -p tcp -m tcp --dport 8111 -j ACCEPT
sudo /etc/rc.d/init.d/iptables save
sudo service iptables restart - 如果你要改变端口,找到下面这个 8111 位置:vim /home/TeamCity/conf/server.xml
<Connector port="8111" ...
- 进入 TeamCity 的设置向导:
如上图英文所示,TeamCity 的一些软件安装的配置、服务的配置默认都会放在:/root/.BuildServer
如果你要了解更多 TeamCity Data Directory 目录 可以看官方:https://confluence.jetbrains.com/display/TCD10/TeamCity+Data+Directory
如上图英文所示,TeamCity 的一些构建历史、用户信息、构建结果等这类数据是需要放在关系型数据库上的,而默认它给我们内置了一个。
如果你要了解更多 TeamCity External Database,你可以看:https://confluence.jetbrains.com/display/TCD9/Setting+up+an+External+Database
首次使用,官网是建议使用默认的:
Internal(HSQLDB)
,这样我们无需在一开始使用的就考虑数据库迁移或安装的问题,我们只要好好感受 TeamCity 给我们的,等我们决定要使用了,后续再更换数据也是可以的。但是内置的有一个注意点:'TeamCity with the native MSSQL external database driver is not compatible with Oracle Java 6 Update 29, due to a bug in Java itself. You can use earlier or later versions of Oracle Java.'-
假设我们就选
Internal(HSQLDB)
,则在创建初始化数据库的过程稍微需要点时间,我这边是几分钟。
如上图所示,接受下协议
创建一个顶级管理员账号
如上图所示,安装完首次进来地址:http://192.168.1.113:8111/profile.html?tab=userGeneralSettings
我们可以完善一些管理员信息和基础配置信息,这些配置不配置都无所谓了,只是完善了可以更加好用而已
如果你有 SMTP 的邮箱,你可以来这里开启邮件通知功能:http://192.168.1.113:8111/admin/admin.html?item=email
如果你要开启通知功能那肯定下一步就是考虑通知内容的模板要如何设定:https://confluence.jetbrains.com/display/TCD10/Customizing+Notifications
模板存放路径在:
/root/.BuildServer/config/_notifications
,用的是 FreeMarker 的语法
项目配置
- 代码环境 github + build.gradle
-
点击右上角的 Administration 会进入TeamCity的配置环境 选择create project创建项目
填 入 github 资源库地址 输入用户名密码 验证没问题的话 会进入下一步
-
选择编译方式
我的是安卓,选gradle后Use selected
创建成功 就可以对gradle进行具体配置 点击edit
图中已标示 只有三处需要更改:而其中要注意 填Gradle home path前 需要将Gradle Wrapper。取消选中才可,否则他会默认取项目中的gradle wrapper编译。保存 完成gradle的配置
注意:也可以不取消Gradle Wrapper,系统会自动寻找 项目根目录下的 gradle/wrapper/gradle-wrapper.properties文件中的distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip,如果本地没有此包 会自动下载到/root/.gradle/wrapper/dists/目录下,如:/root/.gradle/wrapper/dists/gradle-4.2.1-all/domrskppdhf3wtn5mziw0c2zr/gradle-4.2.1。也可以手动下下载后自解压路径如下:/root/.gradle/wrapper/dists/gradle-4.2.1-all/domrskppdhf3wtn5mziw0c2zr/gradle-4.2.1-all.zip to /root/.gradle/wrapper/dists/gradle-4.2.1-all/domrskppdhf3wtn5mziw0c2zr
编译没问题了 那接下来 就是关于Build后的问题,点击最左侧的 [General Settings] 进入页面
这里是两处需要更改
- Build number format 关系到打包时的序号格式问题,系统默认是#1 #2 #3依次递增的显示,对于我的需求来讲不够用,我的设置如下:
%env.BUILD_START_DATE%-%env.BUILD_START_TIME%-%env.BUILD_VCS_LASTINCLUDED_REVISION%
第一次安装的TeamCity是无法这样输入 需要下插件:TeamCity GroovyPlug 后面说明如果安装插件。
- Artifact paths 是关于打包后的路径设置,至于怎么填 也没细研究 硬性这样写吧 后继再细看,如果有不懂的 可以点每一项后面的 问号 会被引导到官方说明文档上,可惜全是英文,看起来可能会累一些。
+:**/* => target_directory
-:**/folder1 => target_directory
这里完成后设置就差不多了,项目是可以跑通,如果还有些个性化的设置那就要单独设置了,比如 之前设置过了github URL,需要更改分支 需要点如下图链接
我涉及到的几处如下
以上选项 顾名思义.还有很多设置可以选择 用到时 可以再研究 ,现在可以Build Run了
Build运行
如上图显示 代表初步配置成功,正在下载git代码 前面的
#20180329-182458-???
就是刚才我们设置过的 Build number format
代表 年月日- 时分秒
.后面的问号,其实是代表着此次打包所提交的index 以方便识别打出的包对应哪次代码。
而后面的显示的状态内容是可以点进去的 如下图
可以在这里看运行时的日志。如果失败 在这里查找原因后解决即可
最终完成后 在总列表中显示 Success ,在后面的Artifacts中可以下载到打好的包,
app/build/outputs/apk/****.apk
!!!关于Build run 有一处要注意的,builde.gradle一定会编译release 的类型,如果找不到 会报错,影响整个编译的最终结果,所以 即便不会用到release也要找其它type代替
TeamCity插件
关于插件我使用的也不多,不过 在官网看到很多不同功能的插件 貌似很强大
https://plugins.jetbrains.com/teamcity
-
查看清单 可以点右上角的
Administration
在左侧列表最下边的Plugins List
,这里列出了已安装的插件,在这里可以进行开关,下图第一个 就是我之前提到过 标注日期等标识
-
安装插件
上传下载到的插件ZIP包即可。
Groovy plug 地址:trunk compatible with TeamCity 2017.1+
点进去 乍一看需要登录 其实可以选择右下角的guest用户登录,省去了注册的麻烦,再进去 还是一个teamcity,想想也对 自家的东西 干嘛要用别人的代码管理。
选最近成功的 Success点进去,选择
[Artifacts]
安装完 会提示重启服务,之后就可以使用了,挺方便的
优化
- 磁盘空间优化:
Administration
Build History Clean-up (right menu)
At the bottom select your project / build under "Manage cleanup rules for"
Click "Edit"
In the popup, select "Custom" for "Clean artifacts"
Put "3" in "Older than the -th successful build"
Save.
过程当中所用到的Linux命令
最后记录布置过程中所用到的Linux命令:
du -sh * 查看当前目录下各个文件及目录占用空间大小
lsof -n -i4TCP:8081 列出被占用的端口列表
mv <原目录> <新目录>
cp <原目录> <新目录>
ln -s <新目录> <原目录> 快捷指向 如果使用-s选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件;
find -name *launcher*
rm -rf <文件目录>
cat <文件>
tail file (显示文件file的最后10行)