背景運用場景及思路
1、為響應后端開發人員需求,提升項目開發過程效率,選擇Jenkins持續構建,進行導包啟動一鍵持續集成
思路:
使用jenkins自帶,立即構建->SVN拉取代碼,通過Jenkins安裝的mvn編譯進行打包,並自動化啟動后端服務
致謝:
工作崗位的上一任,留給我很多資料進行查閱,感蟹!!
Jenkins搭建部署
1、下載tomcat軟件,gz壓縮包,存放到需要配置的Linux服務器上
2、 官網下載jenkins,將jenkins壓縮包,解壓后,放置到tomcat-->webapp目錄下
3、 進入tomcat-->bin目錄-->./startup.sh啟動命令
配置時需注意事項:
1、需要修改tomcat-->config文件夾-->server.xml
(啟動tomcat時,需要netstat查看tomcat啟動的默認8080端口是否已經被占用,如果已經被占用,vim編輯server.xml文件,找到8080端口,進行修改,如下所示:)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
修改后:
<Connector port="3030" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
2、如啟動tomcat后,進入127.0.0.1:3030檢查,Tomcat是否正常啟動起來 ,如果無法正常查看,則需要執行以下命令,關閉防火牆服務
service iptables stop
配置系統環境
1、Linux需安裝jdk_1.8,這里可以按照自己的喜好進行下載
2、下載解壓安裝jdk成功后,需要進入etc/profile環境配置如下變量
(我這里下載解壓后的jdk,是放置到了/opt目錄下)
JAVA_HOME=/opt/jdk1.8.0_141
JAVA_BIN=$JAVA_HOME/bin
JRE_HOME=$JAVA_HOME/jre
JRE_BIN=$JAVA_HOME/bin
PATH=$JAVA_BIN:$JRE_BIN:$PATH
export JAVA_HOME JRE_HOME PATH
安裝Jenkins插件
1、 Tomcat起來后進入訪問頁面:服務器IP地址:端口號/jenkins
2、訪問Jenkins成功,進行默認選擇進行下一步,下一步安裝
3、安裝插件時,可以根據自己的喜好進行安裝的啦,這里就不概述啦
配置JDK,MAVEN安裝
一、配置后台服務Maven打包時需要的jdk/maven
二、配置前端服務npm打包時所需nodeJs
配置SSH連接服務器
創建Maven項目
SVN打包構建及SSH遠程部署
啟動腳本
source /etc/profile # 應ssh遠程連接是no-login狀態,則需要每次執行source /etc/profile配置
pid=`ps -ef |grep "other"|grep -v 'grep'|awk '{print $2}'`
if [ $pid ]; then #如果存在已啟動的項目進程,則kill掉,沒有則不進行處理
kill -9 $aa
fi
cd /data/
if [ $? -eq 0 ]; then
rm -rf /data/xqb-other-1.0.0.jar
else
mkdir -p /data/
fi
setsid java -jar xxxx.jar > nohup.out
遇到的問題
1、安裝jenkins時,出現大部分插件,自動下載失敗,重新retry后,仍是如此,待解決
2、昨天一天晚上,自信滿滿的認為自己可以很快的能解決好Jenkins持續構建打包后端服務,結果折騰了差不多半天時間,端午放假的最后一天班,還一個人加班到了最晚,這就是技術人,沒有技術的加班血淚史鴨
其中遇到的問題有自身的問題、以及技術方面欠缺的問題,總結如下:
(1)、細節沒有注意到,編寫構建腳本時,每個Maven項目,寫的目錄因copy現有的,導致存在很多小字眼寫錯了,這里需要面壁思過了,細節決定成敗,細節決定成敗呀,都是血淚史~~
(2)、Mvn編譯打包后,在PostStep下,Jenkins沒有將打包好后的xxx.jar包,正常遠程傳輸到制定的路徑下
(3)、打包完成后,腳本啟動命令,沒有正常被執行,導致傳輸后的jar包,無法正常啟動起來
1.打包后無法傳輸到指定的目標服務器路徑
遇到這個問題時,思考的方向是SSH配置用戶名和密碼是否正確,檢查沒有問題后,才第一時間是,查詢了jenkins 項目中的poststep中各個輸入框的用法,畢竟還是知識理論更重要
配置POST STEP
編譯打包文成后,就需要配置post step,該模塊是在你Jenkins編譯打包完成后,執行的動作
需要介紹的點是:
SSH Server:用戶需要ssh傳輸jar包的服務器
Source files:傳輸的源文件,這里按照Jenkins的默認路徑是當前的job項目的工作路徑,比如:
jenkins中創建的每個job工程項目,對應會在Jenkins安裝目錄下的workspace空間下自動創建
如:
jenkins在linux下默認的安裝路徑是以下路徑
/root/.jenkins/
我創建的Job工程名字為jenkins,則構建成功后,會在以下的路徑,生成jenkins文件夾,如下所示
/root/.jenkins/workspace/jenkins
source files,是我要打包完成的jar進行上傳到其他服務器,所以我這里寫的是target/*.jar
Remove prefix:這里表示上傳后,不需要創建的target目錄,所以這里需要填寫target,表示上傳完成后,不會在對應指定的目錄下再生成一個/target目錄,而是直接把*.jar包直接上傳到指定的目錄里
Remote diretory: 比如我要把*.jar包,放置到tomcat的webapp里,則我這里就填寫 webapp,上傳包后需要存放的地方
Exec command: 這里填寫需要啟動jar包的命令
例子:
setsid java -jar xxx.jar > nohup.out &
這里參考原文地址(推薦):[原文]https://www.cnblogs.com/abcwt112/p/6296399.html
2.setsid java -jar xxx.jar腳本命令無法正常啟動
使用上面的setid啟動jar包命令后,看到進程總是啟動到一半后,
ps -fe |grep java
看到進程正常啟動后一半,就自動停掉了,但是將上面的命令直接放在服務器上root用戶下,直接執行時確能夠執行成功,后來經過研發童鞋的指點,說在jenkins這里的命令,命令肯定是沒有被啟動起來,或者jenkins沒有執行這行命令權限
經過思考推敲后,進行百度搜索無意間看到有位博主也遇到類似問題,才發現時ssh遠程操作執行命令時,時non-login狀態,ssh遠程執行該命令時,是需要不會執行/etc/profile里面定義的變量的,而剛好jdk的配置,在/etc/profile文件里,所以ssh Server模塊的腳本里,需要加上如下source /etc/profile:
source /etc/profile
setsid java -jar xxx.jar > nohup.out&
這里參考原文地址(推薦):[原文]http://blog.sina.cn/dpool/blog/s/blog_64693fd40101eyyh.html
最后輕松解決了上面害我加班的問題,真的是在你最無奈的時候,那么你就該要好好的靜下心來,學習了。
效果
1、寫代碼(更新代碼),push到SVN服務器
2、立即構建Job--> checkout SVN代碼-->編譯打包-->上傳服務器-->自動啟動執行jar服務
3、登陸使用項目,一體化,是不是爽歪歪呢,跟自己做好一道美味的菜后,最后有人幫把美酒倒了,飯給你裝了,筷子給你拿了,你直接開吃的效果差不多。可惜我不是開發,哈哈哈哈