JAVA WEB自動化部署牛刀小試

  • 簡述

做爲一隻後臺狗,在使用Java爲技術棧來開發後端服務應用的時候,或多或少的都須要本身手動部署。一開始,以爲寫完一次本身手動部署到服務器上,還以爲新鮮感還不錯,畢竟看着黑黑的terminal有種莫名的興奮。後來服務端寫完,須要改動web應用的時候,並且一次須要部署三到四個應用的時候,一股噁心感從內而外噴涌而出。java

本文記錄了本身工做中所用到的自動化部署(偷懶)歷程,有須要的程序汪自行收藏。git

  • 辛酸之路

  • 環境

    因爲工做中使用的IDE是eclipse,使用Maven進行包管理,因此,如下所涉及的都是基於Java 1.8,Maven 3.3.9,Elicpse Luna 4.4.2。github

  • 歷程
  • TOP1 Maven插件配置

項目中若是有使用Maven的話,則能夠很方便的以tomcat7爲例,在pom文件中配置一個插件便可輕鬆實現,代碼以下:web

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url>http://server:port/manager/text</url>
        <username>admin</username>
        <password>admin</password>
        <update>true</update>
        <path>/wepapp</path>
    </configuration>
</plugin>

此處注意url節點。另外須要在tomcat服務器的conf/tomcat-users.xml配置一個admin的用戶權限。shell

<role rolename="manager-gui"/>  
<role rolename="manager-script"/>  
<user username="admin" password="admin" roles="manager-gui, manager-script"/>

大功告成,運行mvn tomcat7:deploy,你就會驚奇的發現war文件就到了對應的tomcat下的webapps目錄之中了。apache

  • TOP2 Linux腳本部署

tomcat雖然部署麻煩,可是就穩定性來講,比起其它的web容器仍是稍微好一丟丟。略過tomcat的坑不說,服務器中每每會有多個tomcat存在,特別是在測試的服務器上,我司放了有10多個tomcat,這樣,做爲一個 沒有專門部署人員的小團隊來講,簡直是個噩夢,部署幾個應用須要執行一大丟命令。windows

會偷懶的人每每就會寫好一些經常使用的部署腳步,避免重複性的工做,在這裏,我只簡單介紹本身所使用的一種腳本,就是根據tomcat容器所在路徑找到所在進程,殺死進程,而後進行重啓。後端

#!/bin/bash
tomcat_path1=/home/tomcat/tomcat_r3
cd $tomcat_path1
echo xxx的tomact路徑是$tomcat_path1
# 找到tomcat1的進程id
tomcat1_pid=$(ps -ef|grep $tomcat_path1|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ')
if [ "$tomcat1_pid" ];then
    echo xxx的tomact進程 id是 $tomcat1_pid
  # 殺掉tomcat1進程
  if
    kill -9 $tomcat1_pid
  then
    echo 成功殺死xxx的進程
  else
    echo xxx進程沒殺死,尷尬
  fi
else
    echo XXX進程已經掛掉了
fi
# 啓動tomcat2並重定向到日誌輸出
sh $tomcat_path2/bin/startup.sh
echo 重啓xxx
  • TOP3 Windows與Linux架橋互通

因爲是在windows中進行開發工做,服務器使用的是cent os,因此又會多出許多重複性的工做。因此我選擇使用putty,在windows與Linux之間架一個橋,從而可以方便的上傳文件以及對遠程服務器進行操做。tomcat

總體思路是,本地打包maven項目,打包完成以後上傳到服務器WEB容器對應目錄,而後調用咱們上一步的服務器腳本,完成總體項目部署流程。批處理文件代碼示例以下:bash

@echo off
set project_path=xxx
set server_user_1=root
set server_passwd_1=xxx
set server_ip_1=serverip
set local_file1=%project_path1%\target\xxx.war

set deploy-shell=test-web-deploy.sh
echo 當前使用的JDK 版本: 
java -version

echo 開始打包
E:
cd %project_path%
call mvn clean install
echo 打包完畢

echo 開始上傳xxx到服務器
call pscp -P port -l %server_user_1% -pw %server_passwd_1% -r %local_file1% %server_ip_1%:%server_path1%
echo 上傳xxx完畢

echo 開始運行腳本
call plink -P port %server_user_1%@%server_ip_1% -pw %server_passwd_1% sh %deploy-shell%
  • 效果

    終於鳥槍換炮了,感受本身又多了好多時間能夠作其餘的(休息)事了。測試了一下,效果仍是很使人滿意的,花在部署上的時間已經幾近爲零。

  • 結論

    本文僅適合在本身負責的項目中簡單進行自動化的部署(偷懶),基於本文,能夠擴展發揮作一個自動化部署系統。

Tips:關於CI的話,網絡上有許多持續集成項目的框架,在這裏推薦三個:

  1. Travis CI 開源持續集成框架,搭配github使用,幹活不累,並且只須要配置yaml,方便快捷。
  2. jenkins 基於Java開發的CI,搭配jetty,幹活不累。
  3. Go 採用Server-Agent的模式,配置pipeline,幹活不累。

這裏只是作一個學習和交流,如須要更深層次的交流,能夠聯繫做者:1049058427@qq.com
我的博客地址:小安安的自留地
知乎專欄地址:全乾工程師
Github地址:wslongchen
或者掃碼回覆「應垂絲汀」加入做者的小圈子:

微信小號

相關文章
相關標籤/搜索