SVN + Maven + jenkins 實現自動化構建
搭建環境說明:
SVN 在window下 執行在 192.168.74.1
jenkins 在 linux下 執行在 192.168.58.135 版本1.65
Maven 在 linux下 執行在 192.168.58.135 版本3.0.4
tomcat7.0.4
遠端主機 192.168.5.106
tomcat7.0.4
JDK 1.8.0_05
1 將jenkins.war 上傳到192.168.58.135 /usr/local/tomcat8.5.9/webapps 下
通過啟動tomcat 訪問jenkins
或者可以使用 java -jar jenkins.war 命令
2 新增環境變數,修改工作目錄
建立 /opt/jenkins ,
在/etc/profile中新增環境變數export JENKINS_HOME=/opt/jenkins,
source /etc/profile 使修改生效
如果不新增環境變數JENKINS_HOME,則預設工作目錄使用者工作目錄下在:/root/.jenkins
4 新增外掛
jenkins是一個可以新增外掛的整合工具
點選左側的“系統管理”—-“管理外掛” —–“可選外掛” 選擇需要安裝的外掛
如: delpoy to container plugin
publish over SSH
Maven Integration plugin
SSH plugin
SVN Publisher plugin
Hudson SCP publisher plugin
點選”直接安裝” —-然後安裝完成重啟
或者選擇“高階”選項卡中—上傳外掛
5 系統設定
點選左側的“系統管理”—-“系統設定”
Maven Configuration
jdk 安裝
maven 安裝
jenkins的訪問地址(預設自己生成)
SVN的配置
Publish over SSH
Passphrase —— 與下面Username—root 的密碼
Name – —– 192.168.5.106_ssh 為遠端主機的名稱
Hostname —-192.168.5.106 遠端主機的ip
Username —–登陸遠端主機的使用者名稱
Remote Directory ——指定jenkins 在遠端主機上的部署目錄
點選“test configuration ” 測試下配置遠端主機是否能通訊
6 新建專案
點選左邊“新建”—–輸入“item名稱” —-選擇“構建一個maven專案”
配置遠端倉庫:主要目的是從遠端倉庫拉取程式碼下來
配置maven 的目標:意思是使用maven進行 clean 、complier、package 、install 。
點選“高階” —-更改POM的預設地址pom.xml
/opt/jenkins/jobs/mymaven_myapptest3/workspace/myapptest1/target/myapptest1
/opt/jenkins 表示jenkins工作目錄
jobs/mymaven_myapptest3 表示jenkins管理mymaven_myapptest3專案的目錄
workspace 表示maven等外掛的工作目錄
send files or execute commands over SSH
SSH Server Name :要連線的遠端主機名
Transfer Set Source files : jenkins所在的主機要傳送的原始檔是在這個路徑下的 myapptest1/target/myapptest1.war war包
Remove prefix:在傳送war 包到遠端主機時需要去掉的字首
Remote directory : 遠端目錄預設不填寫就是之前在“系統設定”中設定的遠端主機的目錄
Exec command: 在遠端主機上執行的shell 指令碼
構建專案:這裡表示構建專案使用maven的話 使用哪個maven配置檔案:
(這裡的clean和package 與 前面【配置maven 的目標】裡面的一樣的意思,至於執行哪個?測試了下是執行【配置maven 的目標】中的goals)
到此新增專案完成
**注意: 一定要注意如下的相對路徑
Transfer Set Source files
Remove prefix
Root POM**
7 說明下 auto_deploy.sh 指令碼
#!/bin/bash
log_time=`date +%Y%m%d%H:%M:%S`
#base parameter
tomcat_home=/usr/local/tomcat7.0.4
tomcat_port=8080
shell_environment=/bin/bash
war_dir=/opt/jenkins
war_name=myapptest1.war
#update environment
echo "*************${log_time}*********"
echo "*************start update environment*********"
export JAVA_HOME=/usr/java/jdk1.8.0_05
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export TOMCAT_HOME=/usr/local/tomcat7.0.4
export CATALINA_BASE=/usr/local/tomcat7.0.4
export CATALINA_HOME=/usr/local/tomcat7.0.4
sleep 3
#update server
echo "*************start update server**********"
check_tomcat_status(){
netstat -nlpt|grep ${tomcat_port} > /dev/null
t=$?
if [ $t -eq 0 ];then
echo "tomcat is running port is ${tomcat_port}"
echo "shutdown tomcat......"
echo ">>>>>shutdown tomcat start >>>>>"
${shell_environment} ${tomcat_home}/bin/shutdown.sh
echo ">>>>>shutdown tomcat end >>>>>"
sleep 5
elif [ $t -ne 0 ];then
echo "tomcat is poweroff"
${shell_environment} ${tomcat_home}/bin/shutdown.sh
sleep 5
fi
}
check_tomcat_status
deploy_location=${tomcat_home}/webapps
dirHaveWar=`ls ${war_dir}|grep ${war_name}|wc -l`
if [ ${dirHaveWar} -eq 0 ]; then
echo "%%%%%%%%%%%%%% not have war %%%%%%%%%%%%"
else
echo " ......../opt/jenkins have war......."
fi
isHaveWar=`ls ${deploy_location}|grep ${war_name}|wc -l`
if [ ${isHaveWar} -eq 0 ];then
echo "<<<<<< ${deploy_location}/${war_name} is empty >>>>>"
cp ${war_dir}/${war_name} ${deploy_location}
echo "*****cp ${war_name} to ${deploy_location}******"
sleep 3
else
echo "<<<<< find ${deploy_location}/${war_name} >>>>>"
rm ${deploy_location}/${war_name}
cp ${war_dir}/${war_name} ${deploy_location}
echo "*****cp ${war_name} to ${deploy_location}*****"
sleep 3
fi
echo " ##### deploy ${war_name} over #####"
#reboot tomcat
echo " reboot tomcat start .........."
${shell_environment} ${tomcat_home}/bin/startup.sh
echo " reboot tomcat end ........"
echo "************************ deploy war package into container Successlly **********************************"
8 構建專案
點選“立即構建” 完成專案的構建
在構建歷史中可以檢視構建的日誌:
如:#21 —– “Console Output”—-控制檯輸出