Jenkins + Maven + Ansible + Tomcat 實現JAVA代碼自動部署

自動部署過程:jenkins從svn拉取代碼+maven去打war包+ansible去部署+重啓tomcat。java

 

前情回顧:在前面的文章個人環境已經有Jenkins+ansible ,在加上咱們公司有本身的SVN,我只要在本地安裝個Tomcat就ok啦。linux

     其實也有Tomcat的,但我喜歡本身玩本身的,誰讓我是菜鳥了呢,這其中的坑真的很多,但願能幫到初學者。git

一. 什麼是Maven(簡單說一種打包的工具)?web

   Maven項目對象模型(POM),能夠經過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具shell

     Maven 除了以程序構建能力爲特點以外,還提供高級項目管理工具。因爲 Maven 的缺省構建規則有較高的可重用性,因此經常用兩三行 Maven 構建腳本就能夠構建簡單的項目。因爲 Maven 的面向項目的方法,許多 Apache Jakarta 項目發文時使用 Maven,並且公司項目採用 Maven 的比例在持續增加。apache

     你也許會問爲何是Maven,不是Ant。咱們公司的java項目用的是pom文件。若是你的是built文件,那就能用ANT,爲何用POM,不是我這個小運維人員說的算的,你須要去找開發老大。tomcat

  1)官網下載Maven(jenkins的插件裏面有maven,我以爲本身安裝的可控性更高一些)app

     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)解壓下載的包webapp

    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,內事不懂問度娘。

相關文章
相關標籤/搜索