jenkins的安裝這里就不做描述了,很簡單的 百度搜索一下即可
這里安裝的jenkins-2.39-1.1
wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.key sudo yum -y install jenkins-2.39-1.1.noarch.rpm
安裝完后防火牆放行端口
安裝不是重點 重點是去配置jenkins
1.先配置好jenkins需要用到的其他外部組件 jdk,maven,git/svn
安裝git: yum install git
git地址使用命令查詢 whereis git
maven jdk 安裝好后配置好環境變量 自行百度
查詢環境變量中的jdk和maven地址
啟動 停止 重啟
service jenkins start
service jenkins stop
service jenkins restart
進入配置階段
1.1 進入系統設置- 全局工具配置中配置 jdk maven git 不要勾選自動安裝
jdk maven 使用的是環境變量中的地址
2.開始新建一個jenkins任務
2.1 general
這里是一些通用的設置, 丟棄舊的構建 多次構建又不手動清除 會生成很多文件 ,占用磁盤空間 這里的丟棄舊的構建的配置大家按需配置即可
2.2源碼管理
版本控制這里使用的是git git的地址填進去 點擊Add 添加 git的賬號密碼 然后在下拉框中選擇剛剛新增的賬號密碼
選擇了正確的git賬號密碼 紅色的報錯信息就會消失 下面也會顯示git代碼的主干 如果需要的是其中的分支 修改成對應的分支名稱就行
2.3構建觸發器
這里一般默認的觸發器就行 如果你需要定時構建 比如每隔一段時間重新部署 或者每隔一段時間檢測有沒有提交 有提交就部署
定時構建 “日程表”格式為 和cron表達式一樣 如果你想實現什么 對應着去百度就行
## 每行由 5 個值組成(空格或TAB分隔),分別表示分(0-59)、時(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=周日) ## "M,N" 表示M和N;"M-N" 表示范圍[M,N];"M-N/X" 表示范圍[M,N]內每隔X;"*/X" 表示整個范圍內每隔X ## 前面提到的M/N/X的值都可以用H(意為Hash)代替,散列值起到隨機值的效果,且同一項目取值穩定,這對於項目多時分散壓力很有用。 H/10 H(0-8) * * 1-5 ## 觸發時間: 工作日、Hour為0~8按哈希隨機、Minute以10為間隔 H/10 H * * 0,6,7 ## 觸發時間: 周末、Hour為全天按哈希隨機、Minute以10為間隔 ## “日程表”修改后,下方會給出下次執行時間點的預告。
2.4 構建環境和pre steps
這里使用的是默認的,有需要的對應着去查詢資料
2.5 Build
因為 本文中項目結構 圖中紅框框出來的都是一個個子項目
這里我只想build 其中的mobile模塊 就需要配置 -pl mobile -am
加上其他的mvn打包的命令 clean package -pl mobile -am -Dmaven.test.skip=true
2.6 構建設置 構建后操作
這里可以設置構建后郵件通知
-------------------------------------------------------------------------------------------------------最重要的一部分當然要有華麗的分割線-----------------------------------------------------------------------------------------------------------------------------------------
2.7 Post Steps
構建完成后操作 這里使用的執行shell命令
shell腳本里面寫的就是無非就是把編譯好的war包放到對應的容器中去 然后啟動容器
最關鍵得地方, 不同的項目.不同的容器這里的shell腳本肯定是有不一樣,網絡上的這類shell只能參考,具體還得自己動手去寫
這里放一個shell示例, 容器是tomcat
思路: 先查對應的tomcat時候啟動, 啟動了就kill掉, 然后刪除webapps中的包, 把jenkins編譯的包復制到對應的容器, 重命名包 , 啟動容器
#!/bin
#kill tomcat pid
#有錯的shell
pidlist=`ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'` function stop(){ if [ "$pidlist" == "" ] then echo "----tomcat_mobile 已經關閉----" else echo "tomcat_mobile 進程號 :$pidlist" kill -9 $pidlist echo "KILL $pidlist:" fi } stop pidlist2=`ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'` if [ "$pidlist2" == "" ] then echo "----關閉tomcat_mobile成功----" else echo "----關閉tomcat_mobile失敗----" fi rm -rf /usr/local/tomcat_mobile/webapps/ROOT* cp -r /var/lib/jenkins/workspace/baiyangjinrong-mobile/mobile/target/mobile.war /usr/local/tomcat_mobile/webapps sleep 3s mv /usr/local/tomcat_mobile/webapps/mobile.war /usr/local/tomcat_mobile/webapps/ROOT.war cd /usr/local/tomcat_mobile/bin ./startup.sh
問題1:上述shell腳本執行后 肯定會出現tomcat沒有啟動的情況
1.這里如果tomcat和jenkins 在同一台linux上可以 加上 export BUILD_ID=tomcat_mobile_build_id
原因是: jenkins在執行sh腳本的時候,如果腳本中有啟動后台進程的情況,例如tomcat的關閉和啟動,jenkins在job構建結束之后,會kill所有的腳本里面衍生出的子進程。修改環境變量BUILD_ID的值,這樣,衍生出來的子進程就不會被kill了
2.tomcat和jenkins不在一台linux上
假如部署jenkins的機器是A,部署tomcat的機器是B。那可以在A機器上寫一個腳本,把需要在B機器上執行的命令封裝在A機器上的這個腳本里面,這樣也能保證衍生進程正確執行結束。

就是相當於把上面的shell寫到一個sh文件中 jenkins執行這個sh文件
因為我便是jenkins和Tomcat在同一台linux上 所以這里就沒有把shell腳本寫在sh文件中
#!/bin/sh #kill tomcat pid #這句尤為重要 export BUILD_ID=tomcat_mobile_build_id # 1.關閉tomcat pidlist=`ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'` function stop(){ if [ "$pidlist" == "" ] then echo "----tomcat 已經關閉----" else echo "tomcat進程號 :$pidlist" kill -9 $pidlist echo "KILL $pidlist:" fi } stop pidlist2=`ps -ef|grep tomcat_mobile|grep -v "grep"|awk '{print $2}'` if [ "$pidlist2" == "" ] then echo "----關閉tomcat成功----" else echo "----關閉tomcat失敗----" fi # 2.移除原來tomcat中webapps中的項目文件夾 rm -rf /usr/local/tomcat_mobile/webapps/ROOT* # 3.復制jenkins生成的war包到tomcat中webapps中 cp -r /var/lib/jenkins/workspace/baiyangjinrong-mobile/mobile/target/mobile.war /usr/local/tomcat_mobile/webapps sleep 3s # 4.修改war包的名稱 mv /usr/local/tomcat_mobile/webapps/mobile.war /usr/local/tomcat_mobile/webapps/ROOT.war # 5.啟動tomcat cd /usr/local/tomcat_mobile/bin ./startup.sh
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.8 可能出現的問題:
1. 這里如果出現如下的問題 就是因為linux上沒有安裝git
安裝 yum install git 后去全局工具配置你配置好git的路徑
2. jenkins部署失敗 首先去看對應任務的日志
從日志中可以看出來這里jenkins 編譯是成功的 但是在復制war的時候報錯, 圖中是因為不小心把空格敲成換行了
參考文檔:
https://blog.csdn.net/aosica321/article/details/64441541
https://blog.csdn.net/shuizhihun07/article/details/80168076