<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

    基于 Jenkins 快速搭建持續(xù)集成環(huán)境

    持續(xù)集成概述

    什么是持續(xù)集成

    隨著軟件開發(fā)復(fù)雜度的不斷提高,團(tuán)隊(duì)開發(fā)成員間如何更好地協(xié)同工作以確保軟件開發(fā)的質(zhì)量已經(jīng)慢慢成為開發(fā)過程中不可回避的問題。尤其是近些年來,敏捷(Agile) 在軟件工程領(lǐng)域越來越紅火,如何能再不斷變化的需求中快速適應(yīng)和保證軟件的質(zhì)量也顯得尤其的重要。

    持續(xù)集成正是針對(duì)這一類問題的一種軟件開發(fā)實(shí)踐。它倡導(dǎo)團(tuán)隊(duì)開發(fā)成員必須經(jīng)常集成他們的工作,甚至每天都可能發(fā)生多次集成。而每次的集成都是通過自動(dòng)化的構(gòu)建來驗(yàn)證,包括自動(dòng)編譯、發(fā)布和測試,從而盡快地發(fā)現(xiàn)集成錯(cuò)誤,讓團(tuán)隊(duì)能夠更快的開發(fā)內(nèi)聚的軟件。

    持續(xù)集成的核心價(jià)值在于:

    1. 持續(xù)集成中的任何一個(gè)環(huán)節(jié)都是自動(dòng)完成的,無需太多的人工干預(yù),有利于減少重復(fù)過程以節(jié)省時(shí)間、費(fèi)用和工作量;
    2. 持續(xù)集成保障了每個(gè)時(shí)間點(diǎn)上團(tuán)隊(duì)成員提交的代碼是能成功集成的。換言之,任何時(shí)間點(diǎn)都能第一時(shí)間發(fā)現(xiàn)軟件的集成問題,使任意時(shí)間發(fā)布可部署的軟件成為了可能;
    3. 持續(xù)集成還能利于軟件本身的發(fā)展趨勢,這點(diǎn)在需求不明確或是頻繁性變更的情景中尤其重要,持續(xù)集成的質(zhì)量能幫助團(tuán)隊(duì)進(jìn)行有效決策,同時(shí)建立團(tuán)隊(duì)對(duì)開發(fā)產(chǎn)品的信心。

    持續(xù)集成的原則

    業(yè)界普遍認(rèn)同的持續(xù)集成的原則包括:

    1)需要版本控制軟件保障團(tuán)隊(duì)成員提交的代碼不會(huì)導(dǎo)致集成失敗。常用的版本控制軟件有 IBM Rational ClearCase、CVS、Subversion 等;

    2)開發(fā)人員必須及時(shí)向版本控制庫中提交代碼,也必須經(jīng)常性地從版本控制庫中更新代碼到本地;

    3)需要有專門的集成服務(wù)器來執(zhí)行集成構(gòu)建。根據(jù)項(xiàng)目的具體實(shí)際,集成構(gòu)建可以被軟件的修改來直接觸發(fā),也可以定時(shí)啟動(dòng),如每半個(gè)小時(shí)構(gòu)建一次;

    4)必須保證構(gòu)建的成功。如果構(gòu)建失敗,修復(fù)構(gòu)建過程中的錯(cuò)誤是優(yōu)先級(jí)最高的工作。一旦修復(fù),需要手動(dòng)啟動(dòng)一次構(gòu)建。

    持續(xù)集成系統(tǒng)的組成

    由此可見,一個(gè)完整的構(gòu)建系統(tǒng)必須包括:

    1. 一個(gè)自動(dòng)構(gòu)建過程,包括自動(dòng)編譯、分發(fā)、部署和測試等。
    2. 一個(gè)代碼存儲(chǔ)庫,即需要版本控制軟件來保障代碼的可維護(hù)性,同時(shí)作為構(gòu)建過程的素材庫。
    3. 一個(gè)持續(xù)集成服務(wù)器。本文中介紹的 Jenkins 就是一個(gè)配置簡單和使用方便的持續(xù)集成服務(wù)器。

    回頁首

    Jenkins 簡介

    Jenkins 是一個(gè)開源項(xiàng)目,提供了一種易于使用的持續(xù)集成系統(tǒng),使開發(fā)者從繁雜的集成中解脫出來,專注于更為重要的業(yè)務(wù)邏輯實(shí)現(xiàn)上。同時(shí) Jenkins 能實(shí)施監(jiān)控集成中存在的錯(cuò)誤,提供詳細(xì)的日志文件和提醒功能,還能用圖表的形式形象地展示項(xiàng)目構(gòu)建的趨勢和穩(wěn)定性。下面將介紹 Jenkins 的基本功能。

    Jenkins 的安裝非常簡單,只需要從 Jenkins 的主頁上下載最新的 jenkins.war 文件然后運(yùn)行 java -jar jenkins.war。同時(shí),還可以點(diǎn)擊 Jenkins 頁面上的 launch 按鈕完成下載和運(yùn)行 Jenkins。

    圖 1. Jenkins Launch 按鈕
    圖 1. Jenkins Launch 按鈕

    啟動(dòng) Jenkins 后,會(huì)有一個(gè)后臺(tái)進(jìn)程在命令行模式下運(yùn)行。此時(shí)在瀏覽器地址欄中打開 http://localhost:8080 就可以看到 Jenkins 的頁面了。Jenkins 的可貴之處在于具有非常高的可用性,從它的界面中能很輕松地完成各種配置,更多的配置和使用信息,可以在 Jenkins 的官方網(wǎng)站上查詢。

    圖 2. 命令行模式下運(yùn)行 Jenkins
    圖 2. 命令行模式下運(yùn)行 Jenkins
    圖 3. Jenkins 主界面
    圖 3. Jenkins 主界面

    非常有趣的是,Jenkins 還提供了非常豐富的插件支持,這使得 Jenkins 變得越來越強(qiáng)大。我們可以方便的安裝各種第三方插件,從而方便快捷的集成第三方的應(yīng)用。比如 Jenkins 提供了對(duì)于 IBM Rational ClearCase 的插件支持。

    圖 4. Jenkins 可以集成 ClearCase 插件
    圖 4. Jenkins 可以集成 ClearCase 插件

    此外,Jenkins 提供了豐富的管理和配置的功能,包括系統(tǒng)配置、管理插件、查看系統(tǒng)信息、系統(tǒng)日志、節(jié)點(diǎn)管理、Jenkins 命令行窗口、信息統(tǒng)計(jì)等功能。試試看,您就會(huì)發(fā)現(xiàn) Jenkins 非常好上手使用。

    圖 5. Jenkins 提供了豐富的管理功能
    圖 5. Jenkins 提供了豐富的管理功能

    回頁首

    基于 Jenkins 快速搭建持續(xù)集成環(huán)境

    正如前文中所描述的那樣,一個(gè)持續(xù)集成環(huán)境需要包括三個(gè)方面要素:代碼存儲(chǔ)庫、構(gòu)建過程和持續(xù)集成服務(wù)器。對(duì) Jenkins 有了初步了解后,我們通過一個(gè)實(shí)例來集中展示如何快速搭建一個(gè)簡單的基于 Jenkins 的持續(xù)集成環(huán)境。

    假設(shè)我們使用的代碼存儲(chǔ)庫是 IBM Rational ClearCase。Jenkins 提供了對(duì) ClearCase 的插件支持,它能方便地讓我們連接到 Base ClearCase 或者 UCM ClearCase,使其成為 Jenkins Project 的代碼控制器。另外,這個(gè)插件是基于 cleartool 命令的,所以必須在 Jenkins 的持續(xù)集成服務(wù)器上安裝 ClearCase 的客戶端程序。

    在 Jenkins 的插件管理界面中選擇 ClearCase Plugin,點(diǎn)擊頁面下方的 Install 按鈕。

    圖 6. 選擇 ClearCase 插件
    圖 6. 選擇 ClearCase 插件

    在打開的頁面中提示安裝完成后,Jenkins 需要重新啟動(dòng)來激活這個(gè)插件。重新執(zhí)行 java -jar Jenkins.war 后,在 Jenkins 的頁面中,我們就能看到 ClearCase plugin 已經(jīng)被安裝到 Jenkins 了。

    圖 7. ClearCase 插件安裝成功
    圖 7. ClearCase 插件安裝成功

    類似 IBM Rational ClearCase,SVN(subversion)是目前比較流行的版本管理工具。很多開源軟件都是用 SVN 作為代碼版本管理軟件。為了讓實(shí)例更具有代表性,本文中我們使用 SVN 作為代碼存儲(chǔ)器。

    接下來,我們開始新建一個(gè) Jenkins 項(xiàng)目, 由于我們需要連接 SVN 的代碼存儲(chǔ)器, 我們選擇 Build a free-style software project。

    圖 8. 新建 JenkinsTest Job
    圖 8. 新建 JenkinsTest Job

    然后我們就可以很方便的配置這個(gè) JenkinsTest 項(xiàng)目了。Jenkins 很人性化的一點(diǎn)是在每個(gè)配置項(xiàng)的右側(cè)都有一個(gè)幫助的圖標(biāo),點(diǎn)擊這個(gè)圖標(biāo),Jenkins 會(huì)告訴您如何配置這個(gè)配置項(xiàng)。

    圖 9. 配置 JenkinsTest
    圖 9. 配置 JenkinsTest

    根據(jù)實(shí)際的 SVN 服務(wù)器服務(wù)器信息配置 Source Code Management,這能讓 Jenkins 知道如何從哪里獲取最新的代碼。本例中假設(shè) Repository 就在本地。

    圖 10. 配置連接到 SVN 服務(wù)器
    圖 10. 配置連接到 SVN 服務(wù)器

    根據(jù)開發(fā)需要,假設(shè)每一個(gè)小時(shí)我們需要重新構(gòu)建一次。選擇 Build periodically,在 Schedule 中填寫 0 * * * *。

    第一個(gè)參數(shù)代表的是分鐘 minute,取值 0~59;

    第二個(gè)參數(shù)代表的是小時(shí) hour,取值 0~23;

    第三個(gè)參數(shù)代表的是天 day,取值 1~31;

    第四個(gè)參數(shù)代表的是月 month,取值 1~12;

    最后一個(gè)參數(shù)代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

    所以 0 * * * * 表示的就是每個(gè)小時(shí)的第 0 分鐘執(zhí)行一次構(gòu)建。

    圖 11. 選擇如何觸發(fā)構(gòu)建
    圖 11. 選擇如何觸發(fā)構(gòu)建

    接下來就是要添加 build 的步驟了。Jenkins 提供了四個(gè)選項(xiàng)供我們選擇,可以根據(jù)需要執(zhí)行或調(diào)用外部命令和腳本。

    圖 12. 四種 build step 供選擇
    圖 12. 四種 build step 供選擇

    在本例中,我們通過調(diào)用和執(zhí)行 Windows batch command,將 SVN repository 中 Java 代碼編譯并生成 Jar 文件。也可以根據(jù)項(xiàng)目的實(shí)際編寫自己的 shell 腳本配置在這里。

    圖 13. 配置 Execute Windows batch command
    圖 13. 配置 Execute Windows batch command

    選擇和配置其他的選項(xiàng),比如郵件提醒,然后點(diǎn)擊 save 保存。

    圖 14. 配置郵件提醒
    圖 14. 配置郵件提醒

    接下來的每小時(shí)的第 0 分鐘,JenkinsTest Job 就會(huì)被構(gòu)建。我們可以在 Jenkins 中觀察構(gòu)建的進(jìn)度和最終的狀態(tài)——成功或者失敗。太陽代表之前的構(gòu)建沒有任何失敗,藍(lán)色的小球代表構(gòu)建成功。

    圖 15. JenkinsTest 開始構(gòu)建
    圖 15. JenkinsTest 開始構(gòu)建

    同時(shí)我們可以點(diǎn)擊 JenkinsTest 查看單次構(gòu)建的 Console 的輸出結(jié)果。從中我們能看到構(gòu)建的第一步是從 SVN 服務(wù)器上 check out 代碼,然后調(diào)用我們先前配置的 Windows batch command。

    圖 16. JenkinsTest 構(gòu)建的 console 輸出
    圖 16. JenkinsTest 構(gòu)建的 console 輸出

    最后,我們可以看到 build 的最后結(jié)果 Success,表明本次構(gòu)建成功。

    圖 17. 構(gòu)建成功的 Console 輸出
    圖 17. 構(gòu)建成功的 Console 輸出

    接下來我們?cè)俅涡陆ㄒ粋€(gè) Jenkins 的 Job,用于將生成的 build 分發(fā)到不同的節(jié)點(diǎn)上。這次 build triggers 我們選擇 Build after other projects are built,讓這個(gè) Job 在 JenkinsTest 成功 build 后觸發(fā)。這樣一來就能達(dá)到我們自動(dòng) build 和自動(dòng)分發(fā)的功能。

    圖 18. 新建 Distribute job
    圖 18. 新建 Distribute job

    不同的是,這次我們選擇調(diào)用 Ant 腳本來完成分發(fā)的工作。只需要將 Ant 腳本的 XML 的文件配置在 Targets 中供 Jenkins 調(diào)用。

    圖 19. Distribute 調(diào)用外部 Ant 腳本
    圖 19. Distribute 調(diào)用外部 Ant 腳本

    然后我們就可以在 Jenkins 中觀察構(gòu)建的狀態(tài)了。一旦構(gòu)建失敗我們能看到相應(yīng)的警示圖標(biāo),同時(shí),如果配置了郵件提醒,相關(guān)人員也會(huì)受到郵件。記住我們先前所提醒的那樣,分析和處理構(gòu)建的失敗是優(yōu)先級(jí)最高的工作。接下來,我們還可以加入更多的 Jenkins 項(xiàng)目來實(shí)現(xiàn)自動(dòng)化測試等功能,讓持續(xù)集成更方便有效地服務(wù)于項(xiàng)目開發(fā)。

    圖 20. 查看持續(xù)集成狀態(tài)
    圖 20. 查看持續(xù)集成狀態(tài)

    回頁首

    結(jié)束語

    本文簡單介紹了持續(xù)集成的概念并著重介紹了如何基于 Jenkins 快速構(gòu)建持續(xù)集成環(huán)境。通過具體實(shí)例的描述,相信讀者對(duì) Jenkins 的基本功能和實(shí)現(xiàn)方法有個(gè)更清楚地認(rèn)識(shí)和理解。其實(shí),Jenkins 的功能遠(yuǎn)不至文中所述的這些,Jenkins 還有詳盡的日志處理和持續(xù)集成構(gòu)建狀態(tài)的分析等功能。希望在進(jìn)一步的學(xué)習(xí)和應(yīng)用中與大家分享。

    posted on 2014-03-12 11:24 順其自然EVO 閱讀(555) 評(píng)論(0)  編輯  收藏 所屬分類: 持續(xù)集成

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 日韩在线观看免费完整版视频| 久久精品国产精品亚洲色婷婷| 妞干网手机免费视频| 亚洲视频中文字幕| 亚洲成Av人片乱码色午夜| 日本红怡院亚洲红怡院最新| 亚洲中文字幕久久精品无码喷水 | 亚洲精品国产第一综合99久久 | 美女网站免费福利视频| 免费福利视频导航| 国产亚洲精品免费视频播放| 成在线人视频免费视频 | 亚洲中文字幕乱码AV波多JI | 亚洲成AV人片在线观看| 亚洲AV无码乱码国产麻豆| 亚洲狠狠综合久久| 亚洲国产精品免费在线观看| 狠狠综合久久综合88亚洲| 国产亚洲3p无码一区二区| 亚洲第一区精品观看| 亚洲性猛交XXXX| 亚洲精品线在线观看| 亚洲免费闲人蜜桃| 亚洲国产成人久久精品大牛影视 | 亚洲AV无码码潮喷在线观看| 亚洲一区免费观看| 亚洲人成图片网站| 亚洲明星合成图综合区在线| 亚洲人精品亚洲人成在线| 老子影院午夜伦不卡亚洲| 亚洲精品视频免费观看| 久久久久久久99精品免费观看| 最近2019免费中文字幕视频三| 男女免费观看在线爽爽爽视频| 日韩视频在线免费| 成人免费午间影院在线观看| 一个人免费日韩不卡视频| 蜜桃视频在线观看免费网址入口| 亚洲精品视频在线观看免费| 99久热只有精品视频免费看| 在线观看AV片永久免费|