JAVA代碼自動部署


自動部署過程: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,內事不懂問度娘。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM