1. 程式人生 > >持續整合:TeamCity 的安裝和使用

持續整合:TeamCity 的安裝和使用

持續整合:TeamCity 的安裝和使用

Source

  • TeamCity

本文初衷

  • 讓大家瞭解持續整合(CI),以及入門瞭解 JetBrains 家的 TeamCity 的一些簡單實用。
  • TeamCity 的一些複雜使用我暫時也不會,一樣也是要看文件的,所以不管怎樣你都要養成看官網文件的習慣。
  • TeamCity 和 Jenkins、Hudson 其實是非常一樣的,基本流程都是差不多的,所以如果你會其他的幾個 CI 工具的話,學習起來很快。
  • Docker 已經開始在引入到 CI、CD(持續交付)過程中,可以大大簡化整體的過程,也許這是未來的一個方向,有興趣的可以瞭解更多。

它是什麼

  • 官網定義(就一句話):Powerful Continuous Integration out of the box
  • 官網首頁:https://www.jetbrains.com/teamcity/
  • 官網特性總結:https://www.jetbrains.com/teamcity/features/
  • 百度百科:http://baike.baidu.com/view/3703414.htm
  • 官網文件:https://confluence.jetbrains.com/display/TCD9/TeamCity+Documentation
  • 支援的平臺、環境如下圖(看不懂也沒關係,只要知道它最友好的是 Java 開發即可):
  • TeamCity
  • 對上圖的具體講解可以看(很重要):https://confluence.jetbrains.com/display/TCD9/Supported+Platforms+and+Environments

為什麼會出現

  • TeamCity 的出現需要了解這個概念:持續整合(Continuous Integration)
  • 百科定義:http://baike.baidu.com/view/5253255.htm
  • 網路文章:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html

哪些人喜歡它

  • 持續整合學習筆記-入門篇(1)持續整合基本概念
  • 7 reasons why you should be using Continuous Integration
  • What is CI and why use it?

哪些人不喜歡它

  • Google 不到結果,應該是沒人不喜歡,只是有些人用不慣

為什麼學習它

  • 更好地保證專案質量

同類工具

  • 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
  • 好的網路文章介紹:
    • 持續整合工具的選擇

TeamCity 入門

  • 先來看一段官網的介紹視訊
  • 這個視訊其實已經很清楚地說明了一個整理流程是怎樣的,我今天只是做一個更加清晰的細節講解而已
  • 你需要穿越:https://www.youtube.com/watch?v=J-iYMMG6jmc#action=share

TeamCity 安裝部署(Linux 環境)

  • 在我講之前,如果你英文還可以,就到官網這裡看下:
  • Installation Quick Start
  • 安裝環境要求:
    • JDK 1.7 以上,如果你要使用的是 2016 最新的 TeamCity 9.1 的話,JDK 官網推薦的 1.8
  • 安裝包下載:https://www.jetbrains.com/teamcity/download/#section=linux-version
  • 開始安裝(eg:TeamCity-9.1.6.tar.gz):
    • 解壓壓縮包(解壓速度有點慢):tar zxf TeamCity-9.1.6.tar.gz
    • 解壓完的目錄結構講解:https://confluence.jetbrains.com/display/TCD9/TeamCity+Home+Directory
    • 下載的 tar.gz 的本質是已經裡面捆綁了一個 Tomcat,所以如果你會 Tomcat 的話,有些東西你可以自己改的。
    • 按我個人習慣,把解壓縮的目錄放在 usr 目錄下:mv TeamCity/ /usr/program/
    • 進入解壓目錄:cd /usr/program/TeamCity/
    • 啟動程式:/usr/program/TeamCity/bin/runAll.sh start
    • 停止程式:/usr/program/TeamCity/bin/runAll.sh stop
    • 啟動需要點時間,最好能給它一兩分鐘吧

首次進入

  • 假設我們已經啟動了 TeamCity
  • 訪問(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 /usr/program/TeamCity/conf/server.xml

    <Connector port="8111" ...

  • 在假設你已經可以訪問的情況,我們開始進入 TeamCity 的設定嚮導:
  • TeamCity 嚮導

    • 如上圖英文所示,TeamCity 的一些軟體安裝的配置、服務的配置預設都會放在:/root/.BuildServer
    • 如果你要了解更多 TeamCity Data Directory 目錄,你可以看:https://confluence.jetbrains.com/display/TCD9/TeamCity+Data+Directory
  • 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 嚮導

    • 如上圖所示,我們要建立一個頂級管理員賬號,我個人習慣測試的賬號是:admin123456
  • 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/TCD9//Customizing+Notifications
    • 模板存放路徑在:/root/.BuildServer/config/_notifications,用的是 FreeMarker 的語法

專案的構建、管理

  • 建議可以看下官網:https://confluence.jetbrains.com/display/TCD9/Configure+and+Run+Your+First+Build
  • 現在讓我們開始建立一個專案進行構建
  • 專案管理地址:http://192.168.1.113:8111/admin/admin.html?item=projects
  • 假設我現在有一個專案的結構是這樣的:

    • Youshop-Parent,輸出是 pom
      • Youshop-manage,輸出是 pom
        • Youshop-pojo,輸出 jar
  • 我們現在以 Youshop-pojo 為例,讓它自動構建併發布到 Nexus 中,其他專案道理是一樣的,這裡就不多說。
  • TeamCity 嚮導
  • 如上圖,由於目前只要是公司的專案都應該是在版本控制的,所以這裡我們選擇:Create project from URL
  • TeamCity 嚮導
  • 如上圖,我們可以看出 TeamCity 也支援 HTTP、SVN、Git 等連結方式。
  • TeamCity 嚮導
  • 輸入你專案託管商的賬號密碼,我這裡用的是 oschina 的。
  • TeamCity 嚮導
  • 賬號、密碼驗證通過,現在可以給這個專案配置一個專案基本資訊。
  • TeamCity 嚮導
  • 在從版本控制中下載檔案和掃描檔案
  • TeamCity 嚮導
  • TeamCity 自動掃描到我是用 Maven 構建的專案,所以把 POM 檔案找出來了,如果你一個專案有多種構建方式,有對應的配置檔案的話,這裡都會顯示出來的。
  • 我們勾選 Maven 前面的複選框,點選:Use Selected
  • TeamCity 嚮導
  • 由於我們的目標是構建完自動釋出到 Nexus,所以我們的 Maven Goals 應該是:clean install deploy,這裡我們應該點選:Edit,進行編輯。
  • 如果你不懂 Maven Goals,那你需要學習下,這個很重要。

    • 官網:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
  • TeamCity 嚮導

    • 如上圖,這臺伺服器必須裝有 Maven、JDK
    • 如上圖,Goals 我們的目標是 clean install deploy
    • 如上圖,Maven Home 我建議是自己自定義路徑,這樣肯定不會有問題。所以你伺服器上的 Maven 安裝路徑是什麼你就在這裡填寫上去。Maven 目前支援的最高版本是:3.2.5
      • 下載 Maven 3.2.5:http://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/
    • 如上圖,Java Parameters 我建議也是自己自定義路徑,別選擇其他選項。
  • TeamCity 嚮導

    • 如上圖,點選 run,開始手動構建該專案
  • TeamCity 嚮導

    • 如上圖,我們看到簡略的構建日誌
  • TeamCity 嚮導
  • TeamCity 嚮導

    • 如上 2 張圖,我們看到詳細的構建內容
  • TeamCity 嚮導

    • 如上圖,當我們版本控制中有提交的時候,TeamCity 會識別到記錄
  • TeamCity 嚮導

    • 如上圖,我們可以看到提交的 Commit Message 資訊。
    • 如上圖,右邊紅圈的三個按鈕是用來處理這次提交的,常用的是第一次按鈕,點選對此次版本進行構建
  • TeamCity 嚮導

    • 如上圖,如果你要看所有的提交記錄,可以在 Change Log 看到並且指定版本構建
  • TeamCity 嚮導

    • 如上圖,如果在你不想要這個專案的時候可以進行刪除
  • TeamCity 嚮導

    • 如上圖,因為 Goals 裡面有 deploy 命令,所以構建完成會發布到 Nexus 中,這樣團隊的人就可以用到最新的程式碼了
  • TeamCity 嚮導

    • 如上 gif 圖演示,專案常去的幾個配置地方就是這樣些了

配置自動構建觸發行為

  • 官網提供的觸發行為有:https://confluence.jetbrains.com/display/TCD9/Configuring+Build+Triggers
  • 下面我們舉例說常見的:VCS TriggerSchedule Trigger
  • TeamCity 嚮導

    • 如上圖,點選 Add new trigger 新增觸發器
  • TeamCity 嚮導

    • 如上圖,常見的觸發器就這些了
  • TeamCity 嚮導

    • 如上圖,配置好 VCS Trigger 效果是,當我們有程式碼提交的時候,TeamCity 檢查到新版本之後自動構建,這個最常用
  • TeamCity 嚮導

    • 如上圖,Schedule Trigger 的作用就是定時構建,除了常用的幾個輸入框設定定時外,TeamCity 還可以使用 Cron 語法進行設定
    • TeamCity 採用的 Cron 語法是 Quartz,具體你可以看:Quartz CronTrigger Tutorial
    • 如果你不懂 Cron 語法那就算了,但是我想做 Java 這個應該要會的

整合 IntelliJ IDEA

  • 安裝 IntelliJ IDEA:https://confluence.jetbrains.com/display/TCD9/IntelliJ+Platform+Plugin
  • TeamCity 嚮導

    • 如上圖,我們可以直接連上 TeamCity 伺服器,這裡的使用者名稱密碼是 TeamCity 的賬號系統。
  • TeamCity 嚮導

    • 如上圖,連上去的效果是這裡會打鉤
  • TeamCity 嚮導

    • 如上圖,我們可以直接把別人提交的內容做 patch 直接用 IntelliJ IDEA 進行整合
    • 還有其他很多結合玩法大家可以自己去嘗試下

其他

  • TeamCity 的外掛列表:https://confluence.jetbrains.com/display/TW/TeamCity+Plugins
  • 使用外部資料庫:
    • 使用外部資料庫:https://confluence.jetbrains.com/display/TCD9/Setting+up+an+External+Database
    • 遷移到外部資料庫:https://confluence.jetbrains.com/display/TCD9/Migrating+to+an+External+Database
  • 資料備份:https://confluence.jetbrains.com/display/TCD9/TeamCity+Data+Backup
  • 程式碼檢查功能:
    • https://confluence.jetbrains.com/display/TCD9/Code+Quality+Tools
    • https://confluence.jetbrains.com/display/TCD9/Code+Quality+Tools#CodeQualityTools-IntelliJIDEA-poweredCodeAnalysisTools
    • https://confluence.jetbrains.com/pages/viewpage.action?pageId=74847276

原文出處:簡