自動部署過程:jenkins從svn拉取代碼+maven去打war包+ansible去部署+重啟tomcat。
前情回顧:在前面的文章我的環境已經有Jenkins+ansible ,在加上我們公司有自己的SVN,我只要在本地安裝個Tomcat就ok啦。
其實也有Tomcat的,但我喜歡自己玩自己的,誰讓我是菜鳥了呢,這其中的坑真的不少,希望能幫到初學者。
一. 什么是Maven(簡單說一種打包的工具)?
Maven項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。
Maven 除了以程序構建能力為特色之外,還提供高級項目管理工具。由於 Maven 的缺省構建規則有較高的可重用性,所以常常用兩三行 Maven 構建腳本就可以構建簡單的項目。由於 Maven 的面向項目的方法,許多 Apache Jakarta 項目發文時使用 Maven,而且公司項目采用 Maven 的比例在持續增長。
你也許會問為什么是Maven,不是Ant。我們公司的java項目用的是pom文件。如果你的是built文件,那就能用ANT,為什么用POM,不是我這個小運維人員說的算的,你需要去找開發老大。
1)官網下載Maven(jenkins的插件里面有maven,我覺得自己安裝的可控性更高一些)
root@debian :~# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
2)解壓下載的包
root@debian :~# tar -xf apache-maven-3.5.0-bin.tar.gz -C /usr/local/
3)簡單驗證一下
root@debian :~# mvn --version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /usr/local/apache-maven-3.5.0
Java version: 1.7.0_71, vendor: Oracle Corporation
Java home: /usr/local/jdk1.7.0_71/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.16.0-4-amd64", arch: "amd64", family: "unix"
4)接下來在jenkins里面配置一些環境(登錄你的jenkins界面)
標記的非常明顯,點擊系統管理。
接下來點擊Global Tool Configuration ,主要配置有下面幾項
提示: (1)這里的最好指一下setting文件,這個文件需要更改的,比如本地倉庫放在那,打包過程用沒用到nexus(私服),如果你不知道怎么改,問你們研發部門,他們都是行家。
(2)在前面的文章里面我說過為什么jdk換成了7(其實是在setting文件里面定義的),為了和這個自動化上線的項目保持環境的一致行,其實8也兼容7,具體行不行我沒有試驗過呢。
(3)如果你已經指定了本地的插件路徑,就不要勾選自動安裝那個選項。
如果你的路徑和我的不一樣,需要修改成相對應的路徑就ok啦。
二.Jenkins的插件下載
1)步驟和上面幾乎差不多,點插件管理
2)這里我就列出幾個,你可以根據提示缺少那個插件你就安裝那個
因為我要用到playbook,所以要安裝ansible插件。
maven的本地倉庫,不懂的話多去問問研發,少走點彎路。
這個是svn的插件,因為總有一個版本控制,你是git,就去下載git的插件。
這個插件有必要說一下,一開始我打算用這種tomcat熱部署,后來查了查,這種部署方式有天然的缺陷,部署的次數多了以后會造成java的內存泄漏,再加上我們上線的所有環境不是都打在war包里面的,后來就放棄了,作為運維來說,個人覺得多一事不如少一事。
三.項目的配置過程(只說對我有用的部分)
1)在你的jenkins登錄頁面,點擊新建
2)構建一個maven項目(名字你隨便起,建議最好有一點標識性)
3)最后點擊OK,來到下面的界面
描述信息你可以隨便寫,甚至空着也可以的。
4)SVN這里需要你有一個帳號,簡單說就是能拉取代碼
5)構建觸發器
觸發器的作用應該是自動化構建,它也可以像定時任務那樣,每隔多長時間自動構建一次
6)剩下直接上圖
說明:如果你不明白的話,多去查一查,具體什么意思,我也只是知道怎么用。
四.Tomcat的安裝
1)官方下載Tomcat7(最新的版本應該是9,這里我下載的是7)
root@debian1:~# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.77/bin/apache-tomcat-7.0.77.tar.gz
說明: 如果你用debian自帶的源安裝tomcat,也可以。但你的目錄結構和你解壓二進制包的目錄結構是不一樣的,這是坑。用過debian的應該都知道,它把配置文件分的太細啦,當然信不信你說的算。
2)解壓Tomcat並啟動Tomcat
root@debian1:~# tar -xf apache-tomcat-7.0.77.tar.gz -C /usr/local/
root@debian1:~# /usr/local/apache-tomcat-7.0.77/bin/startup.sh
提示:因為我的jenkins占用着8080端口,在本機想啟動Tomcat的話需要更改一下配置文件server.xml
3)簡單驗證一下
root@debian1:~# netstat -antlp |grep 8082
tcp6 0 0 :::8082 :::* LISTEN 11981/java
五.Playbook的書寫,代碼奉上(水平較次,您將就着看)
- hosts: local tasks: - name: "create the tmp directory!" command: mkdir /usr/local/tmp - name: "delivery the war to the remote_host!" copy: src=/var/lib/jenkins/workspace/maven_test/target/oa.war dest=/usr/local/tmp/ - name: "unzip the war!" command: unzip -qo /usr/local/tmp/oa.war -d /usr/local/apache-tomcat-7.0.77/webapps/ROOT/ - name: "delete the tmp" command: rm -rf /usr/local/tmp - name: "stop the tomcat" shell: "ps -ef |grep tomcat |grep /usr/local/apache-tomcat-7.0.77 | grep -v grep |awk ‘{print $2}‘ |xargs kill -9" - name: "start the tomcat" shell: chdir=/usr/local/apache-tomcat-7.0.77/bin nohup ./catalina.sh start &
說明: (1)在上面的文件里面用startup.sh 啟動tomcat起不來,用catalina.sh start & 就可以啟動起來,具體什么原因我也不是很清楚,因為我覺得兩種方式是一樣的。
(2)注意一下yaml(yml)文件的書寫合適,還有就是jenkins自動構建的war包在workspace下有一個和你項目名稱一樣的文件夾,但war包的名字是由POM文件里面定義的,與jenkins是無關的。
(3)在這里我是本地用ansible的copy模塊,當然你也可以遠程copy,但注意hosts文件定義該主機,免密鑰登錄等等,還有就是權限問題,需要特別注意,jenkins這個工具是一直在用jenkins這個普通用戶在運行。
六.構建Project
1)構建你的項目
2)可以查看過程的輸出
3)看到success 就大功告成啦(需要燒香拜佛的喲)
其實還有很多功能,例如構建成功發郵件通知,sonar對java代碼進行靜態檢查等等我只記錄了一些我用到的。
建議: (1) 如果沒有成功,看相應的報錯,有問題去解決問題,這么個流程我研究了兩周,我老大說我進度慢,沒辦法,都是自己研究,我把過程記錄就是希望和我一樣的少踩點坑,歡迎來噴。
(2)有句名言叫外事不懂問GOOGLE,內事不懂問度娘。