首頁 > 軟體

Jenkins+Maven+Tomcat+SVN+Apache專案持續整合詳解

2020-06-16 16:53:55

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使用者。

生產環境建議更改至其他目錄,請參考我的另一篇文件  https://www.linuxidc.com/Linux/2018-03/151350.htm

至此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

關於curl的用法,請參考 curl 使用範例詳解 https://www.linuxidc.com/Linux/2017-12/149659.htm

二: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的使用請看我的另一篇文章 https://www.linuxidc.com/Linux/2018-03/151351.htm

如果啟動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軟體安裝完成。

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-03/151352.htm


IT145.com E-mail:sddin#qq.com