日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Jenkins+Gitlab的自动化部署实战

發布時間:2023/12/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Jenkins+Gitlab的自动化部署实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

故事背景

  一個中小型企業,是典型的互聯網公司,當初期的時候可能運維只能標配到2~3人,此時隨著公司的發展,項目會逐漸增多。前期部署項目可能都是手動的,

俗稱“人肉部署”,這簡直是無比的痛苦,不能忍受的。這樣開發的時間也會耽誤,運維的時間也會耽誤,全都浪費在這些重復性的工作上面,毫無價值可言,

這時候運維終于忍受不了,上了腳本。但是慢慢的發現項目依舊在增長,腳本每次還要更改給開發,效率低下,后來測試環境以及開發環境直接上了jeknins,

每臺開發機器是jeknins agent端,自此,開發環境運維終于解脫了出去。但是線上上線運維依舊、所以得定制一套線上上線的流程標準,然后上jenkins自動化。

前提標準

? ? 想要實現自動化的前提是標準化,例如程序的日志目錄、程序目錄、程序目錄命名、代碼分支、代碼命名規則、程序高可用. 針對以上內容我們給開發做了

嚴格的標準并落地執行。

在此我會以Java程序為例子,因為我見到的最多的就是java程序比較麻煩,而php或者python可能只需要在服務器上git pull更新一下代碼就可以了。

  tomcat規則: 每臺服務器放置一個tomcat,tomcat使用ROOT.war,并配置日志切割

  程序目錄:統一使用tomcat進行管理,所有的項目統一打出war包,放置tomcat下面命名為ROOT.war

  程序日志:統一放置在規定的目錄,例如: /apps/logs/$app.log

  代碼分支:不同的環境使用不同的分支,開發 dev分支, 測試 test 分支, 預發布 pre分支, 生產線上 master分支。分支隔離,不同環境取不同環境的配置

  代碼打包: 因為是java的代碼,我們選擇的是使用maven進行打包,開發只需要關心代碼層即可

  高可用: 每個程序必須支持多節點部署,不可出現單點故障的情況,否則不予上線.

自動化部署系統

  因為中型公司不可能配置運維開發,而開發只管開發的,所以運維只能是通過使用開源工具的方式來搭建自動化部署系統,組件如下圖:

?

上圖的Jenkins服務器即自己是自己的agent,gitlab服務器是代碼倉庫服務器,Jenkins服務器會調用腳本,腳本做一些響應的動作進行自動化上線。

自動化上線流程:?

?

下面進行步驟的分解:

?1. 運維人員登錄jeknins,在jenkins界面點擊響應的job,每個job是更新一個主機,job以服務名+ip組成,點擊后jeknins會調用Shell發布腳本,下面這些都是腳本完成

?2. 發布腳本所做的第一步就是獲取此項目的最新的代碼版本

?3. 發布腳本所做的第二部是使用maven進行打包,每個maven打包的參數都統一

?4. 將打包好的war包拷貝到目標服務器上面

?5. 將需要上線的主機在前端負載haproxy上面進行下線(針對核心業務,建議這么做,比較優雅,不太暴力)

? ? ? 方法參考:?http://www.cnblogs.com/topicjie/p/7106860.html

?6.重啟目標主機的tomcat服務

?7.測試url訪問,返回是否正常

?8.在haproxy上線該主機

?

腳本實例

?下面是一個線上使用的上線腳本,scp是通過ssh免密的方式,并且部署tomcat是java用戶. tomcat路徑是/usr/loca/tomcat,每臺主機一個tomcat

腳本必須指定要更新的主機,上線代碼路徑

分支線上默認master ,mvn配置為product參數

?注意: 此腳本中不包含 5,7,8 步驟,如果需要,請自行補充。

#!/bin/bash ################################################################## # # Date : 2016/07/15 # Email: gengjie@outlook.com # Proj : xx java項目 # # 主要功能是更新線上tomcat服務使用. # 使用此腳本必須配置java用戶免密碼登錄 # 第一次必須手動將代碼clone到BASE_CODE_PATH目錄 ################################################################## . /etc/profile# 定義此項目所包含的主機,以空格隔開,必須嚴格遵守 inc_host=("192.168.24.50" "192.168.24.51")##### *** 定義項目代碼存放目錄,必須定義正確 *** #### CODE_PATH="/app/code/xxxxxx"# 定義tomcat實例目錄 Tomcat_PATH="/usr/local/tomcat"# 定義git分支,默認是master分支 CODE_BRANCH='master'# 定義編譯配置文件,生產環境默認應是product,此處是pom.xml文件中定義 MVN_CONF="product"# 獲取需要更新的主機IP U_host="$1"# Define help usage() {echoecho -e " Usage : sh ./`basename $0` ipaddress"echo }code_pull() {echo "[Info] --->>> 項目開始更新代碼... <<<---"cd $CODE_PATHgit checkout $CODE_BRANCHgit pull -u origin master:master if [ $? -ne 0 ];thenecho "Git Pull Code Error"exit 1fiecho "[Succ] --->>> 項目代碼更新完成... <<<---"echo }# Define build war mvn_build() {cd $CODE_PATHecho "[Info] --->>> 項目開始編譯... <<<---"mvn clean package -P $MVN_CONFif [ $? -ne 0 ];thenecho "[Error] Compile Error,Please Check Your Code."exit 1fiecho "[Succ] --->>> 項目編譯完成... <<<---"echo }# Define publish push_remote() {echo "[Info] --->>> 開始發布主機: $U_host <<<---"ssh $U_host "/bin/rm -rf ${Tomcat_PATH}/webapps/ROOT*"scp ${CODE_PATH}/target/*.war $U_host:$Tomcat_PATH/webapps/ROOT.warssh $U_host "/bin/sh /app/scripts/stop_tomcat.sh"sleep 3ssh $U_host "source /etc/profile;/bin/sh ${Tomcat_PATH}/bin/catalina.sh start" echo "[Succ] --->>> 主機: $U_host 發布完成. <<<---"echo}# check host check_host() {for host in ${inc_host[@]};doif [[ "$U_host" == "$host" ]];thenreturn 0fidonereturn 1 }# Check user check_user() {if [ `whoami` != 'java' ]; thenecho "---------------------------------------------------"echo "You must use the Java user to run this script !!!"echo "---------------------------------------------------"exit 3fi }check_user#check args if [ $# -ne 1 ];thenusage;exit 1 fi if [ $1 == "-h" -o $1 == "--help" ];thenusage;exit 1 ficheck_host if [ $? != 0 ];thenecho "Please check the server ip address to be updated !"exit 64 ficode_pull mvn_build push_remote

  

?自此,以上可以實現在jenkins點擊一下,服務一會自己就上好了,雖然說還有很多地方需要改進,但是一般中小型公司采用這種方式則是足夠了,

只能持續的進行優化,當然,再厲害一點的公司可以自己開發運維平臺。

  

轉載于:https://www.cnblogs.com/topicjie/p/7107895.html

總結

以上是生活随笔為你收集整理的基于Jenkins+Gitlab的自动化部署实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。