概述:公司經歷了半年的穩定,半年的擴張,業務流程已趨于完善。 為了進一步提升公司的研發效率,給予研發人員更多的不間斷思路,計劃上自動化構建工具,替代研發人員打包過程,研發最重要的是什么?思路連貫性,不去做無用功,我們打一次包因為數量較多,一次得占用研發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 向導
如上圖英文所示,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)
,則在創建初始化數據庫的過程稍微需要點時間,我這邊是幾分鐘。
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] 進入頁面
這里是兩處需要更改
- 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
,這里列出了已安裝的插件,在這里可以進行開關,下圖第一個 就是我之前提到過 標注日期等標識
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行)