1. 程式人生 > >Jenkins +Maven+Tomcat+SVN +Apache項目持續集成構建

Jenkins +Maven+Tomcat+SVN +Apache項目持續集成構建

oot sha 2.x linux tab curl otto 車上 cnblogs

詳解Jenkins +Maven+Tomcat+SVN +Apache項目持續集成

一:前言

1. Jenkins

jenkins版本大全http://mirrors.jenkins-ci.org/

1.1 Jenkins持續集成簡介

持續集成(Continuous Integration)是一種軟件開發實踐,對於提高軟件開發效率並保障軟件開發質量提供了理論基礎。Jenkins 是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使持續集成變成可能。本文正是從持續集成的基本概念入手,通過具體實例,介紹了如何基於 Jenkins 快速搭建持續集成環境。

Jenkins是一個可擴展的持續集成引擎,是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。Jenkins非常易於安裝和配置,簡單易用。

1.2持續集成意義

1) 持續集成中的任何一個環節都是自動完成的,無需太多的人工幹預,有利於減少重復過程以節省時間、費用和工作量;

2) 持續集成保障了每個時間點上團隊成員提交的代碼是能成功集成的。換言之,任何時間點都能第一時間發現軟件的集成問題,使任意時間發布可部署的軟件成為了可能;

3) 持續集成還能利於軟件本身的發展趨勢,這點在需求不明確或是頻繁性變更的情景中尤其重要,持續集成的質量能幫助團隊進行有效決策,同時建立團隊對開發產品的信心。

1.3持續集成組件

1) 一個自動構建過程,包括自動編譯、分發、部署和測試;

2) 一個代碼存儲庫,即需要版本控制軟件來保障代碼的可維護性,同時作為構建過程的素材庫,例如SVN、GIT代碼庫;

3) 一個jenkins持續集成服務器。如下123.57.11.203服務器就是一個配置簡單和使用方便的持續集成服務器。

2.Maven

1)Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命周期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明確定義的項目對象模型來描述你的項目,然後Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件.

2)Maven 有一個生命周期,當你運行 mvn install 的時候被調用。這條命令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命周期。遍歷生命周期旅途中的一個影響就是,Maven 運行了許多默認的插件目標,這些目標完成了像編譯和創建一個 JAR 文件這樣的工作。能夠很方便的幫你管理項目報告,生成站點,管理JAR文件等。

3.Tomcat

1)Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。

2)配置正確時,Apache 為HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Apache服務器。

4.SVN

SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較於RCS、CVS,它采用了分支管理系統,它的設計目標就是取代CVS。互聯網上很多版本控制服務已從CVS遷移到Subversion。說得簡單一點SVN就是用於多個人共同開發同一個項目,共用資源的目的。

要註意的是SVN設計的時候只考慮了兼容Apache2.x,所以在Apache1.x下是不能正常工作的。

5.Apache

Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。

apache與Tomcat的區別

Apache是web服務器,Tomcat是應用(java)服務器,它只是一個servlet容器,是Apache的擴展。Apache和Tomcat都可以做為獨立的web服務器來運行,但是Apache不能解釋java程序(jsp,serverlet)。Apache是普通服務器,本身只支持html即普通網頁。不過可以通過插件支持php,還可以與Tomcat連通(單向Apache連接Tomcat,就是說通過Apache可以訪問Tomcat資源。反之不然)。兩者都是一種容器,只不過發布的東西不同:Apache是html容器,功能像IIS一樣;Tomcat是jsp/servlet容器,用於發布jsp及java的,類似的有IBM的webshere、EBA的Weblogic,sun的JRun等等。Apache和Tomcat是獨立的,在通一臺服務器上可以集成。Apache只支持靜態網頁,但像asp,php,cgi,jsp等動態網頁就需要Tomcat來處理。
打個比方:Apache是一輛卡車,上面可以裝一些東西如html等。但是不能裝水,要裝水必須要有容器(桶),Tomcat就是一個桶(裝像Java這樣的水),而這個桶也可以不放在卡車上。
Apache和Tomcat整合使用:如果客戶端請求的是靜態頁面,則只需要Apache服務器響應請求;如果客戶端請求動態頁面,則是Tomcat服務器響應請求;因為jsp是服務器端解釋代碼的,這樣整合就可以減少Tomcat的服務開銷 。

二:下載網址及安裝環境

1.下載網址

https://jenkins.io/download/ jenkins.war(WAR包)

技術分享圖片

技術分享圖片


https://pkg.jenkins.io/redhat/ Jenkins (RPM包)

技術分享圖片

https://pkg.jenkins.io/debian-stable/ Jenkins (DEB包)

技術分享圖片


http://maven.apache.org/download.cgi Maven下載

https://tomcat.apache.org/download-80.cgi Tomcat下載

http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK下載

2.本案例安裝環境

OS:Ubunutu 17.04

IP:192.168.44.132 (Tomcat+JDK+Jenkins+Maven)

IP:192.168.44.133 (SVN+Apache)

jenkins.war 本案例是結合Tomcat使用,使用war包,未使用deb包

apache-maven-3.5.2-bin.tar.gz

apache-tomcat-8.5.24.tar.gz

jdk-8u151-linux-x64.tar.gz

SVN和Apache SVN源碼非常麻煩,建議apt-get安裝,Apache也用apt-get安裝

三:安裝軟件

IP:192.168.44.132

tar zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/

tar zxvf apache-tomcat-8.5.24.tar.gz -C /usr/local/

tar zxvf apache-maven-3.5.2-bin.tar.gz -C /usr/local/

vi /etc/profile

設置Java變量

export JAVA_HOME=/usr/local/jdk1.8.0_151

export JRE_HOME=/usr/local/jdk1.8.0_151/jre

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/jdk1.8.0_151/bin

export CLASSPATH=./:/usr/local/jdk1.8.0_151/lib:/usr/local/jdk1.8.0_151/jre/lib

設置maven變量

export MAVEN_HOME=/usr/local/apache-maven-3.5.2
export PATH=${MAVEN_HOME}/bin:${PATH}

刷新變量

. /etc/profile

查看Java信息

root@ubuntu:/usr/local# java -version

java version "1.8.0_151"

Java(TM) SE Runtime Environment (build 1.8.0_151-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

查看maven版本

root@ubuntu:/usr/local# mvn -v

Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)

Maven home: /usr/local/apache-maven-3.5.2

Java version: 1.8.0_151, vendor: Oracle Corporation

Java home: /usr/local/jdk1.8.0_151/jre

Default locale: en_HK, platform encoding: UTF-8

OS name: "linux", version: "4.10.0-19-generic", arch: "amd64", family: "unix"

測試Tomcat是否正常

/usr/local/apache-tomcat-8.5.24/bin/startup.sh

瀏覽器窗口輸入: http://192.168.44.132:8080/

技術分享圖片

關閉Tomcat

/usr/local/apache-tomcat-8.5.24/bin/shutdown.sh

jenkins的配置

mkdir -p /data/postmall/tomcat/webapps

mv /usr/local/jenkins.war /data/postmall/tomcat/webapps/

本例是更改了Tomcat默認端口為8888,然後把appBase路徑更改為/data/postmall/tomcat/webapps,如下圖,更改後重新啟動Tomcat即可,在/data/postmall/tomcat/webapps下可看到多了一個jenkins的目錄,war包已被解開。

技術分享圖片

Tomcat中appBase,這個目錄表示:
1 這個目錄下面的子目錄將自動被部署為應用。
2 這個目錄下面的.war文件將被自動解壓縮並部署為應用

公司裏的測試環境一般是一個容器下跑多個項目,生產環境是一個容器跑一個項目。

給大家截圖看下我們公司的測試環境

技術分享圖片

給大家截圖看下我們公司的生產環境

技術分享圖片

在web頁面訪問

http://192.168.44.132:8888/jenkins

彈出的對話框

用戶名:admin

密碼:復制initialAdminPassword中的加密字符串

文件默認在安裝用戶的/root/.jenkins/secrets/initialAdminPassword中,並且是加密的方式存放,本例用的是root用戶。

技術分享圖片

生產環境建議更改至其他目錄,請參考我的另一篇文檔 http://blog.51cto.com/12943999/2054791

至此192.168.44.132軟件安裝完成。

IP:192.168.44.133

一:安裝軟件

apt-get install apache2

apt-get install subversion

apt-get install libapache2-svn

完成以上安裝,可以直接訪問apache的主頁,如http://localhost/

命令行下curl -I -m 15 -o /dev/null -s -w %{http_code} localhost

技術分享圖片

二:SVN的配置

1.建立svn倉庫

1). 建立svn目錄:mkdir -p /home/.svn/svnrepos/project (使用隱藏目錄,更安全)

2). 創建倉庫project:svnadmin create /home/.svn/svnrepos/project,執行完畢後project目錄有svnadmin創建的目錄和文件

2.配置和管理svn

1)倉庫的配置文件在/home/.svn/svnrepos/project/conf/下,先備份配置文件。註意:下面配置項的行都要頂格,否則會報錯。

cd /home/.svn/svnrepos/project/ && mkdir conf.bak && cp -rf conf/* conf.bak/ && vi conf/svnserve.conf

配置項在[general]下:

anon-access:匿名用戶的權限,可以設置為read,write和none,默認值read。不允許匿名用戶訪問:anon-access = none

auth-access:認證用戶的權限,可以為read,write和none,默認值write。

password-db:密碼數據庫的路徑,去掉前邊的#。

authz-db:認證規則庫的路徑,去掉前邊的#。

realm = /home/.svn/svnrepos/project 倉庫的目錄,去掉前面的#,默認不修改也行。

2)配置passwd文件

這是每個用戶的密碼文件,比較簡單,就是“用戶名=密碼”,采用的是明碼。例如:

allen=111111

bllen=222222

ellen=333333

3)配置authz文件

[groups] section:為了便於管理,可以將一些用戶放到一個組裏邊,比如:owner=allen,bllen

groups下邊的sections表示對一個目錄的認證規則,比如對根目錄的認證規則的section為[/]。設置單用戶的認證規則時一個用戶一行,在末尾添加,例如:

[/]

allen=rw   #allen對根目錄的權限為rw

bllen=rw #bllen對根目錄的權限為rw

ellen=r #bllen對根目錄的權限為r

如果使用group,需要在group名字前加@,在末尾添加

[/]

@owner=rw  #group owner中的用戶均為rw,等價於上邊的allen=rw,bllen=rw

*=r #除allen和bllen之外的所有用戶為只讀

3.啟動和停止svn服務

1). 啟動:

從svnrepos目錄啟動,svnserve -d -r /home/.svn/svnrepos/project,根目錄[/]是project

2). 測試訪問:

在瀏覽器輸入svn://192.168.44.133,在彈出的窗口中輸入用戶名和密碼

技術分享圖片

技術分享圖片

3). 停止:

killall svnserve

簡言之,每個倉庫的根目錄(/)就是自己的起始目錄; [/]適合於單倉庫的方式 ,不能跨越倉庫設置權限。

客戶端SVN的使用請看我的另一篇文章 http://blog.51cto.com/12943999/2053553

如果啟動SVN不能訪問,檢查配置文件裏用戶名密碼是否正確,也可以嘗試在設置-已保存數據裏把已保存的記錄全部刪除,再嘗試。

4). 修改端口

修改apache2端口

root@ubuntu:/etc/apache2# vi ports.conf

Listen 端口 #你想要的端口

<IfModule ssl_module>

Listen 443

</IfModule>

<IfModule mod_gnutls.c>

Listen 443

</IfModule>

如果你想修改SVN默認的端口

重新指定一個端口號(默認端口3690)比如修改為3691
svnserve -d –listen-port 3691 -r /home/.svn/svnrepos/project

配置完畢重啟/etc/init.d/apache2 restart

例如:把333.txt放到test文件夾,嘗試提交則提示驗證失敗,因為我們給ellen用戶的是讀取權限,不能寫入,用allen和bllen就可以。

技術分享圖片

至此192.168.44.133軟件安裝完成。


提供幾個寫的不錯的博客鏈接,大家可以看一下,互相學習,共同進步。

jenkins 安裝與配置

http://blog.51cto.com/kaliarch/2050862

jenkins 用戶權限配置

http://blog.csdn.net/ruisheng_412/article/details/8083035

jenkins 分布式配置

http://blog.sina.com.cn/s/blog_5d157a1d01017mut.html

Maven配置詳解:那麽請進

http://www.cnblogs.com/bigtall/archive/2011/03/23/1993253.html









Jenkins +Maven+Tomcat+SVN +Apache項目持續集成構建