Jenkins

 持續集成工具 Jenkinsgit

從裝修廚房看項目開發效率優化

1.1 持續部署

裝修廚房

所有裝好以後發現燈不亮,電路有問題;冷熱水裝反了,管路有問題。這些問
題要解決就必須把地磚、牆磚拆掉——一個環節有問題,其餘環節跟着返工。
那怎麼作會好一些呢?
任何安裝完成及時測試,確保其能夠正常工做。程序員

 項目開發

開發過程當中進行單元測試可以經過,可是部署到服務器上運行出現問題。
那怎麼作會好一些呢?
僅僅單元測試還不夠,各個模塊都必須可以在服務器上運行。web

關注點

持續部署的關注點在於項目功能部署至服務器後能夠運行,爲下一步測試環節
或最終用戶正式使用作好準備。vim

1.2 持續集成

裝修廚房
裝修廚房時咱們須要鋪地磚,若是把全部地磚都切好再拿去鋪就會發現:每一
塊地磚單獨看都是好的,可是實際鋪的時候,把全部地磚整合起來,發現和廚房
地面整體尺寸不匹配,邊邊角角的地磚須要從新切,時間和物料成本陡然升高。
那怎麼作會好一些呢?
切一塊鋪一塊,根據須要的尺寸來切,儘早發現尺寸變化,避免返工。
項目開發
各個小組分別負責各個具體模塊開發,本模塊獨立測試雖然可以經過,可是上
線前夕將全部模塊整合到一塊兒集成測試卻發現不少問題,想要解決就須要把不少代
碼返工重寫並且仍然有可能有問題,但如今時間極可能不夠了。
那怎麼作會好一些呢?
常常性、頻繁的把全部模塊集成在一塊兒進行測試,有問題儘早發現,這就是持
續集成。
關注點
持續集成的關注點在於儘早發現項目總體運行問題,儘早解決。api

1.3 持續交付

裝修廚房
所有裝修好以後房屋主人來驗收,各項功能都正常,可是水龍頭的樣式主人不
喜歡,竈臺的位置主人不滿意,要求返工。

那怎麼作會好一些呢?瀏覽器


房屋主人隨時查看裝修進度,施工團隊及時調整。
項目開發
項目的各個升級版本之間間隔時間太長,對用戶反饋感知遲鈍,沒法精確改善
用戶體驗,用戶流失嚴重。
那怎麼作會好一些呢?
用小版本不斷進行快速迭代,不斷收集用戶反饋信息,用最快的速度改進優化。
關注點
持續交付的關注點在於研發團隊的最新代碼可以儘快讓最終用戶體驗到。tomcat

1.4 整體目標

好處 1:下降風險

一天中進行屢次的集成,並作了相應的測試,這樣有利於檢查缺陷,瞭解軟件
的健康情況,減小假定。安全

好處 2:減小重複過程

產生重複過程有兩個方面的緣由,一個是編譯、測試、打包、部署等等固定操
做都必需要作,沒法省略任何一個環節;另外一個是一個缺陷若是沒有及時發現,有
可能致使後續代碼的開發方向是錯誤的,要修復問題須要從新編寫受影響的全部代
碼。
而使用 Jenkins 等持續集成工具既能夠把構建環節從手動完成轉換爲自動化完
成,又能夠經過增長集成頻次儘早發現缺陷避免方向性錯誤。bash

好處 3:任什麼時候間、任何地點生成可部署的軟件

持續集成可讓您在任什麼時候間發佈能夠部署的軟件。從外界來看,這是持續集
成最明顯的好處,咱們能夠對改進軟件品質和減小風險提及來口若懸河,但對於客
戶來講,能夠部署的軟件產品是最實際的資產。利用持續集成,您能夠常常對源代
碼進行一些小改動,並將這些改動和其餘的代碼進行集成。若是出現問題,項目成
員立刻就會被通知到,問題會第一時間被修復。不採用持續集成的狀況下,這些問
題有可能到交付前的集成測試的時候才發現,有可能會致使延遲發佈產品,而在急
於修復這些缺陷的時候又有可能引入新的缺陷,最終可能致使項目失敗。服務器

好處 4:加強項目的可見性

持續集成讓咱們可以注意到趨勢並進行有效的決策。若是沒有真實或最新的數
據提供支持,項目就會遇到麻煩,每一個人都會提出他最好的猜想。一般,項目成員
經過手工收集這些信息,增長了負擔,也很耗時。持續集成能夠帶來兩點積極效果:

(1)有效決策:持續集成系統爲項目構建狀態和品質指標提供了及時的信息,
有些持續集成系統能夠報告功能完成度和缺陷率。
(2)注意到趨勢:因爲常常集成,咱們能夠看到一些趨勢,如構建成功或失敗、
整體品質以及其它的項目信息。

好處 5:創建團隊對開發產品的信心

持續集成能夠創建開發團隊對開發產品的信心,由於他們清楚的知道每一次構
建的結果,他們知道他們對軟件的改動形成了哪些影響,結果怎麼樣。

持續集成工具

2.1 Jenkins 和 Hudson

目前最流行的一款持續集成及自動化部署工具。
Jenkins 和 Hundson 之間的關係:2009 年,甲骨文收購了 Sun 並繼承了 Hudson 代
碼庫。在 2011 年年初,甲骨文和開源社區之間的關係破裂,該項目被分紅兩個獨立的
項目:
Jenkins:由大部分原始開發人員組成
Hudson:由甲骨文公司繼續管理
因此 Jenkins 和 Hudson 是兩款很是類似的產品。
2.2 技術組合
Jenkins 能夠整合 GitHub 或 Subversion
Husband 也能夠整合 GitHub 或 Subversion
兩者既然是同源的工具軟件,操做和指導思想就是接近的,因此本教程經過 Jenkins
爲你們呈現。

JavaEE 項目部署方式對比

 3.1 手動部署

3.2 自動化部署
「自動化」的具體體現:向版本庫提交新的代碼後,應用服務器上自動部署,用戶
或測試人員使用的立刻就是最新的應用程序。


搭建上述持續集成環境能夠把整個構建、部署過程自動化,很大程度上減輕工做量。
對於程序員的平常開發來講不會形成任何額外負擔——本身把代碼提交上去以後,服務
器上運行的立刻就是最新版本——一切都發生在無形中。
下面咱們講帶領你們一步一步搭建整套持續集成環境,這個操做過程只須要細心認
真便可,沒有任何難度。可是須要優秀的你具有如下前置知識:

Linux 基本操做命令和 VIM 編輯器使用
Maven 的項目構建管理
GitHub 或 SVN 使用

Jenkins+SVN 持續集成環境搭建

4.1 系統結構總述
建立虛擬機安裝 Linux 系統
版本控制子系統
Subversion 服務器
項目對應版本庫
版本庫中鉤子程序
持續集成子系統

JDK
Tomcat
Maven
Jenkins

主體程序
SVN 插件
Maven 插件
Deploy to Web Container 插件
應用發佈子系統
JDK
Tomcat
4.2 版本控制子系統
詳細過程咱們就省略了,這裏記錄一下版本庫的訪問帳號密碼

※特別提示:svnserve.conf 文件中 anon-access 必定要打開註釋並設置爲 none

4.3 應用發佈子系統
詳細過程一樣省略,僅記錄 Tomcat 服務器的帳號密碼
配置文件位置:/opt/tomcat/conf/tomcat-users.xml

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat_user" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status" />

4.4 Jenkins 主體程序安裝配置


把 jenkins.war 放在 Tomcat 解壓目錄/webapps 目錄下
打開 Tomcat 解壓目錄/server.xml 修改 URL 地址的編碼解碼字符集

vim /opt/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>

啓動 Tomcat 並經過瀏覽器訪問
網址示例:http://192.168.70.131:8080/jenkins

解鎖 Jenkins

依照提示,查看/root/.jenkins/secrets/initialAdminPassword 文件內容填入文本框
這裏填入的密文同時也是 admin 帳號的密碼。
選擇插件安裝方式

選擇哪一種方式都不會對後續操做有太大影響。由於有須要的插件咱們能夠在後
續有針對性的安裝。
本教程在這裏選擇「安裝推薦的插件」。
安裝過程以下:

打×的插件是因爲網絡傳輸致使的安裝失敗,後面再從新安裝便可。
※注意:這個步驟中若是選擇了安裝插件則 Linux 必須可以聯網。
新建帳號或以管理員身份繼續

能夠選擇使用 admin 帳戶繼續,後面有須要仍然有機會註冊新帳戶。
開始使用 Jenkins

 

4.5 系統初始化配置


系統管理界面

全局安全配置

 


全局工具配置:Maven Configuration

全局工具配置:JDK

 


全局工具配置:Maven

全局工具配置:Git[如有]
不使用 Git,因此刪除便可。

最後點擊 save 保存退出

4.6 安裝插件

 


安裝插件時受到網絡情況的影響有可能會失敗,沒關係,多試幾回,直到成功。
4.7 建立工程
4.7.1 建立工程

4.7.2 指定工程名稱和工程類型

4.7.3 源碼管理

這裏必定要再選一下!
配好的效果:

※注意:此時 Jenkins 的工做區中尚未代碼,須要執行一次構建操做以後
Jenkins 纔會下載代碼。
4.7.4 構建

4.7.5 構建後操做

這裏一樣必定要選一下!

4.7.6 手動構建

Jenkins 使用天氣情況來表示構建成功率

4.7.7 構建觸發器

遠程觸發的基本原理是 SVN 服務器給 Jenkins 項目特定的 URL 地址發送請求,
但必須以請求參數的形式攜帶一個特定值,這個特定值就是這裏的「身份驗證令牌」。
好比咱們這個項目的地址觸發地址是:

http://192.168.70.131:8080/jenkins/job/ProOne/build

身份驗證令牌是:
ATGUIGU_TOKEN
那麼最終的訪問地址就是:

http://192.168.70.131:8080/jenkins/job/ProOne/build?token=ATGUIGU_TOKEN

觸發訪問地址中 Jenkins 訪問地址是根據實際狀況改變的,項目名稱根據實際
狀況改變,其餘都不變。

4.8 獲取 crumb 值

攜帶 API Token 訪問下面地址:

http://admin:090d592c760bf922d554ed4b1abb2137@192.168.70.131:8080/jenkins/cr
umbIssuer/api/xml

則觸發 Jenkins 遠程構建時須要攜帶的請求消息頭就是:
Jenkins-Crumb:5dbccaf47a86bf5b675456f58855fe16

4.9 Linux 的 curl 命令

Linux 的 curl 命令用來發送 HTTP 請求。

-X 參數:指定請求方式
-v 參數:顯示響應結果
-u 參數:攜帶用戶名/密碼
-H 參數:攜帶請求消息頭信息
curl -X post -v -u [Jenkins 用 戶 名 ]:[Jenkins 密 碼 ] -H " 請 求 消 息 頭 信 息 " http://[ 服 務 器 IP 地 址 ]:[ 服 務 器 端 口
號]/jenkins/job/[Jenkins 項目名稱]/build?token=[身份驗證令牌]
curl
-X
post
-v
-u
admin:2f6bff33bda14baba83ba1c002045f05
"Jenkins-Crumb:88a12946e07d82b3b0d567c7c4610c9a"
http://192.168.70.131:8080/jenkins/job/ProOne/build?token=ATGUIGU_TOKEN
View Code 

4.10編輯 SVN 版本庫中的鉤子程序

鉤子程序由 post-commit.tmpl 複製獲得
這裏注意不要使用任何擴展名。若是按照咱們習慣的使用.sh 擴展名則鉤
子程序沒法正常工做。
記得使用 chmod 命令設置爲可執行權限
把原有內容註釋,加入 curl 命令

4.11 測試

在 Eclipse 中提交修改,在頁面上查看顯示內容變化

4.12補充

若是發生 Jenkins 服務器從 SVN 服務器下載代碼不是最新版的狀況,那麼就在 SVN
服務器的 URL 地址後面加上@HEAD 強制要求下載最新版。

enkins+GitHub 持續集成環境搭建

5.1 要點

Jenkins 與 GitHub 配合實現持續集成須要注意如下幾點:
第一:Jenkins 要部署到外網上,由於內網地址 GitHub 是沒法訪問到的。這一
點能夠經過租用阿里雲等平臺提供的雲服務器實現。
第二:Jenkins 所在的主機上須要安裝 Git,經過 Git 程序從 GitHub 上 clone 代
碼。
第三:在 Jenkins 內須要指定 Git 程序位置,和指定 JDK、Maven 程序位置很是
相似。
第四:在 GitHub 上使用每一個 repository 的 WebHook 方式遠程觸發 Jenkins 構建。
第五:在 Jenkins 內關閉「防止跨站點請求僞造」

5.2 Linux 環境下安裝 Git

第一步:安裝編譯 git 時須要的包
yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install -y gcc perl-ExtUtils-MakeMaker
第二步:刪除已有的 git
yum remove git
第三步:Git 官網下載 Git 最新版 tar 包,移動到/usr/src 目錄下
cd /usr/src
tar -zxvf git-2.9.3.tar.gz
第四步:編譯安裝
cd git-2.9.3
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc
第五步:檢查一下版本號
git --version

5.3 在 Jenkins 中指定 Git 程序位置

5.4 在 GitHub 上添加 WebHook

5.5 在 Jenkins 內關閉「防止跨站點請求僞造

相關文章
相關標籤/搜索