概述:公司經(jīng)歷了半年的穩(wěn)定,半年的擴張,業(yè)務(wù)流程已趨于完善。 為了進一步提升公司的研發(fā)效率,給予研發(fā)人員更多的不間斷思路,計劃上自動化構(gòu)建工具,替代研發(fā)人員打包過程,研發(fā)最重要的是什么?思路連貫性,不去做無用功,我們打一次包因為數(shù)量較多,一次得占用研發(fā)15~20分鐘左右 ,一但出什么錯誤重打 幾個小時過去,太坑爹。最終選型TeamCity勢在必行。
運行環(huán)境:Centos 7 + Android studio 所以 將分兩部去整理:
第一步、Android SDK for Linux
第二步、TeamCity for Linux
Android SDK for Linux
因為使用的服務(wù)器版本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
再接下來 配置環(huán)境變量
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(可升級)
需要根據(jù)自己項目的提前下載,命令如下:
//下載安裝 build-tools;27.0.3
[root@localhost /]# sdkmanager "build-tools;27.0.3"
安裝全后 teamcity編譯時才不會出問題,提前看好你工程所需的環(huán)境吧,后期會省事些,項目多 這里下載的東西就會多,所以之前有建議過這工具一定要下載在磁盤空間足夠多的地方,后繼到是可以再換地方,不過 要記得再次修改etc/profile環(huán)境變量。
至于ADB 用的不多,這里可以不用調(diào)式。
接下來開始安裝Teamcity
TeamCity for Linux
安裝
最新版本 2017.2.3
安裝環(huán)境要求:JDK 1.7 以上,如果你要使用的是 2016 最新的 TeamCity 9.1 的話,JDK 官網(wǎng)推薦的 1.8
-
開始安裝 (TeamCity-2017.2.3.tar)
- 解壓壓縮包(解壓速度有點慢):
tar zxf TeamCity-2017.2.3.tar - 下載的 tar.gz 的本質(zhì)是已經(jīng)里面捆綁了一個 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/]
- 如果訪問不了,請先關(guān)閉防火墻: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 的設(shè)置向?qū)В?br>
TeamCity 向?qū)?/div>
如上圖英文所示,TeamCity 的一些軟件安裝的配置、服務(wù)的配置默認都會放在:/root/.BuildServer
如果你要了解更多 TeamCity Data Directory 目錄 可以看官方:https://confluence.jetbrains.com/display/TCD10/TeamCity+Data+Directory仙居县| 甘泉县| 乐都县| 河南省| 和田县| 嘉鱼县| 健康| 达尔| 东台市| 蚌埠市| 富顺县| 古丈县| 娄底市| 金溪县| 德格县| 鱼台县| 卢氏县| 岐山县| 都昌县| 永胜县| 汝州市| 留坝县| 始兴县| 西昌市| 临桂县| 敦化市| 高清| 定日县| 庆安县| 东山县| 栾川县| 阳泉市| 织金县| 博野县| 呼和浩特市| 股票| 丽水市| 福鼎市| 裕民县| 象山县| 武清区|TeamCity 向?qū)?/div>如上圖英文所示,TeamCity 的一些構(gòu)建歷史、用戶信息、構(gòu)建結(jié)果等這類數(shù)據(jù)是需要放在關(guān)系型數(shù)據(jù)庫上的,而默認它給我們內(nèi)置了一個。
如果你要了解更多 TeamCity External Database,你可以看:https://confluence.jetbrains.com/display/TCD9/Setting+up+an+External+Database
首次使用,官網(wǎng)是建議使用默認的:
Internal(HSQLDB),這樣我們無需在一開始使用的就考慮數(shù)據(jù)庫遷移或安裝的問題,我們只要好好感受 TeamCity 給我們的,等我們決定要使用了,后續(xù)再更換數(shù)據(jù)也是可以的。但是內(nèi)置的有一個注意點:'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.'-
假設(shè)我們就選
Internal(HSQLDB),則在創(chuàng)建初始化數(shù)據(jù)庫的過程稍微需要點時間,我這邊是幾分鐘。
TeamCity 向?qū)?/div>
如上圖所示,接受下協(xié)議
TeamCity 向?qū)?/div>
創(chuàng)建一個頂級管理員賬號
TeamCity 向?qū)?/div>如上圖所示,安裝完首次進來地址:http://192.168.1.113:8111/profile.html?tab=userGeneralSettings
我們可以完善一些管理員信息和基礎(chǔ)配置信息,這些配置不配置都無所謂了,只是完善了可以更加好用而已
如果你有 SMTP 的郵箱,你可以來這里開啟郵件通知功能:http://192.168.1.113:8111/admin/admin.html?item=email
如果你要開啟通知功能那肯定下一步就是考慮通知內(nèi)容的模板要如何設(shè)定:https://confluence.jetbrains.com/display/TCD10/Customizing+Notifications
模板存放路徑在:
/root/.BuildServer/config/_notifications,用的是 FreeMarker 的語法項目配置
- 代碼環(huán)境 github + build.gradle
-
點擊右上角的 Administration 會進入TeamCity的配置環(huán)境 選擇create project創(chuàng)建項目
create project
填 入 github 資源庫地址 輸入用戶名密碼 驗證沒問題的話 會進入下一步
-
選擇編譯方式
編譯方式
我的是安卓,選gradle后Use selected
Build Steps
創(chuàng)建成功 就可以對gradle進行具體配置 點擊edit
具體配置
圖中已標示 只有三處需要更改:而其中要注意 填Gradle home path前 需要將Gradle Wrapper。取消選中才可,否則他會默認取項目中的gradle wrapper編譯。保存 完成gradle的配置
注意:也可以不取消Gradle Wrapper,系統(tǒng)會自動尋找 項目根目錄下的 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編譯沒問題了 那接下來 就是關(guān)于Build后的問題,點擊最左側(cè)的 [General Settings] 進入頁面
General Settings這里是兩處需要更改
- Build number format 關(guān)系到打包時的序號格式問題,系統(tǒng)默認是#1 #2 #3依次遞增的顯示,對于我的需求來講不夠用,我的設(shè)置如下:
%env.BUILD_START_DATE%-%env.BUILD_START_TIME%-%env.BUILD_VCS_LASTINCLUDED_REVISION%第一次安裝的TeamCity是無法這樣輸入 需要下插件:TeamCity GroovyPlug 后面說明如果安裝插件。
- Artifact paths 是關(guān)于打包后的路徑設(shè)置,至于怎么填 也沒細研究 硬性這樣寫吧 后繼再細看,如果有不懂的 可以點每一項后面的 問號 會被引導(dǎo)到官方說明文檔上,可惜全是英文,看起來可能會累一些。
+:**/* => target_directory -:**/folder1 => target_directory這里完成后設(shè)置就差不多了,項目是可以跑通,如果還有些個性化的設(shè)置那就要單獨設(shè)置了,比如 之前設(shè)置過了github URL,需要更改分支 需要點如下圖鏈接
Version Control Setting我涉及到的幾處如下
分支
是否checkout submodules
間隔多久自動checkout out 代碼
以上選項 顧名思義.還有很多設(shè)置可以選擇 用到時 可以再研究 ,現(xiàn)在可以Build Run了
Build運行
運行
如上圖顯示 代表初步配置成功,正在下載git代碼 前面的#20180329-182458-???就是剛才我們設(shè)置過的Build number format代表年月日- 時分秒.后面的問號,其實是代表著此次打包所提交的index 以方便識別打出的包對應(yīng)哪次代碼。而后面的顯示的狀態(tài)內(nèi)容是可以點進去的 如下圖
Run Overview
可以在這里看運行時的日志。如果失敗 在這里查找原因后解決即可
最終完成后 在總列表中顯示 Success ,在后面的Artifacts中可以下載到打好的包,
app/build/outputs/apk/****.apk
Success!??!關(guān)于Build run 有一處要注意的,builde.gradle一定會編譯release 的類型,如果找不到 會報錯,影響整個編譯的最終結(jié)果,所以 即便不會用到release也要找其它type代替
TeamCity插件
關(guān)于插件我使用的也不多,不過 在官網(wǎng)看到很多不同功能的插件 貌似很強大
https://plugins.jetbrains.com/teamcity
TeamCity插件-
查看清單 可以點右上角的
Administration在左側(cè)列表最下邊的Plugins List,這里列出了已安裝的插件,在這里可以進行開關(guān),下圖第一個 就是我之前提到過 標注日期等標識
TeamCity插件 -
安裝插件
安裝插件
上傳下載到的插件ZIP包即可。
Groovy plug 地址:trunk compatible with TeamCity 2017.1+
點進去 乍一看需要登錄 其實可以選擇右下角的guest用戶登錄,省去了注冊的麻煩,再進去 還是一個teamcity,想想也對 自家的東西 干嘛要用別人的代碼管理。
下載
選最近成功的 Success點進去,選擇[Artifacts]
下載安裝完 會提示重啟服務(wù),之后就可以使用了,挺方便的
優(yōu)化
- 磁盤空間優(yōu)化:
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.
過程當(dāng)中所用到的Linux命令
最后記錄布置過程中所用到的Linux命令:
du -sh * 查看當(dāng)前目錄下各個文件及目錄占用空間大小 lsof -n -i4TCP:8081 列出被占用的端口列表 mv <原目錄> <新目錄> cp <原目錄> <新目錄> ln -s <新目錄> <原目錄> 快捷指向 如果使用-s選項創(chuàng)建符號連接,則“源文件”可以是文件或者目錄。創(chuàng)建硬連接時,則“源文件”參數(shù)只能是文件; find -name *launcher* rm -rf <文件目錄> cat <文件> tail file (顯示文件file的最后10行)最后編輯于 :?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。2贊3贊贊賞手機看全文





















