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閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374