首頁>Club>
12
回覆列表
  • 1 # 隨機印變

    tomcat的conf目錄下有一個server.xml檔案。裡面context標籤下有一個屬性叫reload=true,你設定一下。以後他就會自動部署

  • 2 # 若只是初見good

    題主,這個問題很好做,寫一個shell指令碼就可以搞定

    下面是我給你的解決方案(linux系統下):

    開發人員使用Git或者SVN把修改好的程式碼提交到SVN或Git伺服器上,然後在做檢出打包的功能,步奏如下:

    2.checkout 最新的程式碼,進行打包和copy到tomcat的目錄下

    3.再次啟動tomcat伺服器

  • 3 # 淮安二傻子

    tomcat自動化部署指令碼實現的功能如下:

    (1) 檢查tomcat程序是否存在,如果存在則kill掉

    (2) 備份現有war包到tomcat/backup目錄

    (3) 複製當前目錄新war包到tomcat/webapps目錄

    (4) 啟動tomcat

    shell指令碼內容如下:

    #!/bin/bash

    now=`date +%Y%m%d%H%M%S`

    tomcatPath=/usr/local/tomcat/software/tomcat6

    backupPath=/usr/local/<span >tomcat</span><span style="font-size: 1em; line-height: 1.5;">/software/tomcat6/backup</span>

    war=$1

    if [ -e "$war.war" ]; then

    echo -e "\033[34m war archive: $war.war \033[0m"

    else

    echo -e "\033[31m war archive "$war.war" not exists \033[0m"

    exit -1

    fi

    # change color

    echo -e "\033[34m"

    #create backup dir

    if [ ! -d "$backupPath" ]; then

    mkdir "$backupPath"

    fi

    echo "tomcat home: $tomcatPath"

    echo "backup path: $backupPath"

    echo "try to stop tomcat..."

    pid=`ps aux|grep "java"|grep "$tomcatPath"|awk "{printf $2}"`

    if [ -n $pid ]; then

    echo "tomcat pid: $pid";

    kill -9 $pid;

    fi

    echo "stop tomcat finished..."

    echo "backup old archive..."

    if [ -f "$tomcatPath/webapps/$war.war" ]; then

    mv -v "$tomcatPath/webapps/$war.war" "$backupPath/$1_$now.war";

    fi

    rm -rf $tomcatPath/webapps/$war*

    echo "copy $war.war archive to webapps.."

    cp -v "$war.war" "$tomcatPath/webapps/"

    echo -e "\033[32m"

    echo "startup tomcat..."

    sh $tomcatPath/bin/startup.sh

    tail -10f $tomcatPath/logs/catalina.out

    使用時,需要先修改tomcatPath的值為實際tomcat路徑。

    儲存該檔案到autodeploy.sh, 執行命令:

    Shell執行程式碼

    ./autodeploy.sh abc

    autodeploy.sh和abc.war

  • 4 # 使用者51377078158

    1.程式碼倉庫,git和svn

    2.拉取最新程式碼,自定義打包編譯,jenkins

    3.透過tomcat自動redeploy打包好的war包,或者scp加指令碼程式碼重啟,一般是第二種,第一種不適用於頻繁redeploy

  • 5 # Gary2018

    釋出到本地的話,在maven中使用tomcat plugin即可,如果要釋出到測試環境SIT或UAT環境,應該使用ci工具比如Jenkins, 在Jenkins中建一個continues project, 只要有code checkin, 就自動build和deploy到測試環境,在Jenkins中還需要有一個release project, 因為continues自動build的都是snapshot,這不能部署到production上去, 這個release project就是用來build release版本,然後publish到公司內部的maven repositories(一般用nexus),開發人員不應該允許操作production環境, 應該由專門的伺服器管理人員從nexus上下載release版本進行production的部署。

    題外說一點,大多數部署也包含資料庫指令碼的變化,這怎麼自動部署,也是有很好的工具比如liquibase,用liquibase建立資料庫命令的版本控制,打包在war/ear中,部署時liquibase能自動檢測環境中現有的資料庫指令碼的版本,而執行沒有部署過的資料庫指令碼命令。

  • 6 # 三僡然

    自動化部署在網際網路中已經非常成熟了。也有很多的開源方案。

    現在用Jenkins 自動部署的比較多,詳細的配置可以網上搜。

    自動部署流程一般如下

    git同步最新程式碼使用maven打包專案停止tomcat伺服器部署專案啟動tomcat伺服器

    透過web操作的過程一般都是

  • 7 # 一個存在感小透明

    像BAT這樣的大公司,都是有一套自動化流水線的,出於公司安全紅線要求,我無法講的太細,但是我可以提供些思路給題主參考。

    工具

    工欲善其事,必先利其器,我們先來說需要哪些工具

    1 git,用於儲存最新要上線的程式碼

    2 maven,用於打包專案

    3 Jenkins,用於觸發任務

    4 sh指令碼或者Python指令碼,執行Jenkins任務的指令碼

    流程

    接下來是實際的流程。

    首先,由開發人員把要上線的程式碼上傳到指定程式碼庫。

    然後,開發人員觸發Jenkins任務。

    這個Jenkins的任務是自動化部署的核心,包含以下步驟

    1 開始對程式碼進行打包

    2 把包放到伺服器指定資料夾下

    插一句,為了安全起見,我們建議的是進行熱部署,何為熱部署?

    熱部署需要Nginx+多臺Tomcat的配合。

    假設目前只有一臺Tomcat連線到了Nginx上,那麼可以把要更新的程式碼部署在另一臺Tomcat上,然後啟動新的Tomcat,確認該服務啟動成功,各能力已經啟動後,再去修改Nginx的conf檔案,把原本給舊Tomcat的請求切到新Tomcat上,這樣就實現了熱部署。如果不使用這種辦法,而是直接在舊的Tomcat上部署新的war包的話,重啟Tomcat的過程,就會有幾秒停服,這對使用者來說是不可接受的。既然說到這裡,再介紹兩個熱部署用到的Nginx的命令。在修改Nginx的conf檔案後,要在Nginx的根目錄下執行sbin/nginx -t 來檢查當前conf檔案配置是否正確,如果是“successful”的,就可以執行sbin/nginx -s reload來進行實現把新的流量切到新的機器上,即使新的conf檔案生效。

    好的,關於熱部署的部分說完了,我們再說回來。

    3 將舊的伺服器根目錄下的war包用cp命令放到一個專門備份的資料夾下

    4 將新的war包同樣用cp命令放到即將啟動的Tomcat根目錄下的webapps資料夾下,然後解壓

    5 執行sh bin/

    start.sh

    啟動新的Tomcat

    6 檢查該Tomcat是否啟動成功,包括程序存在,tail -f

    catalina.out

    日誌一直在打,api能夠調通

    7 修改Nginx的conf檔案

    8 檢查Nginx配置檔案是否successful

    9 更新Nginx配置,即sbin/nginx -s reload

    10 繼續觀察新Tomcat是否執行正常,如果不正常則立刻切回原Tomcat,本次自動更新失敗

    11 如果正常,則停止舊的Tomcat。

    以上,自動化部署完成。

  • 8 # 測試領域專家

    1、需要一個SCM也就是程式碼控制管理工具,現在用git的比較多,當然也可以用svn;

    2、需要偵探出需要部署的實際,有如下幾個辦法:

    (1)對於git或者svn來說,都有hook,比如merge,commit,update之後觸發等,比如,提交了一個檔案之後,觸發呼叫一個url;

    (2)做一個定時任務,每半個小時或者1個小時檢查原始碼,看是否有程式碼的改變,如果有,則需要往下去做部署。

    這一步一般使用Jenkins建立job;

    3、打包

    針對步驟2,如果是全量包,比較好做,也就是隻要檢測出程式碼有改變,則直接使用Maven,ANT,Gradle直接的打包工具進行打包即可。但是如果是增量包,則需要透過git log或者svn log等檢查出具體更新的檔案,然後針對檔案是否需要編譯繼續操作,當然一個更簡單的辦法,就是程式碼全量編譯,然後真針對有變更的檔案進行操作。本步驟可以得到修改後的檔案(class或者靜態檔案)以及路徑。

    這一步一般使用Jenkins建立job,然後使用Maven或者ANT或者Gradle等工具;

    4、上傳

    從第三步中獲取到的檔案和路徑,需要上傳到tomcat伺服器中。如果是全量包,要好做一些,直接用指令碼scp合作和jenkins的tomcat外掛傳到遠端伺服器即可。如果是增量包,則需要寫指令碼針對每個不同的檔案進行上傳。

    這一步一般用Jenkins,也可以自己寫python或者shell指令碼;

    5、重啟

    無論是重啟tomcat或者ng等,原理都一樣:

    (1)獲取伺服器程序id;

    (2)kill掉程序;

    (3)start 服務。

    此三步可以用python的psutil或者shell指令碼實現。呼叫實現也是透過Jenkins。

    綜上,幾個關鍵工具和步驟:

    1、版本控制管理,git或者svn,獲取檔案變更通知和內容;

    2、打包,java系的是maven,ant,gradle這些;

    3、jenkins,偵測程式碼的變更、呼叫打包工具、上傳包和重啟伺服器。

    一般來講,還需要加一步,就是重啟之後的伺服器連通性驗證,以免服務沒有啟動成功造成生產故障。

  • 9 # Sapsoft地理資訊

    最近接觸了jenkins這個東西,所以花點時間瞭解了下。它可以在程式碼上傳倉庫(如github,gitee,gitlab)後,在jenkins(一個網站介面)中透過獲取程式碼倉庫中最新程式碼,進行自動化部署,而省去手動打包、上傳伺服器、部署這一系列步驟,非常方便。

    下面教程分為以下幾個部分:

    一、在你的本地電腦或者linux伺服器上下載安裝jenkins:

    jenkins下載地址:https://jenkins.io/ 下載網站的war包版本就好了

    下載完後把它部署到你的tomcat上執行:放到tomcat的webapps目錄下,啟動tomcat(windows下雙擊startup.bat或者linux下執行sh startup.sh),然後透過瀏覽器訪問,如我的電腦上訪問:localhost:8080/jenkins 。啟動後的介面如下:

    然後到提示的檔案中把裡面的文字複製出來填到管理員密碼中。

    接著如果是在本地電腦跑,可能會出現:該jenkins例項似乎已離線 提示,如果出現,是因為本地https訪問不了的原因。在瀏覽器中另開啟一個介面http://localhost:8080/pluginManager/advanced,把升級站點中的url中的https改為http,儲存更新。然後關掉tomcat伺服器重啟,就可以聯網了。

    接下來選擇安裝推薦的外掛,這個需要一定的時間。最後額外推薦安裝兩個外掛,在系統管理中可以安裝外掛:

    1、 Rebuilder2、 Safe Restart二、在linux伺服器中安裝git, maven,建立一個jenkens目錄,配置git的公鑰到你的github上,這些步驟是使用jenkins的前提。

    安裝git的目的是在自動化部署前實時從git遠端倉庫中拉取最新的程式碼。在linux(我用的是centos系統)安裝git:

    yum install git

    生成金鑰:

    ssh-keygen -t rsa -C "[email protected]"

    可以不設定金鑰密碼直接按三次回車。 把家目錄中生成的公鑰內容複製到github或其他倉庫上。

    安裝maven的目的是透過專案中的pom.xml檔案自動解決專案依賴問題,構建專案。linux中透過wget+下載連結下載maven的zip包然後解壓即可。配置maven環境變數:

    vim /etc/profile //在這個檔案末尾加上export MAVEN_HOME=/root/maven3.4.5export PATH=$MAVEN_HOME/bin:$PATH //儲存後在命令列輸入,啟動配置. /etc/profile

    建立jenkins目錄,用來儲存拉取下來的專案程式碼等。

    三、將Linux伺服器註冊到Jenkins上

    1、開啟伺服器上的ssh服務,可透過 netstat -anp | grep :22命令檢視是否開啟

    2、先來測試一下怎麼在jenkins中操作遠端伺服器

    在jenkins中選擇系統管理——》新建節點

    其中遠端工作目錄即你在Linux上建立的jenkins目錄。在Credentials新增一個遠端使用者,輸入你的遠端機器使用者名稱和密碼儲存。

    在全域性工具配置中配置git命令:

    3、自動化部署過程原理:

    所以需要編寫一個shell指令碼來執行這個過程。

    具體的建立Jenkins任務的過程為

    1.建立jenkins任務

    2.填寫Server資訊

    3.配置git引數

    4.填寫構建語句(shell指令碼),實現自動部署。

    四、建立自動化部署任務

    1、編寫shell部署指令碼deploy.sh,並放到linux伺服器中的jenkins目錄下,在該目錄下透過touch deploy.sh建立一個指令碼,把下面的指令碼複製到裡面即可(到時每次自動部署都會執行它),指令碼中的my-scrum為我要自動構建的專案名:

    #!/usr/bin/env bash#編譯+部署專案站點 #需要配置如下引數# 專案路徑, 在Execute Shell中配置專案路徑, pwd 就可以獲得該專案路徑# export PROJ_PATH=這個jenkins任務在部署機器上的路徑 # 輸入你的環境上tomcat的全路徑# export TOMCAT_APP_PATH=tomcat在部署機器上的路徑 ### base 函式killTomcat(){ #pid=`ps -ef|grep tomcat|grep java|awk "{print $2}"` #echo "tomcat Id list :$pid" #if [ "$pid" = "" ] #then # echo "no tomcat pid alive" #else # kill -9 $pid #fi #上面註釋的或者下面的 cd $TOMCAT_APP_PATH/bin sh shutdown.sh}cd $PROJ_PATH/my-scrummvn clean install # 停tomcatkillTomcat # 刪除原有工程rm -rf $TOMCAT_APP_PATH/webapps/ROOTrm -f $TOMCAT_APP_PATH/webapps/ROOT.warrm -f $TOMCAT_APP_PATH/webapps/my-scrum.war # 複製新的工程到tomcat上cp $PROJ_PATH/scrum/target/order.war $TOMCAT_APP_PATH/webapps/ cd $TOMCAT_APP_PATH/webapps/mv my-scrum.war ROOT.war # 啟動Tomcatcd $TOMCAT_APP_PATH/sh bin/startup.sh

    2、在jenkins上點選新建一個任務,填好任務名,填寫執行的節點(上文中新建節點時建立的):

    5、填寫構建任務時的shell指令碼,然後儲存,點選立即構建完成自動構建。(這裡有一個坑,一定要給tomcat下所有sh檔案加上x許可權才能啟動tomcat成功,具體為在tomcat目錄上層執行chmod a+x -R tomcat目錄或者在tomcat的bin目錄下執行chmod +x *.sh)

    #當jenkins程序結束後新開的tomcat程序不被殺死BUILD_ID=DONTKILLME#載入變數. /etc/profile#配置執行引數 #PROJ_PATH為設定的jenkins目錄的執行任務目錄export PROJ_PATH=`pwd`#配置tomcat所在目錄export TOMCAT_APP_PATH=/root/tomcats/tomcat-my-scrum #執行寫好的自動化部署指令碼sh /root/jenkins/

    deploy.sh

    6、自動化構建成功:

    7、後續程式碼如果有改動,只要push到github或者gitlab等上,在jenkins介面中再次執行構建任務就可以了,非常方便,自動化部署,再也不用手動上傳專案到伺服器了。

    五、解決一個tomcat關閉,所有tomcat都被關閉了的問題(如果你的jenkins也是安裝的伺服器上的其中一個tomcat中,就可能被莫名殺掉)

    這是因為所有的tomcat的關閉指令碼(shutdown.sh或者說catalina.sh)都預設監聽的是8005埠。只要進去tomcat目錄下的conf目錄下的server.xml檔案中,將

    六、以後可以在linux伺服器中安裝多個tomcat,來部署不同的專案,分別使用不同的埠,如我喜歡用8081,8082,8083等埠來解決多個tomcat埠衝突問題(在tomcat的conf目錄下的server.xml中修改即可,預設為8080)。然後可以用jenkins來管理這些tomcat的自動化部署啦。

  • 10 # cottoning

    看了一下各位樓主的回答,確實不錯。

    各位樓主說了好多工具,當然都可以用無可厚非,工欲善其事必先利其器,工具當然是好的,但是不要被太多的工具束縛了從而耽誤浪費更多的時間。

    如果只是單純的部署的話,也不費事。無非題主的意思是這部分工作重複性高,複雜度低,但是比較重要,日常工作中用在部署上的時間太多,不值得,更不值得去加太多的班,因為好多重要應用系統都必須要在非業務時段去做變更,所以加班就不可避免了。

    所以呢,花一點時間出來,梳理一下你們部署的流程,例如,上線準備(下載投產包等)、備份(備份程式和配置檔案、資料備份等)、程式更新、資料庫更新、修改配置、重啟服務、技術檢查等,梳理好之後,開始開發這樣一整套自動化流程,固定下來,儘量不要人工干預,除非必要的增加斷點提醒,至於用什麼語言開發,shell、bat、 Python等指令碼最好不過,也可以考慮使用java開發,然後用shell、bat或Python封裝成指令碼,這些都是核心功能,等完全實現了,部署的工作就可以變成一鍵啟動執行一個指令碼就搞定了,不用再手工每次重複操作那麼多步驟而且還容易出錯。等一鍵執行功能成熟之後你就可以設定定時任務,讓它定時自動發起就不用加班守候了。

    以上就是自動化的一個簡單粗暴的實施方案,供參考。

  • 11 # 會點程式碼的大叔

    雖然我只是個開發人員,但是很多時候都是我們自己完成環境部署,目前我們測試環境實現了自動化部署,是基於Jenkins來做的;生產環境暫時還是【人肉】部署。整體的釋出水平和很多公司還是有很大的差距,不過公司缺少一些基礎平臺,我們也只能自己想辦法。

    自動化釋出,前置工作有很多

    透過Jenkins實現自動化釋出的過程很簡單:

    開發人員把程式碼透過git或者svn提交;

    Jenkins可以透過手動或定時的方式啟動,會更新最新的程式碼,跑全量的測試用例,測試通過後進行程式碼的部署;部署的過程都是提前寫好的指令碼,比如透過什麼命令打包,把包放到哪臺伺服器的哪個目錄下面,透過什麼命令停止和啟動(重啟)服務。(具體的安裝和配置,搜尋一下會找到很多資料)

    自動化釋出看起來非常簡單,但實際上前置工作很多:

    需要有程式碼版本控制工具:這個問題不大,基本上每個公司都會有,最常用的git和svn;需要告訴Jenkins專案的程式碼在哪裡。自動化構建工具:如Maven、Gradle、Ant,我們基本都用Maven,個別特別老的專案用的Ant;需要告訴Jenkins專案執行什麼命令可以打包。整包釋出:我瞭解還是有不少公司喜歡增量釋出,但是我覺得如果能做到全量釋出的話是最好了,能避免很多的問題。單元測試:很多人會忽視這個問題,我還是覺得很有必要的;寫單元測試要發自內心地覺得有用,而不是為了追求測試覆蓋度,不是為了做給領導看。灰度釋出和回滾:這一點我們也沒有做到,上線就是全部都上線,有問題的話就全部回退;我們專案儘量做到了【人肉灰度釋出】,也就是先更新一個server,然後驗證透過之後,再更新下一個;回滾也是人肉操作。容器:要是公司用到了容器的話,那麼自動化釋出會容易一些...人肉釋出,想盡辦法減少工作量

    因為很多基礎平臺沒有(我們公司很多工作都做了細分),一些事情的推進不是開發就可以推進的,通常需要很多部門的配合;所以生產環境依然還是手動釋出。

    拆包:我們專案是純介面的專案,沒有頁面;專案被拆成了幾個包,有單獨一個包是對外提供服務的,也就是說,其餘幾個包隨時可以線上釋出,反正對使用者是無感的;

    編寫各種shell指令碼:既然做不到自動化釋出,那麼就讓釋出儘可能簡單;可以把釋出過程中一系列的命令,都寫到shell腳本里面完成;

    偽灰度釋出:對外提供介面的包被部署在N個server上(使用Spring Boot內嵌的Tomcat),前面掛著Nginx,Nginx可以監控每個server(節點)的存活,所以釋出的時候先停掉一個server做程式更新,Nginx會知道這個server不存活,這時候不會再發送新的請求到這個server上,直到程式更新完成啟動。

  • 12 # 曲翎風

    可以使用 Jenkins 自動化部署專案,透過 Jenkins 部署來節省運維時間,不需要手動 cp 上線及版本釋出。

    Jenkins 是什麼

    Jenkins 是一款自包含的開源自動化服務,可用於自動執行與構建,測試和交付或部署軟體有關的各種任務。

    Jenkins 本身是用 Java 語言開發的,所以安裝 Jenkins 的機器至少要有 JDK,另外建議Git、Ant、Maven、Gradle、Groovy等工具也一併安裝好,方便與這些構建工具整合。

    安裝及啟動

    直接從官網下載最新的war包,然後解壓到某個固定目錄就算安裝完成了,非常方便。

    啟動方法:java -jar jenkins.war 即可,如果要以後臺程序的方式啟動,改成 nohup java -jar jenkins.war & 即可,啟動過程中,它會將 war 包解壓到 ~/.jenkins 目錄下,並生成一些目錄及配置檔案,有興趣的同學可以自己進入這個目錄研究一下。

    更新及下載外掛

    啟動成功後,瀏覽http://localhost:8080/ (如果不是安裝在本機,localhost請自行換成伺服器對應ip)

    參考上圖,進入 Manage Plugins 的介面,Jenkins 的很多功能都是藉助 plugin 來完成的,首次啟動時很多外掛會提示已經過時,需要更新,建議升級成最新版本,同時建議安裝以下外掛,以方便支援 git 專案及向遠端機器上傳檔案及執行遠端 shell 命令。

    外掛升級完後,重啟 Jenkins 以便讓其生效。

    系統配置

    在正式建立部署專案前,還有幾個關鍵引數要設定,如下圖:

    首先是 JDK

    其次是 Ant、Maven引數

    如果需要打包 Gradle專案,Gradle也要配置

    對於 Git 託管的專案,Git 配置是不可少的

    如果部署過程中,還需要執行 shell 指令碼,以及透過 scp 向遠端機器上傳檔案,則需要配置下面這些

    注:上圖中紅色標 1 的地方,填寫的是本機的ssh私鑰證書,紅色標 2 的地方為證書的訪問密碼,如果未設定證書密碼,直接留空,Root Repository Path 為遠端伺服器的上傳根目錄,hostname 即為遠端伺服器的機器名稱(或IP).

    此外,還有一個強大的 publish over ssh,不僅能向遠端伺服器上傳檔案,還能遠端執行伺服器上的 Shell 指令碼,可參考下面配置

  • 13 # 張鉡

    Tomcat 可以利用Jenkins實現自動化部署,https://cloud.tencent.com/developer/article/1137644

  • 14 # 漂泊在他鄉

    實現Tomcat自動化部署,屬於IT管理CI/CD的範疇。

    CI是Continuous Integration持續整合的簡寫,核心是開發人員提交程式碼後自動立即構建和單元測試,CD是Continuous Delivery和Continuous Deployment,代表持續持續交付和持續部署,持續交付是指在構建完成後,交付給測試,通常是交付測試環境,由測試進行測試,持續部署是指持續交付前全自動部署測試環節,以及測試透過決定上線後的自動化部署生產環境。

    實現Tomcat自動化部署,最直接的方式就是透過DevOps工具,最常見的工具有Jenkins、Gitlab等。具體的詳細教程,推薦直接看官方文件的教材最權威。

  • 中秋節和大豐收的關聯?
  • 馬拉松如何才能跑得久?