TeamCity for Linux 过程整理

概述:公司经历了半年的稳定,半年的扩张,业务流程已趋于完善。 为了进一步提升公司的研发效率,给予研发人员更多的不间断思路,计划上自动化构建工具,替代研发人员打包过程,研发最重要的是什么?思路连贯性,不去做无用功,我们打一次包因为数量较多,一次得占用研发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

仅获取命令行工具 SDK.png

使用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

  • 下载地址:https://www.jetbrains.com/teamcity/download/

  • 安装环境要求: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 的一些构建历史、用户信息、构建结果等这类数据是需要放在关系型数据库上的,而默认它给我们内置了一个。

  • 如果你要了解更多 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) ,则在创建初始化数据库的过程稍微需要点时间,我这边是几分钟。

    TeamCity 向导

    如上图所示,接受下协议
    TeamCity 向导

    创建一个顶级管理员账号
    TeamCity 向导

  • 如上图所示,安装完首次进来地址: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创建项目


    create project

    填 入 github 资源库地址 输入用户名密码 验证没问题的话 会进入下一步

  • 选择编译方式


    编译方式

    我的是安卓,选gradle后Use selected


    Build Steps

    创建成功 就可以对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] 进入页面

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,需要更改分支 需要点如下图链接


Version Control Setting

我涉及到的几处如下


分支

是否checkout submodules

间隔多久自动checkout out 代码

以上选项 顾名思义.还有很多设置可以选择 用到时 可以再研究 ,现在可以Build Run了

Build运行

运行

如上图显示 代表初步配置成功,正在下载git代码 前面的 #20180329-182458-??? 就是刚才我们设置过的 Build number format 代表 年月日- 时分秒.后面的问号,其实是代表着此次打包所提交的index 以方便识别打出的包对应哪次代码。

而后面的显示的状态内容是可以点进去的 如下图


Run Overview

可以在这里看运行时的日志。如果失败 在这里查找原因后解决即可

最终完成后 在总列表中显示 Success ,在后面的Artifacts中可以下载到打好的包,
app/build/outputs/apk/****.apk

Success

!!!关于Build run 有一处要注意的,builde.gradle一定会编译release 的类型,如果找不到 会报错,影响整个编译的最终结果,所以 即便不会用到release也要找其它type代替

TeamCity插件

关于插件我使用的也不多,不过 在官网看到很多不同功能的插件 貌似很强大
https://plugins.jetbrains.com/teamcity

TeamCity插件

  • 查看清单 可以点右上角的Administration 在左侧列表最下边的 Plugins List ,这里列出了已安装的插件,在这里可以进行开关,下图第一个 就是我之前提到过 标注日期等标识

    TeamCity插件

  • 安装插件


    安装插件

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