1. 程式人生 > >Jenkins+Git+Maven+Shell+Tomcat 持續整合經典教程

Jenkins+Git+Maven+Shell+Tomcat 持續整合經典教程

Jenkins 是一個開源軟體專案,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變得可能。現在軟體開發追求的是效率以及質量,小公司,小企業也紛紛投向自動化的平臺。

亮點

  • 採用shell自定義指令碼,控制整合部署環境更加方便靈活
  • 精簡war包中的lib包,常駐tomcat裡,減少war包傳輸時間
  • Jenkins 使用者許可權管理
  • 構建失敗發郵件通知相關人員解決
  • 自動按天備份war包,Jenkins配置備份以及版本控制化

環境

  • Ubuntu 14.10 (GNU/Linux 3.16.0-33-generic x86_64)

準備工作

  • Git版本控制伺服器
  • Tomcat釋出伺服器
  • 空的一臺伺服器(安裝好Maven,Git,Jdk)

可以在同一個伺服器上 但是分散式部署更加靈活,也方便維護

步驟

安裝Jenkins伺服器

下載war包 放到tomcat執行即可和部署普通的javaweb程式一樣 Jenkins官網

啟動tomcat

此時Jenkins在初始化配置目錄 預設配置目錄路徑:當前使用者下的.jenkins目錄 最好不修改 Jenkins預設是把配置檔案中的資料讀到記憶體中,如果你替換了之前的配置檔案(涉及Jenkins配置版本管理以及備份),此時需要點選Jenkins的讀取設定或者重啟Tomcat,如果此時Jenkins頁面無響應,則應該檢視Tomcat的Catalina.out,多半是由於記憶體溢位造成(解決方法增大Tomcat呼叫Java虛擬機器時記憶體大小,本文不做重點)

配置Jenkins

安裝所需外掛

自動化部署所需全部外掛 Email Extension Plugin(郵件通知) GIT plugin(可能已經預設安裝了) Publish Over SSH(遠端Shell)安裝方法:首頁->系統管理->管理外掛->可選外掛->過濾(搜尋外掛名)->勾選->點選最下面直接安裝即可(需要等待一段時間,詳情可以看catalina.out日誌變化)

Jenkins 配置

基本資訊配置

每個選項後都有個問號解釋當前含義(此步新手可以略過,預設不填即可)配置方法:首頁->系統管理->系統設定

郵件配置

管理員郵件地址就是郵件的發件人地址(必須和後面郵件配置發件人郵箱一致,否則發不成功郵件)

Maven 配置

Maven Configuration 配置

路徑為maven的setting.xml路徑(Maven安裝略)

Maven專案配置

Maven安裝目錄配置

Jdk 配置

JAVA_HOME為Jdk路徑 其中Jdk也可以從這裡下載安裝解壓(不推薦,需要填寫oracle account)

2.5 Git 配置

其中Path to Git executable為你git執行的路徑 一般預設是/usr/bin/git ,如有差異,可以whereis git

郵件配置

配置好郵件的模板(可以自行用html編寫) User Name為使用者名稱 Password為密碼 SMTP不同郵箱不同自行google(另外gmail郵件如無代理翻牆,請勿用,推薦163比較好配置)

未VPN代理連線

VPN連線

模板效果圖:

Default Subject 程式碼:

構建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

模板Default Content分享:

(本郵件是程式自動下發的,請勿回覆,<span style="color:red">請相關人員fix it,重新提交到git 構建</span>)<br/><hr/>

專案名稱:$PROJECT_NAME<br/><hr/>

構建編號:$BUILD_NUMBER<br/><hr/>

GIT版本號:${GIT_REVISION}<br/><hr/>

構建狀態:$BUILD_STATUS<br/><hr/>

觸發原因:${CAUSE}<br/><hr/>

構建日誌地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>

構建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>

變更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
配置郵件觸發器

當失敗的時候 會觸發發郵件

Publish over SSH配置

遠端執行shell指令碼 採用公鑰私鑰連線 其中Key裡貼的是私鑰 遠端被管理的主機裡貼的是公鑰,這2臺主機就是相互信任,這樣scp等操作就不需要輸入使用者名稱和密碼

公鑰私鑰生成方法:

1.管理主機linux 上 ssh-keygen -t rsa -C "[email protected] 一路回車 會在/root/.ssh下生成idrsa(私鑰) idrsa.pub(公鑰)。

2.copy 公鑰的內容到遠端需要通訊(被管理)的主機 /root/.ssh/authorized_keys 如無此目錄檔案則手動建立。

配置完之後可以Test Configuration

配置 Job

步驟:首頁->新建->構建一個maven專案(輸入item名稱)->進入該專案->配置

JOB基本資訊

專案原始碼管理

Repository UR 專案地址 Credentials授權可以是SSH也可以是使用者名稱密碼(SSH方法同上)

選擇需要構建的分支,我們專案採用git工作流 預設master和develop 平時開發構建develop分支,正式上線構建master並且打標籤(前公司git提交標準化相當複雜,分支相當多,這裡大家可以根據實際情況來)

構建觸發器

這裡我們選擇poll輪詢每隔1分鐘去檢測git倉庫程式碼庫版本,如果有更改則立刻構建,這裡大家可以根據自己團隊實際情況去制定,當然還有另外一個外掛gitlab-hook可以主動去通知jenkins構建,不過外掛所佔記憶體比較大,需要增大tomcat虛擬機器記憶體配置,不然會記憶體溢位,個人覺得如果一個團隊人很多的話,選擇poll更適合並且時間間隔設定長一些,避免頻繁構建,gitlab-hook 適合人很少甚至一個人的情況。

構建命令

我們採用最簡單的clean install 當然這裡可以根據各自需求例如 部署後的產物上傳到nexus等,詳情參考 Maven命令

clean install deploy:deploy-file -DgroupId=com.weitoo -DartifactId=common -Dversion=0.1-SNAPSHOT -Dpackaging=jar -Dfile=D:\workspace\server-aggregator\common\target\common-0.1-SNAPSHOT.jar -Durl=http://192.168.0.200:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty  

Add post-build step

構建成功後執行shell命令

該shell的目的是取出war包lib中其他所有lib包 只留下common-0.1-SNAPSHOT.jar 大大減少war包大小(完整war包30M 傳包到阿里雲伺服器需要2分多,精簡後2M,10秒多,大大提高構建速度)

分享我的Shell

mv ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/  
rm -rf ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/*  
rm -rf ~/.jenkins/jobs/server/workspace/server/target/server.war  
mv ~/.jenkins/jobs/server/workspace/server/target/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/  
cd ~/.jenkins/jobs/server/workspace/server/target/server/  
zip -r ~/.jenkins/jobs/server/workspace/server/target/server.war * -r  
scp /root/.jenkins/jobs/server/workspace/server/target/server.war [email protected]123.56.xxx.xx:/opt/war/  

構建成功遠端執行shell指令碼

exec command 是遠端sh的路徑

分享我的publish.sh檔案

作用是備份每次上傳的war包 重啟tomcat

TOMCAT_HOME="/opt/apache-tomcat-7.0.59"  
TOMCAT_PORT=80  
PROJECT="server"  
BAK_DIR=/opt/war/bak/$PROJECT/`date +%Y%m%d`

#shutdown tomcat
${TOMCAT_HOME}/bin/shutdown.sh
echo "tomcat shutdown"

#check tomcat process  
#TOMCAT_PID="lsof -n -P -t -i :${TOMCAT_PORT}"
#echo "current tomcat pid :" ${TOMCAT_PID}  
#while [ -n "${TOMCAT_PID}" ]  
#do  
# sleep 5  
# tomcat_pid="lsof -n -P -t -i :${TOMCAT_PORT}"
# echo "scan tomcat pid :" ${TOMCAT_PID}  
#done
sleep 3  

#publish project 
rm -rf "${TOMCAT_HOME}"/webapps/${PROJECT}  
cp /opt/war/"${PROJECT}".war "${TOMCAT_HOME}"/webapps/${PROJECT}.war

#bak project
mkdir -p "${BAK_DIR}"  
cp "${TOMCAT_HOME}"/webapps/${PROJECT}.war "${BAK_DIR}"/"${PROJECT}"_`date +%Y%m%d%H%M%S`.war

#remove tmp
rm -rf /opt/war/${PROJECT}.war

#start tomcat
"${TOMCAT_HOME}"/bin/startup.sh 
echo "tomcat is starting!"  

分享我的Tomcat精簡方法

  • 在tomcat_home/lib下新建自定義jar包檔案,匯入專案所需其他jar包(以後有新增的話,單獨再導一次)
  • 修改tomcat_home/conf/catalina.properties 搜尋=shared.loader加上路徑
shared.loader=${catalina.base}/lib/server,${catalina.base}/lib/server/*.jar,${catalina.home}/lib/server,${catalina.home}/lib/server/*.jar  


此時Tomcat執行前會載入server下的lib包,如果是多個專案公用一個tomcat的時候,就需要這裡放公共的lib包,避免tomcat載入多餘的jar包,消耗記憶體。

構建後郵件設定

郵件主題收件人配置

郵件觸發器

區域性配置會覆蓋掉全域性配置,我們之前在全域性配置裡配置了構建失敗郵件觸發器,這裡是更加精細的配置 我們選擇構建失敗Failure-1st觸發器,失敗以後發郵件給開發者,(這裡可以根據實際需要,配置,可以配置多個觸發器)開發者的郵件在Recipient List裡配置

Jenkins使用者許可權管理

步驟:首頁-> 系統管理-> Configure Global Security基本配置:只有註冊的使用者才能操作,當然如果是大企業的話,可以採用專案矩陣授權策略,詳情可以Google

Jenkins配置的備份和版本控制

很多情況下稍不注意改變了Jenkins的配置,把平臺弄壞了,又想去恢復,這個時候就得把Jenkins的配置檔案進行配置或者版本化,只需要把/root/.jenkins/加入git版本庫裡即可,該目錄下包含Jenkins所有資訊,包括每次構建歷史資訊和歷史jar包進行全備份然後覆蓋掉該資料夾的時候,重新構建JOB會出現資料夾已經存在等exception,只需要手動刪掉這些目錄即可,不會丟失資料。()

原文地址:http://mousycoder.com/jenkins-git-maven-shell-tomcat-ci/

相關推薦

Jenkins+Git+Maven+Shell+Tomcat 持續整合經典教程

Jenkins 是一個開源軟體專案,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變得可能。現在軟體開發追求的是效率以及質量,小公司,小企業也紛紛投向自動化的平臺。 亮點 採用shell自定義指令碼,控制整合部署環境更加方便靈活精簡war包中的lib包,常駐tomcat

Jenkins+maven+SVN+Tomcat持續整合釋出環境安裝和配置

        Jenkins是基於Java開發的一種持續整合 Jenkins安裝檔案下載  目前最新的版本是2.46.1版本 把Jenkins 2.46.1版解壓後,有兩種執行方式:    1. 執行 java -jar jenkins.war,採用內建jett

Jenkins+Git+Gitlab+Ansible實現持續整合自動化部署靜態網站(一)--技術流ken

  前言   在之前已經寫了關於Git,Gitlab以及Ansible的兩篇部落格《Git+Gitlab+Ansible劇本實現一鍵部署Nginx--技術流ken》,《Git+Gitlab+Ansible劇本實現一鍵部署動態網站(二)--技術流ken》,以及關於jenkins的簡單使

Jenkins+Git+Gitlab+Ansible實現持續整合自動化部署動態網站(二)--技術流ken

  專案前言   在上一篇部落格《Jenkins+Git+Gitlab+Ansible實現持續化整合一鍵部署靜態網站(一)--技術流ken》中已經詳細講解了如何使用這四個工具來持續整合自動化部署一個靜態的網站。 如果大家可以熟練掌握以上內容,勢必會在工作中減輕不小的工作量。 本篇

學習jenkins+git+gradle實現Android持續整合心得總結

今天有空學習了下jenkins在Android上的應用,一下午的時間,最終看到了讓人激動的畫面 下面說正題,總結了下步驟如下: 1、下載jenkins的war包,安裝,啟動。 2、登入jenkins,安裝外掛 3、配置系統配置 4、建立任務 5、構建任務 6、拿到ap

CentOS6.8 部署Tomcat+jenkins+git+maven 持續集成

jenkinsCentOS6.8 部署Tomcat+jenkins+git+maven 持續集成一、環境介紹: 1、操作系統:CentOS 6.8 IP:192.168.1.100 2、JDK版本:jdk1.8.0_101 3、Tomcat版本:tomcat-9.0.0.M21 4、

CentOS7.0 部署Tomcat+jenkins+git+maven+ant

jenkins此篇獻給初學者一、環境介紹: 1、操作系統:CentOS 7.0 IP:192.168.137.128 2、JDK版本:jdk1.8.0_101 3、Tomcat版本:tomcat-9.0.0.M21 4、jenkins版本: Jenkins ver. 2.46.3

Jenkins + Git + Maven + tomcat集成環境搭建

jenkins git maven 折騰了好幾天,終於吧Jenkins + Git + Maven + tomcat集成環境搭建起來了,最終主要實現“自動構建、部署”web應用。 1、安裝環境 操作系統:Centos 6.5 JDK:1.7.x Maven:3.1.x Gi

Jmeter+Maven+jenkins介面和效能可持續整合測試

話說無時無刻都覺得有很多東西需要學習,但是我所奉行的理念的就是每天都進步一點,不斷完善不斷提高!!!!話不多說,進入正題:其實在本文最重要的應該就是jmeter的指令碼和pom.xml檔案 一、首先當然是在Jmeter的工具裡面編寫好自己的指令碼,除錯執行成功。本文就以專案測試中的兩個

Docker+Jenkins+Maven+SVN搭建持續整合環境

Docker+Jenkins+Maven+SVN搭建持續整合環境 環境拓撲圖(實驗專案使用PHP環境) 釋出流程圖 環境說明 系統:Centos 7.4 x64 Docker版本:18.09.0 Maven版本:3.6 Tomcat版本:8 JDK版本:1.8

Jenkins+Gradle+Git+Centos 實現android持續整合、打包(超詳細)

這回分享下使用jenkins+gradle給android打包,伺服器環境是centos7.1 首先,對於新伺服器,你可能需要依次安裝jdk 、android sdk 、gradle、jenkins 一、安裝jdk 1、從官方網站下載最新jdk  http://w

Jenkins+git+maven 打包構建部署

jenkins本文出自 “清風柳絮” 博客,請務必保留此出處http://binuu.blog.51cto.com/801317/1944493Jenkins+git+maven 打包構建部署

jenkins+git+maven搭建自動化部署項目環境(轉)

operator 作用 主服務器 裏的 tag regexp vra 缺失 內容 知識背景 首先需要理解的是,Jenkins是幫我們將代碼進行統一的編譯打包、還可以放到tomcat容器中進行發布。 意思是我們通過配置,將以前:編譯、打包、上傳、部署到Tomcat中的過程交由

asp.netcore+jenkins+docker+svn+centos7.2 持續整合,每天凌晨獲取最新程式碼打包釋出

執行環境: centos7.2伺服器或則虛擬機器 可以是騰訊雲也可以是內網伺服器,(如果是內網伺服器需要用frp做內網穿透,這樣才可以通過外網訪問該伺服器) svnserver 來託管程式碼 一.安裝jenkins執行環境 1. 檢視yum庫中的Java安

centos7下安裝配置jenkins+git+maven+jdk

環境 centos7 jdk1.8 maven3 git   在安裝jenkins之前,先安裝jdk1.8、maven、git   一、 安裝jdk1.8 第一步:下載 jdk-8u131-linux-x64.tar.gz 下載網址:https://www.o

在滴滴雲上使用 Jenkins 搭建基於 GitHub 的持續整合環境

簡介 Jenkins 是一個可擴充套件的持續整合引擎,主要用於持續、自動地構建/測試軟體專案,還可用於監控一些定時執行的任務。 本文將介紹如何在滴滴雲上,使用 Jenkins 作為持續整合伺服器,Git 倉庫作為程式碼儲存庫,實現工程的自動構建、部署等過程。 安裝 以下均基於

jenkins+git+maven+centos7自動化構建部署專案(二)

在預設情況下,Tomcat Manager是處於禁用狀態的,需要我們進行相應的使用者配置之後才能使用Tomcat Manager。 Tomcat Manager的使用者配置是在Tomcat安裝目錄/conf/tomcat-users.xml檔案中進行管理的。 我們只需要在tomcat-users節點中配置相

Linux下使用Jenkins+Git+Maven+碼雲搭建自動化部署,可遠端部署jar和war

寫在前面:       本教程為2臺全新阿里雲伺服器CentOS 6.8(以下稱搭建Jenkins的為第1臺伺服器,可訪問專案工程的為第2臺伺服器,以免混淆,沒有說明的都是在第1臺伺服器root目錄上操作,記得新增埠安全組和關閉防火牆),git倉庫使用的是碼雲。       

使用Maven+Svn+Hudson持續整合開發流程例項【搭建二】

【說明】使用maven+svn+hudson進行持續整合開發方法 一 : 使用maven管理專案 1 maven主要的配置檔案settings的主要配置介紹 settings檔案的主要配置的解釋: localRepository: 本地倉庫配置路徑 offline : 是否

jenkins+git+maven+centos7自動化構建部署專案(一)

基礎環境         建議使用jdk1.5以上版本  (這裡不做jdk安裝講解,去官網下載jdk下載地址)         下載(jdk-7u45-linux-x64.tar.gz版本) jenkins安裝          執行以下命令: