The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          前言
              持續(xù)集成這個(gè)概念已經(jīng)成為軟件開發(fā)的主流,可以更頻繁的進(jìn)行測(cè)試,盡早發(fā)現(xiàn)問題并提示。自動(dòng)化部署就更不用說了,可以加快部署速度,并可以有效減少人為操作的失誤。之前一直沒有把這個(gè)做起來,最近的新項(xiàng)目正好有機(jī)會(huì),費(fèi)了一番功夫總算搞好了,特此記錄。

          1. 開發(fā)環(huán)境
              我這邊建立的標(biāo)準(zhǔn)開發(fā)環(huán)境如下:
              1. Maven做項(xiàng)目管理;
              2. Git做代碼管理;
              3. SpringMVC+Spring+Mybatis搭建的程序框架;
              4. Mysql作為數(shù)據(jù)存儲(chǔ),Druid做連接池;
              5. unitils作為測(cè)試框架;
              6. Hibernate Validator作為數(shù)據(jù)驗(yàn)證;

              7. log4j作為日志輸出。
              注:其實(shí)這套東西非常像Grails,但不敢用太激進(jìn)的技術(shù)和框架,擔(dān)心招人的問題-_-!

          2. Jenkins的部署
              Jenkins原名是Hudson,這個(gè)淵源這里就不追溯了,網(wǎng)上多得是,但是千萬別下錯(cuò)了,官網(wǎng)地址是http://jenkins-ci.org/。建議直接下載最新版本。

              這個(gè)軟件的安裝是我見過最簡單的了,直接取war包放到tomcat下,啟動(dòng)tomcat即可。相應(yīng)的工程配置會(huì)在~/.jenkins目錄中。(當(dāng)然你根據(jù)官網(wǎng)給的那種安裝方法也行,只是在debian的那個(gè)弄法還要去下載openjdk等等,多下了很多東西,相關(guān)配置也按linux目錄標(biāo)準(zhǔn)分開的,還要去找。)

              另外提醒一下,建議把Jenkins安裝在Linux上,這樣就不會(huì)出現(xiàn)ssh等命令找不到的問題,否則還要想辦法去處理。

          3. Jenkins的插件
              安裝好后直接訪問“http://yourhost:8080/jenkins”即可進(jìn)入主界面,點(diǎn)擊“系統(tǒng)管理”->“管理插件”,首次進(jìn)入都是空白的,要等1分鐘左右才能看到內(nèi)容,在后臺(tái)估計(jì)是在做更新或者下載,然后重新再進(jìn)此界面就能看到內(nèi)容了。

          3.1 Git插件
              在“可選插件”中找到“GIT plugin”安裝,最下面有個(gè)安裝完重啟的勾選項(xiàng),選中即可。這里最搞笑的是檢測(cè)網(wǎng)絡(luò)是否連通的辦法是去嘗試打開google,豈不知天朝是打不開的,還好不影響下載。。。

          3.2 Email插件
              這個(gè)事情非常蛋疼,之前測(cè)試怎么都發(fā)布出來郵件,最后升級(jí)了一下默認(rèn)插件就行了,狂汗。在“可更新”中找到“Mailer Plugin”選中并更新即可。另外如果想有更豐富的郵件內(nèi)容,就去“可選插件”中安裝“Email Extension Plugin”,具體郵件內(nèi)容配置網(wǎng)上大把可以搜。

          3.3 其他插件
              默認(rèn)就裝了很多常用插件,比如Maven、Junit等等,如果使用感覺有問題可以嘗試升級(jí)一下版本,但是沒有升級(jí)說明,也不知道升級(jí)了什么東西。


          4. 系統(tǒng)設(shè)置
              主界面點(diǎn)擊“系統(tǒng)管理”->“系統(tǒng)設(shè)置”即可進(jìn)入。重點(diǎn)配置以下內(nèi)容:
              1. Java、Git、Maven的目錄位置,確保可以正確找到命令;

              2. Jenkins URL,自動(dòng)生成的,檢查一下即可;
              3. 郵件的設(shè)置。這里注意一下,上面有一個(gè)“系統(tǒng)管理員郵件地址”需要填寫,另外“Extended E-mail Notification”中填寫配置,原來的“郵件配置”就不用再理會(huì)了。

          5. 項(xiàng)目設(shè)置
              在主界面直接“新建”,就會(huì)有一個(gè)新的項(xiàng)目。重點(diǎn)配置以下內(nèi)容:

              1. 源碼管理:選擇Git,填寫“Repository URL”,并加上相應(yīng)的“Credentials”,其中認(rèn)證信息用私鑰的話干脆直接把私鑰內(nèi)容填上去就行了,省的不知道目錄查找規(guī)則還不知道出的啥問題。

              2. 構(gòu)建觸發(fā)器:這個(gè)地方要把“Build periodically”和“Poll SCM”都選上,時(shí)間格式都填寫成一樣的即可,比如“H/15  * * * *”,下面會(huì)有個(gè)具體執(zhí)行時(shí)間的提示,Build動(dòng)作會(huì)自動(dòng)比Poll延遲3分40秒,這個(gè)設(shè)定還是很合理的。

              3. 構(gòu)建:增加兩個(gè)構(gòu)建步驟,分別是“Execute shell”和“Invoke top-level Maven target”,注意先后順序,可以拖拽擺放的。腳本執(zhí)行根據(jù)自己需要,比如我需要去修改數(shù)據(jù)庫連接配置,官方建議是自己在工程里面寫好腳本,這里直接調(diào)用,而不是在這寫一個(gè)完整的腳本。Maven構(gòu)建就加上“clean test”即可,就是運(yùn)行“mvn clean test”的命令。

              4. Publish Junit test result report:在測(cè)試報(bào)告(XML)上加上“**/target/surefire-reports/*.xml”即可,這樣就會(huì)每次測(cè)試完自動(dòng)找到測(cè)試報(bào)告,在Jenkins上即可在每個(gè)構(gòu)建結(jié)構(gòu)里面查看到。

              5. 郵件通知:在構(gòu)建后增加“Editable Email Notification”,填寫郵件的接受者、內(nèi)容格式可以直接用全局變量,重點(diǎn)是配置一下發(fā)送觸發(fā)條件。

          6. 安全性配置
              經(jīng)過以上配置進(jìn)行一次構(gòu)建就會(huì)發(fā)現(xiàn),Jenkins可以看到太多內(nèi)容了,包括pull到的源碼,所以非常有必要增加權(quán)限控制。進(jìn)入“系統(tǒng)管理”->“Configure Global Security”中進(jìn)行如下步驟:
              1. 啟用安全;

              2. Jenkins專有用戶數(shù)據(jù)庫,先允許用戶注冊(cè);
              3. 授權(quán)策略選擇“安全矩陣”,新加一個(gè)“admin”的用戶,把所有權(quán)限都開給admin用戶;
              4. 在主界面的用戶中找到admin,進(jìn)行配置,設(shè)置登陸密碼;
              5. 先重新登陸測(cè)試一下是否admin正常,沒有問題就關(guān)閉允許用戶注冊(cè),把匿名用戶的所有權(quán)限都去掉。

          7. 自動(dòng)化部署
              這里我沒有讓Jenkins每次測(cè)試都去部署,一方面是考慮到單元測(cè)試基本已經(jīng)滿足需要了,另一方面因?yàn)闇y(cè)試太頻繁了,一直部署也搞得Stage測(cè)試環(huán)境要經(jīng)常重啟,反而影響正常的人工測(cè)試。所以自己寫了個(gè)腳本,在必要的時(shí)候去運(yùn)行一下去自動(dòng)完成整個(gè)部署工作。
          #!/bin/sh 
            
          # update code 
          git pull 
            
          # package 
          mvn clean 
          mvn package -Dmaven.test.skip=true
            
          # deploy 
          WAR=`ls target | grep war` 
          TOMCAT=/home/test/apache-tomcat-6.0.41 
          mv target/$WAR $TOMCAT 
          cd $TOMCAT 
          # invoke another deploy script 
          sh deploy-war.sh $WAR webapps

           

          8. 一個(gè)非常蛋疼的問題
              這個(gè)和以上問題都無關(guān),只是極其不解的是這個(gè)錯(cuò)誤在Windows下不出現(xiàn),在Linux下打成War也不會(huì)出現(xiàn),只有在Linux下直接執(zhí)行Maven test就會(huì)出錯(cuò)。其實(shí)問題的根源就是配置書寫不夠規(guī)范,但是錯(cuò)誤出現(xiàn)的不一致性實(shí)在讓人蛋疼。報(bào)錯(cuò)如下:
          1 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx

              這個(gè)就是Mybatis找不到綁定的類,但是xml是正確打包的,怎么看都是沒大問題,并且windows也是對(duì)的,最后發(fā)現(xiàn)是我在寫模糊路徑的時(shí)候,classpath后面必須要加個(gè)*才是標(biāo)準(zhǔn)寫法,正確寫法如下:

              <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
                  <property name="basePackage" value="com.gzxitao.demo.*.dao"/> 
              </bean> 
            
              <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
                  <property name="dataSource" ref="dataSource"/> 
                  <property name="configLocation" value="classpath:configuration.xml"/> 
                  <!-- 這里是要掃描多個(gè)目錄下的文件,必須聲明成“classpath*”,否則在某些情況下會(huì)報(bào)錯(cuò) -->
                  <property name="mapperLocations" value="classpath*:com/gzxitao/demo/*/dao/*.xml" /> 
              </bean>

          Maven權(quán)威指南_中文完整版清晰PDF  http://www.linuxidc.com/Linux/2014-06/103690.htm

          Maven 3.1.0 發(fā)布,項(xiàng)目構(gòu)建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm

          Linux 安裝 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm

          Maven3.0 配置和簡單使用 http://www.linuxidc.com/Linux/2013-04/82939.htm

          Ubuntu下搭建sun-jdk和Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm

          Maven使用入門 http://www.linuxidc.com/Linux/2012-11/74354.htm

          Jenkins的分布式構(gòu)建及部署——節(jié)點(diǎn)  http://www.linuxidc.com/Linux/2015-05/116903.htm

          Jenkins 的詳細(xì)介紹請(qǐng)點(diǎn)這里
          Jenkins 的下載地址請(qǐng)點(diǎn)這里

          本文永久更新鏈接地址http://www.linuxidc.com/Linux/2015-06/118606.htm

          posted on 2015-06-12 10:59 Eric_jiang 閱讀(457) 評(píng)論(0)  編輯  收藏 所屬分類: Jeekins

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 自贡市| 同德县| 旬阳县| 龙山县| 靖江市| 临汾市| 洱源县| 高碑店市| 栾川县| 疏勒县| 界首市| 松潘县| 贵德县| 洛川县| 喜德县| 安顺市| 建始县| 佛坪县| 忻城县| 枣阳市| 孙吴县| 安泽县| 若羌县| 大邑县| 马鞍山市| 鄂尔多斯市| 永川市| 克什克腾旗| 济源市| 丽水市| 高雄市| 宜城市| 乌恰县| 东台市| 萨嘎县| 城市| 凤台县| 平舆县| 新龙县| 伊吾县| 马边|