Git + Maven + Jenkins 實現自動化部署

1、安裝 和 準備工做

    咱們選擇了用 Tomcat 服務器下 war 包的安裝方式。Jenkins 的下載地址:http://mirrors.jenkins-ci.org/,打開連接後,表格有war列。Releases行是短時間更新包,LTS行是長期更新包。通常選擇Releases下載便可。將下載完成的 war 包 放在 Tomcat 服務器的 webapps 目錄下,而後啓動服務器便可。建議單獨用一臺 Tomcat 服務器部署,方便管理。git

    一、Tomcat 服務器運行起來後,用瀏覽器訪問 http://ip地址:端口號/jenkins 以下圖:web

         

    二、在 Linux 服務器上執行 cat /root/.jenkins/secrets/initialAdminPassword 複製密碼並粘貼:瀏覽器

       

    三、安裝推薦的插件便可。插件安裝完成後,能夠建立一個管理員帳戶:tomcat

        

    四、建立用戶後,進入Jenkins ,頁面以下圖:服務器

    五、點擊 系統管理 --> 管理插件 --> 可選插件 ,搜索 Maven Integration (用來Maven 編譯打包)和 Publish Over SSH (用於遠程服務器發佈) 插件,安裝完成後重啓:http://IP地址:端口號/jenkins/restartapp

    六、點擊 系統管理 --> 全局工具配置,安裝配置好 JDK、Maven 和 Git。不會安裝的自行百度...webapp

tips:安裝好 git 後請把服務器公鑰添加到 gitlab 服務器。 ide

2、構建 Maven 項目 

    一、輸入任務名稱,選擇 構建一個 Maven 項目:工具

    二、源碼管理gitlab

    三、構建觸發器

build whenever a snapshot dependency is built -->當job依賴的快照版本被build時,執行本job。
build after other projects are built -->當本job依賴的job被build時,執行本job
build periodically -->隔一段時間build一次,無論版本庫代碼是否發生變化,一般不會採用此種方式。
poll scm -->隔一段時間比較一次源代碼若是發生變動,那麼就build。不然,不進行build,一般採用這種方式。

這裏我選擇手動觸發部署,因此沒有勾選任何一項。

    四、構建環境

Delete workspace before build starts --> 默認刪除全部的,也能夠設置刪除特定的文件

- Patterns for files to be deleted:正則匹配刪除哪些文件
- Apply pattern also on directories:規則是否也應用到文件夾
- Check parameter:是否刪除,是個bool值,true則刪除,false不刪除
- External Deletion Command:執行外部刪除命令

Abort the build if it’s stuck --> 構建阻塞的時候,根據超時策略處理.

- Time-out strategy:超時策略,有絕對時間,相對時間,根據之前的構建時間判斷等
- Time-out variable:超時時間
- Time-out actions:超時後的處理,如終結,faile調或者寫描述
- Add timestamps to the Console Output:在輸出界面添加時間戳
- Use secret text(s) or file:使用密文,用於全局性的管理密碼等,勾選後會在下方出現Binding,輸入須要的用戶名,密碼證書等就能夠了。

    五、Build

     六、Post Steps

當Maven 編譯打包完成後,接下來的工做就是 把 war包 解壓到 Tomcat 服務器的 /webapps/ROOT 目錄下,而後重啓服務器。爲此準備了兩個腳本 deploy.sh (解壓war包並重啓服務器),重啓服務器 用到了另外一個腳本 restart.sh 。接下來看一下這兩個腳本的具體內容:

deploy.sh 

#!/bin/sh

war=$1
bin=$(cd `dirname $0`; pwd)

if [ ! -n "${war}" ]; then
    echo "***Usage: $0 [project.war]"
    exit 0
fi
if [ ! -f "${war}" ]; then
    echo "***Error: ${war} does not exist."
    exit 0
fi
if [ ! "${war##*.}" = "war" ]; then
    echo "***Error: ${war} is not a war file."
    exit 0
fi

echo "Deploy ${war##*/}..."
rm -rf ${bin}/../webapps/ROOT/
cd ${bin}/../webapps && mkdir ROOT && cd ROOT
jar -xvf ${war}
rm -rf ${bin}/../work/Catalina/localhost/
echo "Restart tomcat..."
sh ${bin}/restart.sh

備註:一、deploy.sh會先清空tomcat下的ROOT目錄,再將指定的war包加壓至ROOT目錄,最後執行restart.sh重啓tomcat。

          二、可使用 unzip 命令 直接解壓,可是我發現咱們服務器上常常沒有安裝 unzip 這個軟件,因此選擇瞭如上的方式。

          三、一鍵發佈命令:./deploy.sh 項目war包    例如:./deploy.sh /home/test.war 。

restart.sh

#!/bin/sh

bin=$(cd `dirname $0`; pwd)
pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}') 

if [ -n "${pid}" ]; then
    echo "Shutdown..."
    sh ${bin}/shutdown.sh
    sleep 3

    pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
    if [ -n "${pid}" ]; then
        kill -9 ${pid}
        sleep 1
    fi
fi

echo "Startup..."
sh ${bin}/startup.sh
if [ "$1" = "-v" ]; then
    tail -f -n 600 ${bin}/../logs/catalina.out
fi

備註:一、restart.sh是用來重啓tomcat的,若是tomcat沒有啓動則直接啓動,若是已經啓動就先shutdown再啓動,若是shutdown以後3s沒有停掉tomcat進程,則kill掉原來的進程再啓動。

          二、如需重啓tomcat則使用命令:./restart.sh 或 ./restart.sh -v (參數-v表示啓動時打印tomcat啓動日誌)。

 

實施方案: 把 deploy.sh 和 restart.sh 拷貝到 Tomcat 的bin目錄下,再用chmod +x 給這兩個腳本賦上可執行權限。

本地部署方案:

#!/bin/sh
export BUILD_ID=qianxx
sh /home/wwwroot/t8_8280_passenger/bin/deploy.sh ${WORKSPACE}/target/*.war
View Code

遠程服務器部署方案:

  1. 添加服務器

系統管理 --> 系統設置 --> Publish over SSH ,服務器配置以下:

2. 工程中配置

/home/wwwroot/t8_8180_common/bin/deploy.sh /root/common/*.war
View Code
相關文章
相關標籤/搜索