本文初衷
- 讓大家了解持續(xù)集成(CI)眯漩,以及入門(mén)了解 JetBrains 家的 TeamCity 的一些簡(jiǎn)單實(shí)用。
- TeamCity 的一些復(fù)雜使用我暫時(shí)也不會(huì)吨娜,一樣也是要看文檔的脓匿,所以不管怎樣你都要養(yǎng)成看官網(wǎng)文檔的習(xí)慣。
- TeamCity 和 Jenkins宦赠、Hudson 其實(shí)是非常一樣的陪毡,基本流程都是差不多的,所以如果你會(huì)其他的幾個(gè) CI 工具的話勾扭,學(xué)習(xí)起來(lái)很快缤骨。
- Docker 已經(jīng)開(kāi)始在引入到 CI、CD(持續(xù)交付)過(guò)程中尺借,可以大大簡(jiǎn)化整體的過(guò)程,也許這是未來(lái)的一個(gè)方向精拟,有興趣的可以了解更多燎斩。
它是什么
官網(wǎng)定義(就一句話):
Powerful Continuous Integration out of the box
官網(wǎng)首頁(yè):https://www.jetbrains.com/teamcity/
官網(wǎng)特性總結(jié):https://www.jetbrains.com/teamcity/features/
官網(wǎng)文檔:https://confluence.jetbrains.com/display/TCD9/TeamCity+Documentation
支持的平臺(tái)虱歪、環(huán)境如下圖(看不懂也沒(méi)關(guān)系,只要知道它最友好的是 Java 開(kāi)發(fā)即可):
對(duì)上圖的具體講解可以看(很重要):https://confluence.jetbrains.com/display/TCD9/Supported+Platforms+and+Environments
為什么會(huì)出現(xiàn)
- TeamCity 的出現(xiàn)需要了解這個(gè)概念:持續(xù)集成(Continuous Integration)
- 百科定義:http://baike.baidu.com/view/5253255.htm
- 網(wǎng)絡(luò)文章:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html
哪些人不喜歡它
- Google 不到結(jié)果栅表,應(yīng)該是沒(méi)人不喜歡笋鄙,只是有些人用不慣
為什么學(xué)習(xí)它
- 更好地保證項(xiàng)目質(zhì)量
同類工具
- Jenkins:http://jenkins-ci.org/
- Travis CI:http://travis-ci.org/
- Bamboo:http://www.atlassian.com/software/bamboo
- Hudson:http://hudson-ci.org/
- QuickBuild:http://www.pmease.com/
- 其他:http://www.oschina.net/project/tag/344/ci?lang=0&os=0&sort=view&p=1
- 好的網(wǎng)絡(luò)文章介紹:
TeamCity 入門(mén)
- 先來(lái)看一段官網(wǎng)的介紹視頻
- 這個(gè)視頻其實(shí)已經(jīng)很清楚地說(shuō)明了一個(gè)整理流程是怎樣的,我今天只是做一個(gè)更加清晰的細(xì)節(jié)講解而已
- 你需要穿越:https://www.youtube.com/watch?v=J-iYMMG6jmc#action=share
TeamCity 安裝部署(Linux 環(huán)境)
- 在我講之前怪瓶,如果你英文還可以萧落,就到官網(wǎng)這里看下:
- Installation Quick Start
- 安裝環(huán)境要求:
- JDK 1.7 以上,如果你要使用的是 2016 最新的 TeamCity 9.1 的話洗贰,JDK 官網(wǎng)推薦的 1.8
- 安裝包下載:https://www.jetbrains.com/teamcity/download/#section=linux-version
- 開(kāi)始安裝(eg:TeamCity-9.1.6.tar.gz):
- 解壓壓縮包(解壓速度有點(diǎn)慢):
tar zxf TeamCity-9.1.6.tar.gz
- 解壓完的目錄結(jié)構(gòu)講解:https://confluence.jetbrains.com/display/TCD9/TeamCity+Home+Directory
- 下載的 tar.gz 的本質(zhì)是已經(jīng)里面捆綁了一個(gè) Tomcat找岖,所以如果你會(huì) Tomcat 的話,有些東西你可以自己改的敛滋。
- 按我個(gè)人習(xí)慣许布,把解壓縮的目錄放在 usr 目錄下:
mv TeamCity/ /usr/program/
- 進(jìn)入解壓目錄:
cd /usr/program/TeamCity/
- 啟動(dòng)程序:
/usr/program/TeamCity/bin/runAll.sh start
- 停止程序:
/usr/program/TeamCity/bin/runAll.sh stop
- 啟動(dòng)需要點(diǎn)時(shí)間,最好能給它一兩分鐘吧
- 解壓壓縮包(解壓速度有點(diǎn)慢):
首次進(jìn)入
- 假設(shè)我們已經(jīng)啟動(dòng)了 TeamCity
- 訪問(wèn)(TeamCity 默認(rèn)端口是:8111):http://192.168.1.113:8111/
- 如果訪問(wèn)不了绎晃,請(qǐng)先關(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
- 如果你要改變端口蜜唾,找到下面這個(gè) 8111 位置:
vim /usr/program/TeamCity/conf/server.xml
<Connector port="8111" ...
在假設(shè)你已經(jīng)可以訪問(wèn)的情況,我們開(kāi)始進(jìn)入 TeamCity 的設(shè)置向?qū)В?/p>
-
- 如上圖英文所示庶艾,TeamCity 的一些軟件安裝的配置袁余、服務(wù)的配置默認(rèn)都會(huì)放在:
/root/.BuildServer
- 如果你要了解更多 TeamCity Data Directory 目錄,你可以看:https://confluence.jetbrains.com/display/TCD9/TeamCity+Data+Directory
- 如上圖英文所示庶艾,TeamCity 的一些軟件安裝的配置袁余、服務(wù)的配置默認(rèn)都會(huì)放在:
-
- 如上圖英文所示咱揍,TeamCity 的一些構(gòu)建歷史颖榜、用戶信息、構(gòu)建結(jié)果等這類數(shù)據(jù)是需要放在關(guān)系型數(shù)據(jù)庫(kù)上的述召,而默認(rèn)它給我們內(nèi)置了一個(gè)朱转。
- 如果你要了解更多 TeamCity External Database,你可以看:https://confluence.jetbrains.com/display/TCD9/Setting+up+an+External+Database
- 首次使用积暖,官網(wǎng)是建議使用默認(rèn)的:
Internal(HSQLDB)
藤为,這樣我們無(wú)需在一開(kāi)始使用的就考慮數(shù)據(jù)庫(kù)遷移或安裝的問(wèn)題,我們只要好好感受 TeamCity 給我們的夺刑,等我們決定要使用了缅疟,后續(xù)再更換數(shù)據(jù)也是可以的。但是內(nèi)置的有一個(gè)注意點(diǎn):'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ù)庫(kù)的過(guò)程稍微需要點(diǎn)時(shí)間存淫,我這邊是幾分鐘。
-
- 如上圖所示沼填,接受下協(xié)議
-
- 如上圖所示桅咆,我們要?jiǎng)?chuàng)建一個(gè)頂級(jí)管理員賬號(hào),我個(gè)人習(xí)慣測(cè)試的賬號(hào)是:
admin
坞笙,123456
- 如上圖所示桅咆,我們要?jiǎng)?chuàng)建一個(gè)頂級(jí)管理員賬號(hào),我個(gè)人習(xí)慣測(cè)試的賬號(hào)是:
-
- 如上圖所示岩饼,安裝完首次進(jìn)來(lái)地址:http://192.168.1.113:8111/profile.html?tab=userGeneralSettings
- 我們可以完善一些管理員信息和基礎(chǔ)配置信息荚虚,這些配置不配置都無(wú)所謂了,只是完善了可以更加好用而已
- 如果你有 SMTP 的郵箱籍茧,你可以來(lái)這里開(kāi)啟郵件通知功能:http://192.168.1.113:8111/admin/admin.html?item=email
- 如果你要開(kāi)啟通知功能那肯定下一步就是考慮通知內(nèi)容的模板要如何設(shè)定:https://confluence.jetbrains.com/display/TCD9//Customizing+Notifications
- 模板存放路徑在:
/root/.BuildServer/config/_notifications
版述,用的是 FreeMarker 的語(yǔ)法
項(xiàng)目的構(gòu)建、管理
- 建議可以看下官網(wǎng):https://confluence.jetbrains.com/display/TCD9/Configure+and+Run+Your+First+Build
- 現(xiàn)在讓我們開(kāi)始創(chuàng)建一個(gè)項(xiàng)目進(jìn)行構(gòu)建
- 項(xiàng)目管理地址:http://192.168.1.113:8111/admin/admin.html?item=projects
- 假設(shè)我現(xiàn)在有一個(gè)項(xiàng)目的結(jié)構(gòu)是這樣的:
- Youshop-Parent寞冯,輸出是 pom
- Youshop-manage渴析,輸出是 pom
- Youshop-pojo,輸出 jar
我們現(xiàn)在以 Youshop-pojo 為例吮龄,讓它自動(dòng)構(gòu)建并發(fā)布到 Nexus 中俭茧,其他項(xiàng)目道理是一樣的,這里就不多說(shuō)螟蝙。
如上圖恢恼,由于目前只要是公司的項(xiàng)目都應(yīng)該是在版本控制的,所以這里我們選擇:Create project from URL
如上圖胰默,我們可以看出 TeamCity 也支持 HTTP场斑、SVN、Git 等鏈接方式牵署。
輸入你項(xiàng)目托管商的賬號(hào)密碼漏隐,我這里用的是 oschina 的。
賬號(hào)奴迅、密碼驗(yàn)證通過(guò)青责,現(xiàn)在可以給這個(gè)項(xiàng)目配置一個(gè)項(xiàng)目基本信息。
在從版本控制中下載文件和掃描文件
TeamCity 自動(dòng)掃描到我是用 Maven 構(gòu)建的項(xiàng)目取具,所以把 POM 文件找出來(lái)了脖隶,如果你一個(gè)項(xiàng)目有多種構(gòu)建方式,有對(duì)應(yīng)的配置文件的話暇检,這里都會(huì)顯示出來(lái)的产阱。
我們勾選 Maven 前面的復(fù)選框,點(diǎn)擊:
Use Selected
由于我們的目標(biāo)是構(gòu)建完自動(dòng)發(fā)布到 Nexus块仆,所以我們的 Maven Goals 應(yīng)該是:
clean install deploy
构蹬,這里我們應(yīng)該點(diǎn)擊:Edit
,進(jìn)行編輯悔据。-
如果你不懂 Maven Goals庄敛,那你需要學(xué)習(xí)下,這個(gè)很重要科汗。
-
- 如上圖藻烤,這臺(tái)服務(wù)器必須裝有 Maven、JDK
- 如上圖,
Goals
我們的目標(biāo)是clean install deploy
- 如上圖隐绵,
Maven Home
我建議是自己自定義路徑之众,這樣肯定不會(huì)有問(wèn)題。所以你服務(wù)器上的 Maven 安裝路徑是什么你就在這里填寫(xiě)上去依许。Maven 目前支持的最高版本是:3.2.5- 下載 Maven 3.2.5:http://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/
- 如上圖,
Java Parameters
我建議也是自己自定義路徑缀蹄,別選擇其他選項(xiàng)峭跳。
-
- 如上圖,點(diǎn)擊
run
缺前,開(kāi)始手動(dòng)構(gòu)建該項(xiàng)目
- 如上圖,點(diǎn)擊
-
- 如上圖蛀醉,我們看到簡(jiǎn)略的構(gòu)建日志
-
- 如上 2 張圖,我們看到詳細(xì)的構(gòu)建內(nèi)容
-
- 如上圖衅码,當(dāng)我們版本控制中有提交的時(shí)候拯刁,TeamCity 會(huì)識(shí)別到記錄
-
- 如上圖,我們可以看到提交的 Commit Message 信息逝段。
- 如上圖垛玻,右邊紅圈的三個(gè)按鈕是用來(lái)處理這次提交的,常用的是第一次按鈕奶躯,點(diǎn)擊對(duì)此次版本進(jìn)行構(gòu)建
-
- 如上圖帚桩,如果你要看所有的提交記錄,可以在 Change Log 看到并且指定版本構(gòu)建
-
- 如上圖嘹黔,如果在你不想要這個(gè)項(xiàng)目的時(shí)候可以進(jìn)行刪除
-
- 如上圖账嚎,因?yàn)?Goals 里面有 deploy 命令,所以構(gòu)建完成會(huì)發(fā)布到 Nexus 中儡蔓,這樣團(tuán)隊(duì)的人就可以用到最新的代碼了
-
- 如上 gif 圖演示郭蕉,項(xiàng)目常去的幾個(gè)配置地方就是這樣些了
配置自動(dòng)構(gòu)建觸發(fā)行為
官網(wǎng)提供的觸發(fā)行為有:https://confluence.jetbrains.com/display/TCD9/Configuring+Build+Triggers
下面我們舉例說(shuō)常見(jiàn)的:
VCS Trigger
、Schedule Trigger
-
- 如上圖喂江,點(diǎn)擊
Add new trigger
添加觸發(fā)器
- 如上圖喂江,點(diǎn)擊
-
- 如上圖召锈,常見(jiàn)的觸發(fā)器就這些了
-
- 如上圖,配置好
VCS Trigger
效果是开呐,當(dāng)我們有代碼提交的時(shí)候烟勋,TeamCity 檢查到新版本之后自動(dòng)構(gòu)建,這個(gè)最常用
- 如上圖,配置好
-
- 如上圖筐付,
Schedule Trigger
的作用就是定時(shí)構(gòu)建卵惦,除了常用的幾個(gè)輸入框設(shè)置定時(shí)外,TeamCity 還可以使用 Cron 語(yǔ)法進(jìn)行設(shè)置 - TeamCity 采用的 Cron 語(yǔ)法是 Quartz瓦戚,具體你可以看:Quartz CronTrigger Tutorial
- 如果你不懂 Cron 語(yǔ)法那就算了沮尿,但是我想做 Java 這個(gè)應(yīng)該要會(huì)的
- 如上圖筐付,
集成 IntelliJ IDEA
安裝 IntelliJ IDEA:https://confluence.jetbrains.com/display/TCD9/IntelliJ+Platform+Plugin
-
- 如上圖,我們可以直接連上 TeamCity 服務(wù)器,這里的用戶名密碼是 TeamCity 的賬號(hào)系統(tǒng)畜疾。
-
- 如上圖赴邻,連上去的效果是這里會(huì)打鉤
-
- 如上圖,我們可以直接把別人提交的內(nèi)容做 patch 直接用 IntelliJ IDEA 進(jìn)行整合
- 還有其他很多結(jié)合玩法大家可以自己去嘗試下
其他
- TeamCity 的插件列表:https://confluence.jetbrains.com/display/TW/TeamCity+Plugins
- 使用外部數(shù)據(jù)庫(kù):
- 使用外部數(shù)據(jù)庫(kù):https://confluence.jetbrains.com/display/TCD9/Setting+up+an+External+Database
- 遷移到外部數(shù)據(jù)庫(kù):https://confluence.jetbrains.com/display/TCD9/Migrating+to+an+External+Database
- 數(shù)據(jù)備份:https://confluence.jetbrains.com/display/TCD9/TeamCity+Data+Backup
- 代碼檢查功能: