Jenkins+Maven+SVN+Nexus 搭建持續集成環境
標籤(空格分隔): Jenkins
[TOC]
##一、DevOps
DevOps是“開發”和“運維”的縮寫。
DevOps是一組最佳實踐強調(IT研發、運維、測試)在應用和服務生命週期中的協作和溝通,強調整個組織的合作以及交付和基礎設施變更的自動化,從而實現持續集成、持續部署和持續交付
DevOps平臺四大模塊
1.項目管理 (創建項目--->>項目需求)
2.運維平臺 (監控--日誌收集---等)
3.持續交付 (提交完代碼--->自動打包--->構建)
4.代碼託管 (gitlab---->代碼提交)
————————————————————>>DevOps平臺
針對DevOps開源項目
1.項目管理---(JIRA非開源但是用的人比較多)、(Redmine使用ruby寫的)
2.代碼託管---(SVN--usvn有web管理界面)、(GitLab)
3.持續交付---(主流Jenkins)、(GitLab gitlab-ci也可以做交付)
4.運維平臺---(國內的開源運維平臺可能就是騰訊藍鯨)
<br>
</br>
<br>
</br>
##二、服務介紹
很多事情不是光運維就可以決定的,還需要跟研發交流,我這裏只是演示一個大概的持續交付的流程~
2.1 Jenkins介紹Jenkins
只是一個平臺,真正運作的都是插件。這就是jenkins流行的原因,因爲jenkins什麼插件都有Hudson
是Jenkins的前身,是基於Java開發的一種持續集成工具,用於監控程序重複的工作,Hudson後來被收購,成爲商業版。後來創始人又寫了一個jenkins,jenkins在功能上遠遠超過hudson
<br>
</br>
2.2 Maven 介紹
maven的用途
maven是一個項目構建和管理的工具,提供了幫助管理 構建、文檔、報告、依賴、scms、發佈、分發
的方法。可以方便的編譯代碼、進行依賴管理、管理二進制庫等等。
maven的好處在於可以將項目過程規範化、自動化、高效化以及強大的可擴展性
利用maven自身及其插件還可以獲得代碼檢查報告、單元測試覆蓋率、實現持續集成等等。
maven的核心概念介紹
Pom
pom是指project object Model。pom是一個xml,在maven2裏爲pom.xml。是maven工作的基礎,在執行task或者goal時,maven會去項目根目錄下讀取pom.xml獲得需要的配置信息pom文件中包含了項目的信息和maven build項目所需的配置
Artifact
這個有點不好解釋,大致說就是一個項目將要產生的文件,可以是jar文件,源文件,二進制文件,war文件,甚至是pom文件。每個artifact都由groupId:artifactId:version組成的標識符唯一識別。需要被使用(依賴)的artifact都要放在倉庫(見Repository)中Repositories
Repositories是用來存儲Artifact的。如果說我們的項目產生的Artifact是一個個小工具,那麼Repositories就是一個倉庫,裏面有我們自己創建的工具,也可以儲存別人造的工具,我們在項目中需要使用某種工具時,在pom中聲明dependency,編譯代碼時就會根據dependency去下載工具(Artifact),供自己使用。Build Lifecycle
是指一個項目build的過程。maven的Build
Lifecycle分爲三種,分別爲default(處理項目的部署)、clean(處理項目的清理)、site(處理項目的文檔生成)。他們都包含不同的lifecycle。
Build Lifecycle是由phases構成的....
參考:關於Maven常用參數及說明
<br>
</br>
2.3 SVN介紹
SVN是近年來崛起的非常優秀的版本管理工具,與CVS管理工具一樣,SVN是一個固態的跨平臺的開源的版本控制系統。SVN版本管理工具管理者隨時間改變的各種數據。這些數據放置在一箇中央資料檔案庫repository
中,這個檔案庫很像一個普通的文件服務器或者FTP服務器,但是,與其他服務器不同的是,SVN會備份並記錄每個文件每一次的修改更新變動。這樣我們就可以把任意一個時間點的檔案恢復到想要的某一箇舊的版本,當然也可以直接瀏覽指定的更新歷史記錄。
本站相關文章
SVN服務實戰應用指南
VisualSVN 遷移至Linux SVN+Apache+ssl集成LDAP
<br>
</br>
2.4 Nexus介紹
maven的倉庫只有兩大類:1.本地倉庫 2.遠程倉庫,在遠程倉庫中又分成了3種:1 中央倉庫 <br/>2 私服 <br/>3 其它公共庫。
私服是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在該構件,則從外部的遠程倉庫下載,緩存在私服上之後,再爲Maven的下載請求提供服務。我們還可以把一些無法從外部倉庫下載到的構件上傳到私服上。
Maven私服的 個特性:
- [ ] 1.節省自己的外網帶寬:減少重複請求造成的外網帶寬消耗
- [ ] 2.加速Maven構件:如果項目配置了很多外部遠程倉庫的時候,構建速度就會大大降低
- [ ] 3.部署第三方構件:有些構件無法從外部倉庫獲得的時候,我們可以把這些構件部署到內部倉庫(私服)中,供內部maven項目使用
- [ ] 4.提高穩定性,增強控制:Internet不穩定的時候,maven構建也會變的不穩定,一些私服軟件還提供了其他的功能
- [ ] 5.降低中央倉庫的負荷:maven中央倉庫被請求的數量是巨大的,配置私服也可以大大降低中央倉庫的壓力
因此我們在實際的項目中通常使用私服來間接訪問中央倉庫,項目通常不直接訪問中央倉庫
<br>
</br>
<br>
</br>
##三、環境搭建
- [x] 首先最新版本2.97 只支持java1.8,我們需要將jdk版本設置爲1.8
- [x] tomcat的版本最好也是8.0.x版本,如果使用8.5可能會有問題
- [x] 系統我們使用Centos7
3.1 配置jdk環境
$ wget http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
$ tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/local/
$ ln –s /usr/local/jdk1.8.0_91 /usr/local/jdk
$ vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
檢查
$ 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)
<br>
</br>
3.1 安裝Jenkins
提示:首先Jenkins安裝方式有2中,一種是yum安裝,另一種是使用war的方式進行安裝(war就需要安裝tomcat)
官方文檔:https://pkg.jenkins.io/redhat/
如果我們想使用war包的方式可以直接下載war包
這裏我們可以參考本站以前文章 持續集成之Jenkins+Gitlab簡介 [一]
<br>
</br>
下載tomcat (tomcat和jdk版本最好相同)
$ wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.0.48/bin/apache-tomcat-8.0.48.tar.gz
$ tar xf apache-tomcat-8.0.48.tar.gz –C /application/
$ mv /application/apache-tomcat-8.0.48 /application/jenkins
$ rm –rf /application/jenkins/webapps/* && mkdir –p /application/jenkins/webapps/ROOT
下載war包
$ wget http://mirrors.jenkins.io/war/latest/jenkins.war
$ cp jenkins.war /application/jenkins/webapps/ROOT/
$unzip /application/jenkins/webapps/ROOT/jenkins.war
我們直接執行bin/startup.sh啓動就可以
<br>
</br>
啓動我們可以查看tomcat日誌
Jenkins訪問地址:localhost:8080
關於tomcat安裝參數及配置修改可以參考本站 企業必會技能tomcat
新版本的jenkins爲了保證安全,在安裝之後有一個鎖,需要設置密碼之後纔可以解鎖
我們選擇推薦安裝即可
安裝插件中
設置管理員賬號密碼
登陸jenkins
<br>
</br>
3.2 安裝maven環境
$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
$ tar xf apache-maven-3.5.2-src.tar.gz
$ mv apache-maven-3.5.2 /usr/local/
$ ln -s /usr/local/apache-maven-3.5.2/ /usr/local/maven
$ vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:$PATH
$source /etc/profile
驗證
$ mvn -v
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T03:58:13-04:00)
Maven home: /usr/local/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8.0_151/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"
這裏我們需要修改maven的settings.xml 設置一些相關配置。這裏我們直接訪問
https://www.abcdocker.com/abcdocker/2893
<br>
</br>
3.3 安裝私服(Nexus)
下載地址:http://www.sonatype.org/nexus/go/
$ wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.7.0-04-unix.tar.gz
$ tar xf nexus-3.7.0-04-unix.tar.gz -C /usr/local/
$ ln -s /usr/local/nexus-3.7.0-04/ /usr/local/nexus
設置環境變量
$ vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export JENKINS_HOME=/jenkins
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:$PATH:/usr/local/nexus/bin
$ source /etc/profile
啓動腳本
$ nexus
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Usage: /usr/local/nexus/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
$ nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
如果我們想把警告去除,需要在修改用戶和環境變量。
訪問地址:localhost:8081
端口可以在/etc/nexus-default.properties中修改)
nexus登陸界面
<br>
</br>
3.4 Jenkins 配置
因爲我們需要構建Java項目,所以需要安裝一個Maven插件
插件名稱Maven Integration plugin
系統管理-->管理插件
此時我們可以在已安裝的插件中找到
<br>
</br>
配置Jenkins全局工具配置系統管理-->全局工具配置
配置我們的JDK、Maven地址保存就可以
<br>
</br>
##四、Jenkins構建項目
4.1 創建maven項目
創建maven項目,起名稱
4.2 設置構建參數
這裏是說我們構建的記錄保留的天數與個數
SVN地址以及賬戶的配置
沒有問題就不會報錯
這是maven的編譯參數,如果有問題需要與研發的童鞋商議
添加Shell腳本,添加的shell腳本可以是命令,也可以是執行一個腳本。
構建演示:
這裏是正在下載依賴包,因爲我們項目一般在測試環境使用,是很多研發一起使用,所以這裏的地址就是我們私服(Nexus地址)
執行完畢
<br>
</br>
當我們執行完成之後上面的shell腳本可以是將war包複製到tomcat項目目錄裏
/jenkins/workspace/maven/bxg-ask-center-web/target
--jenkins主目錄---項目目錄----代碼分支-----
以下是我們以前Jenkins shell中的配置,比較low 僅供參考
<br>
</br>
提示:很多相關的參數不是運維能決定的,需要研發參與
更改Jenkins的主目錄
https://www.cnblogs.com/zz0412/p/jenkins_jj_07.html
如何用Maven創建web項目(具體步驟)
https://www.cnblogs.com/apache-x/p/5673663.html
Maven私服Nexus詳解
http://blog.csdn.net/u013516966/article/details/43753143
maven核心,pom.xml詳解(轉)
https://www.cnblogs.com/qq78292959/p/3711501.html