天天看點

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

一、安裝 和 準備工作

    我們選擇了用 Tomcat 伺服器下 war 包的安裝方式。Jenkins 的下載下傳位址:http://mirrors.jenkins-ci.org/,打開連結後,表格有war列。Releases行是短期更新包,LTS行是長期更新包。一般選擇Releases下載下傳即可。将下載下傳完成的 war 包 放在 Tomcat 伺服器的 webapps 目錄下,然後啟動伺服器即可。建議單獨用一台 Tomcat 伺服器部署,友善管理。

    1、Tomcat 伺服器運作起來後,用浏覽器通路 http://ip位址:端口号/jenkins 如下圖:

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

    2、在 Linux 伺服器上執行 cat /root/.jenkins/secrets/initialAdminPassword 複制密碼并粘貼:

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

    3、安裝推薦的插件即可。插件安裝完成後,可以建立一個管理者賬戶:

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

    4、建立使用者後,進入Jenkins ,頁面如下圖:

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

    5、點選 系統管理 --> 管理插件 --> 可選插件 ,搜尋 Maven Integration (用來Maven 編譯打包)和 Publish Over SSH (用于遠端伺服器釋出) 插件,安裝完成後重新開機:http://IP位址:端口号/jenkins/restart

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

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

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

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

二、建構 Maven 項目 

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

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

    2、源碼管理

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

    3、建構觸發器

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

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,通常采用這種方式。

這裡我選擇手動觸發部署,是以沒有勾選任何一項。

    4、建構環境

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

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,輸入需要的使用者名,密碼證書等就可以了。

    5、Build

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

     6、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      

備注:1、deploy.sh會先清空tomcat下的ROOT目錄,再将指定的war包加壓至ROOT目錄,最後執行restart.sh重新開機tomcat。

          2、可以使用 unzip 指令 直接解壓,但是我發現我們伺服器上經常沒有安裝 unzip 這個軟體,是以選擇了如上的方式。

          3、一鍵釋出指令:./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      

備注:1、restart.sh是用來重新開機tomcat的,如果tomcat沒有啟動則直接啟動,如果已經啟動就先shutdown再啟動,如果shutdown之後3s沒有停掉tomcat程序,則kill掉原來的程序再啟動。

          2、如需重新開機tomcat則使用指令:./restart.sh 或 ./restart.sh -v (參數-v表示啟動時列印tomcat啟動日志)。

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

本地部署方案:

Git + Maven + Jenkins 實作自動化部署
Git + Maven + Jenkins 實作自動化部署
Git + Maven + Jenkins 實作自動化部署
#!/bin/sh
export BUILD_ID=qianxx
sh /home/wwwroot/t8_8280_passenger/bin/deploy.sh ${WORKSPACE}/target/*.war      

View Code

遠端伺服器部署方案:

  1. 添加伺服器

系統管理 --> 系統設定 --> Publish over SSH ,伺服器配置如下:

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

2. 工程中配置

Git + Maven + Jenkins 實作自動化部署
Git + Maven + Jenkins 實作自動化部署
Git + Maven + Jenkins 實作自動化部署
/home/wwwroot/t8_8180_common/bin/deploy.sh /root/common/*.war