Jenkins+Maven+Git搭建持續整合和自動化部署的配置手記(1)
前言
持續整合這個概念已經成為軟體開發的主流,可以更頻繁的進行測試,儘早發現問題並提示。自動化部署就更不用說了,可以加快部署速度,並可以有效減少人為操作的失誤。之前一直沒有把這個做起來,最近的新專案正好有機會,費了一番功夫總算搞好了,特此記錄。
1. 開發環境
我這邊建立的標準開發環境如下:
1. Maven做專案管理;
2. Git做程式碼管理;
3. SpringMVC+Spring+Mybatis搭建的程式框架;
4. Mysql作為資料儲存,Druid做連線池;
5. unitils作為測試框架;
6. Hibernate Validator作為資料驗證;
7. log4j作為日誌輸出。
8.centos6.5系統
注:其實這套東西非常像Grails,但不敢用太激進的技術和框架,擔心招人的問題-_-!
2. Jenkins的部署
Jenkins原名是Hudson,這個淵源這裡就不追溯了,網上多得是,但是千萬別下錯了,官網地址是http://jenkins-ci.org/。建議直接下載最新版本。
這個軟體的安裝是我見過最簡單的了,直接取war包放到tomcat下,啟動tomcat即可。相應的工程配置會在~/.jenkins目錄中。(當然你 根據官網給的那種安裝方法也行,只是在debian的那個弄法還要去下載openjdk等等,多下了很多東西,相關配置也按linux目錄標準分開的,還 要去找。)
另外提醒一下,建議把Jenkins安裝在Linux上,這樣就不會出現ssh等命令找不到的問題,否則還要想辦法去處理。
3. Jenkins的外掛
安裝好後直接訪問“http://yourhost:8080/jenkins”即可進入主介面,點選“系統管理”->“管理外掛”,首次進入都是空白的,要等1分鐘左右才能看到內容,在後臺估計是在做更新或者下載,然後重新再進此介面就能看到內容了。
3.1 Git外掛
在“可選外掛”中找到“GIT plugin”安裝,最下面有個安裝完重啟的勾選項,選中即可。這裡最搞笑的是檢測網路是否連通的辦法是去嘗試開啟google,豈不知天朝是打不開的,還好不影響下載。。。
3.2 Email外掛
這個事情非常蛋疼,之前測試怎麼都發布出來郵件,最後升級了一下預設外掛就行了,狂汗。在“可更新”中找到“Mailer Plugin”選中並更新即可。另外如果想有更豐富的郵件內容,就去“可選外掛”中安裝“Email Extension Plugin”,具體郵件內容配置網上大把可以搜。
3.3 其他外掛
預設就裝了很多常用外掛,比如Maven、Junit等等,如果使用感覺有問題可以嘗試升級一下版本,但是沒有升級說明,也不知道升級了什麼東西。
4. 系統設定
主介面點選“系統管理”->“系統設定”即可進入。重點配置以下內容:
1. Java、Git、Maven的目錄位置,確保可以正確找到命令;
2. Jenkins URL,自動生成的,檢查一下即可;
3. 郵件的設定。這裡注意一下,上面有一個“系統管理員郵件地址”需要填寫,另外“Extended E-mail Notification”中填寫配置,原來的“郵件配置”就不用再理會了。
5. 專案設定
在主介面直接“新建”,就會有一個新的專案。重點配置以下內容:
1. 原始碼管理:選擇Git,填寫“Repository URL”,並加上相應的“Credentials”,其中認證資訊用私鑰的話乾脆直接把私鑰內容填上去就行了,省的不知道目錄查詢規則還不知道出的啥問題。
2. 構建觸發器:這個地方要把“Build periodically”和“Poll SCM”都選上,時間格式都填寫成一樣的即可,比如“H/15 * * * *”,下面會有個具體執行時間的提示,Build動作會自動比Poll延遲3分40秒,這個設定還是很合理的。
3. 構建:增加兩個構建步驟,分別是“Execute shell”和“Invoke top-level Maven target”,注意先後順序,可以拖拽擺放的。指令碼執行根據自己需要,比如我需要去修改資料庫連線配置,官方建議是自己在工程裡面寫好指令碼,這裡直接調 用,而不是在這寫一個完整的指令碼。Maven構建就加上“clean test”即可,就是執行“mvn clean test”的命令。
4. Publish Junit test result report:在測試報告(XML)上加上“**/target/surefire-reports/*.xml”即可,這樣就會每次測試完自動找到測試 報告,在Jenkins上即可在每個構建結構裡面檢視到。
5. 郵件通知:在構建後增加“Editable Email Notification”,填寫郵件的接受者、內容格式可以直接用全域性變數,重點是配置一下傳送觸發條件。
6. 安全性配置
經過以上配置進行一次構建就會發現,Jenkins可以看到太多內容了,包括pull到的原始碼,所以非常有必要增加許可權控制。進入“系統管理”->“Configure Global Security”中進行如下步驟:
1. 啟用安全;
2. Jenkins專有使用者資料庫,先允許使用者註冊;
3. 授權策略選擇“安全矩陣”,新加一個“admin”的使用者,把所有許可權都開給admin使用者;
4. 在主介面的使用者中找到admin,進行配置,設定登陸密碼;
5. 先重新登陸測試一下是否admin正常,沒有問題就關閉允許使用者註冊,把匿名使用者的所有許可權都去掉。
7. 自動化部署
這裡我沒有讓Jenkins每次測試都去部署,一方面是考慮到單元測試基本已經滿足需要了,另一方面因為測試太頻繁了,一直部署也搞得Stage測試環境要經常重啟,反而影響正常的人工測試。所以自己寫了個指令碼,在必要的時候去執行一下去自動完成整個部署工作。
#!/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. 一個非常蛋疼的問題
這個和以上問題都無關,只是極其不解的是這個錯誤在Windows下不出現,在Linux下打成War也不會出現,只有在Linux下直接執行Maven test就會出錯。其實問題的根源就是配置書寫不夠規範,但是錯誤出現的不一致性實在讓人蛋疼。報錯如下:
1 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx
這個就是Mybatis找不到繫結的類,但是xml是正確打包的,怎麼看都是沒大問題,並且windows也是對的,最後發現是我在寫模糊路徑的時候,classpath後面必須要加個*才是標準寫法,正確寫法如下:
<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”/>
<!– 這裡是要掃描多個目錄下的檔案,必須宣告成“classpath*”,否則在某些情況下會報錯 –>
<property name=”mapperLocations” value=”classpath*:com/gzxitao/demo/*/dao/*.xml” />
</bean>
Maven權威指南_中文完整版清晰PDF http://www.linuxidc.com/Linux/2014-06/103690.htm
Maven 3.1.0 釋出,專案構建工具 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的分散式構建及部署——節點 http://www.linuxidc.com/Linux/2015-05/116903.htm
Jenkins 的詳細介紹:請點這裡
Jenkins 的下載地址:請點這裡
本文轉自 msj0905 51CTO部落格,原文連結:http://blog.51cto.com/sky66/1698382
相關文章
- 用 Travis CI 打造大前端持續整合和自動化部署前端
- Jenkins+Svn+Docker搭建持續整合環境 自動部署JenkinsDocker
- vuepress與travis-cli持續整合自動化部署Vue
- 持續整合持續部署持續交付_持續整合與持續部署之間的真正區別
- 微服務下的持續整合-Jenkins自動化部署GitHub專案微服務JenkinsGithub
- 對持續整合、 持續交付、持續部署和持續釋出的介紹
- 8 步搭建 Node.js+MongoDB 專案的自動化持續整合Node.jsMongoDB
- 在CentOS7上搭建Jenkins+Maven+Git持續整合環境的方法CentOSJenkinsMavenGit
- 自動化專案Jenkins持續整合Jenkins
- jenkins介面、UI自動化持續整合JenkinsUI
- iOS 持續整合系列 - 自動化 Code ReviewiOSView
- iOS 持續整合系列 – 自動化 Code ReviewiOSView
- 3 分鐘輕鬆搭建 Ruby 專案自動化持續整合
- 持續整合(CI)、自動化構建和自動化測試--初探 .
- 持續整合、持續部署、持續交付、持續釋出
- 持續整合、持續交付、持續部署簡介
- 《轉載》Jenkins持續整合-自動化部署指令碼的實現《python》Jenkins指令碼Python
- 談談持續整合,持續交付,持續部署之間的區別
- Windows 桌面應用自動和 Jenkins 持續整合WindowsJenkins
- 淺談持續整合(CI)、持續交付(CD)、持續部署(CD)
- 思考如何將自動化測試加入持續整合中
- 使用Jenkins持續整合前端專案並自動化部署到Nginx伺服器Jenkins前端Nginx伺服器
- 新夢想幹貨分享——持續整合的自動化測試
- 持續整合及部署利器:GoGo
- 通過Docker容器執行持續整合/持續部署Docker
- 持續整合配置之Nuget
- Jenkins持續整合配置Jenkins
- 持續整合指南:GitHubAction 自動構建+部署AspNetCore專案GithubNetCore
- Docker+Gitlab+Jenkins+Maven程式碼持續整合與自動部署DockerGitlabJenkinsMaven
- Gitlab Runner實現NetCore自動化持續整合GitlabNetCore
- Jenkins持續部署-Windows環境持續部署探究1JenkinsWindows
- 前端er,Jenkins持續化整合環境搭建前端Jenkins
- Docker+GitLab+Jenkins+kubernetes實現DevOps 持續化整合和持續化部署概念圖DockerGitlabJenkinsdev
- Jenkins持續部署-自動生成版本號Jenkins
- [譯] 自動化持續整合/持續分發,以節省更多時間編寫程式碼
- jenkins+ant+jmeter介面自動化的持續整合測試框架JenkinsJMeter框架
- 使用流水線外掛實現持續整合、持續部署
- CI/CD 持續整合部署實踐