jenkins自動化部署
目標:jenkins上點構建(也能夠自動檢查代碼變化自動構建)》》》項目部署完成。
1、安裝jenkins
1.下載jenkins
這裏我選擇的是war包安裝jenkins,簡單不傷腦,別的博客寫的jenkins版本都很舊,沒用最新的,寫個比較新的配置2.20版。html
官網:https://jenkins.io/index.htmljava
WAR包下載地址:以前兩個連接已經失效python
可在http://mirrors.tuna.tsinghua.edu.cn/jenkins/war選擇要下的jenkins包linux
或http://archives.jenkins-ci.org/war/2.2/jenkins.war下載git
2.安裝jdk環境
最新的JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 沒帳號註冊一個,很快的github
前版本的JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.htmlweb
jdk-8u121-linux-x64.tar.gz
這裏選擇Linux64位後綴tar.gz的複製下載連接,在服務器上解壓配置環境變量vim /etc/profile寫在最後面docker
JAVA_HOME=/data/java/jdk的目錄名字 #java目錄是我建立的,把jdk包解壓到裏面,這個寫解壓位置的絕對路徑
CLASSPATH=$JAVA_HOME/lib/
PATH=$JAVA_HOME/bin:$PATH #謹慎,這裏PATH寫錯了會發現命令都得打絕對路徑才能用,悲催
export PATH JAVA_HOME CLASSPATHshell
配置沒問題完成保存,source /etc/profile讓配置的環境變量生效,這時候能夠打命令java -version看看版本,是否是出java version "1.8.0_***",若是是1.6什麼的說明沒生效,看看解壓的路徑。apache
3.安裝tomcat
下載地址:http://mirrors.hust.edu.cn/apache/tomcat 選擇tomcat進行下載
這個什麼版本均可以,別太舊了,舊的會有漏洞,解壓完成試試能不能用,tomcat目錄裏面bin目錄下,./catalina.sh start啓動,訪問一下,不能訪問基本都是防火牆問題,能出現tom貓界面就能夠停了,能夠./catalina.sh stop,也能夠找到進程pid,kill -9 pid號,進到webapps目錄裏面刪除全部,把以前的jenkins.war拷進來,啓動tomcat。我用的8080端口訪問地址爲http://公網地址:8080/jenkins
在服務器上面cat /root/.jenkins/secrets/initialAdminPassword會出現讓輸入的密碼,一串數字字母,多等一會到出現下面界面,喝了口水,三分鐘過去了,出現了接下來的界面
這個就是說推薦安裝仍是本身選,須要的包後面能夠裝,我點了第一個,知道用什麼插件點第二個也能夠這樣裝的包少一點。安裝的插件都在/root/.jenkins/plugins/下面。
開始使用,點擊就會進來
若是沒有設置用戶進入,admin用戶登陸還不知道密碼是什麼,是/root/.jenkins/secrets/initialAdminPassword這個裏面的密碼,http://這個地方打ip:8080/jenkins/user/admin/configure修改admin密碼,也能夠點系統管理,在裏面找管理用戶,點屏幕中上方的admin進去最下面修改密碼保存。
2、安裝Maven(用來構建項目)
官網地址:http://maven.apache.org/download.cgi
下載地址:apache-maven-3.3.9-bin.tar.gz
配置環境變量:vim /etc/profile 寫到最後,我用的3.3.3的版本
export M2_HOME=/data/apache-maven-3.3.3
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
3、安裝git
下載地址:https://github.com/git/git/releases
下載地址想下載能夠下載,而後編譯安裝,git主要是用於jenkins用git命令獲取咱們本身搭建的gitlab上面的代碼,yum install git的話,是跟下圖配置同樣,必定要看好git能夠用的命令絕對路徑在哪裏,源碼安裝有的的是在/usr/local/git/bin/git,若是寫到/usr/local/git會報錯,你能夠試下/usr/local/git/bin/git --version,要有返回值。
4、配置jenkins
jenkins由於配置緣由出錯千千萬,一步一報錯,每天有驚喜,下面配置是把坑都填好的。
1.添加插件
選擇可選插件,過濾搜索,git plugin 插件若是按教程來推薦安裝已經安裝了,裝後面倆就好
選擇直接安裝也能夠,重啓後安裝也能夠,用什麼功能搜一下安裝沒,沒安裝裝上就好,我看了已經安裝的,比本身選安裝的安裝的多不少。。。
不少教程都裝Deploy to Container Plugin,這個能夠把包從運行的tomcat的項目http地址上直接發到項目服務器的目錄下,windows上我試了能夠,linux這個東西沒用它,都是linux服務器scp過去就行了,windows上面包發過去了不會寫腳本,仍是shell腳本簡單。
2.工具配置
jdk別名叫啥均可以,路徑寫對,寫你jdk環境變量配置的路徑,寫錯了會出現ERROR: Failed to parse POMs java.io.IOException: Cannot run program***錯誤
git的地址要寫的是git這個命令的地址不是目錄的地址,yum裝的天然是/usr/bin/git,以前不是yum裝的裝的寫/usr/local/git報錯找不到git命令,在服務器各類試git都沒問題,看配置覺得jenkins看不見呢,裝了好幾個版本的jenkins,找了N久才找到應該寫/usr/local/git/bin/git
寫完保存就好,接下來系統配置
3.系統配置
這個沒有話看一下上面的插件,沒安裝maven的插件就沒有這個配置
這個配置費勁九牛二虎之力,在N次報錯後遍尋錯誤無解時候,在系統提供的英文文檔裏面偶然看到其中一個回答,好長好長看到其中一句,試了試居然成功了,沃德天!
5、構建項目
點擊新建,出現下圖,名字隨便起,選擇構建一個maven項目
鏈接git,咱們是本身搭的gitlab(gitlab安裝中文版),須要在gitlab上搜索ssh或者key,找到一個ssh keys字樣的,把jenkins服務器的公鑰放在上面,另外
這個裏面添加一個jenkins服務器root用戶的私鑰,添加不了的話按下面的添加也能夠
發現gitlab服務器的私鑰也能夠,估計是由於gitlab頁面上也放了gitlab的公鑰,看來配對的公私鑰就能夠,有興趣的能夠試試。
選擇這個這裏面能夠寫腳本,我下面寫這個至關於腳本里的命令去遠程執行另外一個腳本
寫無缺久了,今天jenkins作了一個遷移,完善前面的,把後面的再補上
如圖,後面的功能都是用腳本寫的,jenkins和org互相作了免密登陸,在jenkins上能夠直接用/usr/bin/ssh root@org的ip "要執行的命令"
/bin/bash /dat****/org.sh 在org上執行這個腳本
過程:jenkins調用git把Gitlab上的代碼下載到jenkins服務器,maven構建成war包,調用ssh運行shell腳本完成備份,停服務,清webapps,拷war包到tomcat下,起服務,提及來好簡單啊。。。
本身摸索着搭,各類找錯誤,搭了兩星期才搭好,今天遷到別的服務器上幾個小時就搞定了,通過幾個月的使用,jenkins確實是自動化的利器,寫好腳本一鍵搞定
看完基本就熟悉jenkins了,實踐出真知,仍是本身作一遍試試。
2018-04-17更新:
*** 應評論要求把shell腳本貼出來,不貼是由於寫的low,但願你們指點(rm命令前面加了#當心使用)***
#!/bin/bash
#引入了系統環境變量,這樣系統環境變量裏面沒有export聲明的也能夠用
source /etc/profile sj=`date +%m-%d-%H%M` #開始先打印個時間到日誌 echo `date` >> /tmp/xxx.log #備份一下當前的項目,名字用xxx代替 tar -zcPf /data/bf/xxx_ROOT_$sj.tar.gz /data/xxx_tomcat/webapps/ROOT >>/dev/null echo "tomcat備份成功,開始拷war包" >> /tmp/xxx.log #在/data/bf裏面處理完再放到tomcat下,感受停服務的時間短一些 #rm -rf /data/bf/ROOT/* #下面咋變綠了。。。。
/usr/bin/scp root@172.x.x.7:/root/.jenkins/workspace/xxx/target/xxx.war /data/bf/ROOT/ROOT.war echo "開始解壓,替換配置文件" >> /tmp/xxx.log unzip /data/bf/ROOT/ROOT.war -d /data/bf/ROOT >>/dev/null sleep 10 /bin/cp -a /data/bf/app-config.properties /data/bf/ROOT/WEB-INF/classes/app-config.properties #rm -rf /data/bf/ROOT/ROOT.war echo "中止服務" tomcat_pid=`/usr/sbin/lsof -i:8000 | awk -F" " NR==2'{print $2}'` kill -9 $tomcat_pid #rm -rf /data/xxx_tomcat/webapps/* /bin/cp -a /data/bf/ROOT /data/xxx_tomcat/webapps/ echo "啓動服務" >> /tmp/xxx.log /data/xxx_tomcat/bin/catalina.sh start & sleep 10 re_pid=`/usr/sbin/lsof -i:8000 | awk -F" " NR==1'{print $2}'` if [ $re_pid == "PID" ];then echo "tomcat自動部署成功" #由於是jenkins執行的,上面這行是在jenkins上看的,下面是放到日誌裏 echo "tomcat重啓成功" >> /tmp/xxx.log else echo "tomcat自動部署失敗" echo "tomcat重啓失敗" >> /tmp/xxx.log #發郵件的py能夠在網上搜到不少,改改就能夠用,用咳咳的企業郵的話微信會同步收到郵件哈哈哈,直接作到了微信提醒 /usr/bin/python2.7 /root/sendmail.py fi