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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【自动化运维】从0到1 CICD自动化部署落地分享

發布時間:2024/3/24 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【自动化运维】从0到1 CICD自动化部署落地分享 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

目錄

一、CICD簡介

二、CICD實踐過程

三、含淚踩坑

四、歷史文章指路

一、CICD簡介

1、CICD定義

  • Continuous Integration (CI) 持續集成

  • Continuous Delivery (CD) 持續交付

  • Continuous Deployment (CD) 持續部署

2、DevOps定義

DevOps(Development和Operations的組合詞)是一組過程、方法與系統的統稱,用于促進開發(應用程序/軟件工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。

DevOps的基礎核心是CICD。

CICD的基礎核心是自動化。

二、CICD實踐過程

1、起因

在我之前的團隊,因為要切換全新業務線,需要為新業務搭建一套全新的環境,所有東西從0開始。

原先只是用于部署測試環境,后面決定一起部署生產環境,這個過程中我還造成了一個嚴重生產環境問題,好在當時的生產環境還未正式使用,未造成嚴重影響。

在當時挺害怕也挺有壓力的,但是后面項目完整落地,平穩運行,我還是挺有成就感的,接下來我將整個項目過程完整的分享出來。

2、技術棧選型

首先進行技術棧選型,我們選擇的是Jenkins,Jenkins當屬業內持續集成老大哥,有著非常豐富的插件,也可以選擇gitlab集成的CICD,因為我們還有其它的測試腳本需要集成,所以Jenkins對于我們來說是最優的選擇;

Ansible是批量運維工具,通過編寫yaml腳本,可以方便實現批量管理多臺機器,并且Ansible是比較輕量級應用,很容易上手;

shell腳本可以用于執行一系列命令。

其它的就結合團隊項目情況進行搭建。

  • Jenkins–持續集成

  • Ansible–下發文件

  • Shell–Linux腳本

  • Git–版本管理

  • GitLab–代碼托管

  • Node.js–前端編譯

  • Maven–后端編譯

  • JDK–Java運行環境

  • Nginx–請求代理

  • Dubbo–RPC框架

  • Disconf–配置中心

  • Redis–緩存數據庫(購買阿里云服務)

  • Zookeeper–中間件(購買阿里云服務)

  • RDS(MySQL)–數據庫(購買阿里云服務)

3、Jenkins應用部署實現流程

首先來梳理下整個項目的實現流程,主要分為Jenkins主節點和應用服務器,是一對多的關系。

Jenkins主節點的主要負責項目部署前的工作,主要包含拉取代碼,前端打包,后端打包,快照版檢測,將壓縮包和部署腳本發送到目標機器(即應用服務器),遠程調用目標機器上的部署腳本進行代碼替換。

應用服務器部署腳本執行過程有:解壓壓縮包,停止服務,覆蓋代碼,拉取disconf,應用目錄分組賦權,重啟服務,檢查服務是否有進程,查看啟動日志,刪除/tmp目錄下舊壓縮包。

Jenkins應用部署流程圖

4、任務計劃

4.1、搭建環境

Jenkins

指路【Jenkins系列】如何搭建Jenkins環境。

Ansible

1、安裝Ansible yum install ansible -y2、查看版本信息 ansible -version

Git

1、安裝Git yum install git -y2、查看版本信息 git --version

GitLab

因為這個我沒有實踐成功的教程,所以在這里就不貼啦~

Node.js

1、解壓node安裝包,注:參數不用z tar xvf node-v6.16.0-linux-x64.tar -C /data2、安裝cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org3、在/usr/bin目錄下設置軟連接 ln -s /data/node-v6.16.0-linux-x64/bin/cnpm /usr/bin/cnpm4、查看版本信息 cnpm -v

Maven

1、下載Maven 方式一:官網下載:http://maven.apache.org/download.cgi 方式二:wget Maven下載地址 wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz(清華大學開源軟件鏡像服務) wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz(北京理工大學開源軟件鏡像服務)2、解壓tar包到/usr/local/ tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /usr/local/3、配置環境變量,編輯/etc/profile文件,在/etc/profile文件末尾增加以下配置:vim /etc/profile export MAVEN_HOME=/usr/local/apache-maven-3.3.9 export PATH=$MAVEN_HOME/bin:$PATH4、使用source命令立即生效,刷新環境變量 source /etc/profile5、查看版本信息 mvn -version

JDK

1、下載JDK:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html2、解壓tar包到/usr/local/目錄下 tar zxvf jdk1.8.0_201.tar.gz -C /usr/local/3、配置環境變量,編輯/etc/profile文件,在/etc/profile文件末尾增加以下配置:vim /etc/profile export JAVA_HOME=/usr/local/jdk1.8.0_201 export PATH=${JAVA_HOME}/bin:$PATH export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar4、使用source命令立即生效,刷新環境變量 source /etc/profile5、檢驗JDK是否安裝成功,注:-version,不是--version java -version 或者 javac6、踩坑 如果出現這-bash: /usr/local/java/jdk1.8.0_171/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file問題 運行這個命令解決:sudo yum install glibc.i686

Nginx

0、前提 安裝依賴包 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel1、下載nginx 方式一:官網下載:http://nginx.org/en/download.html 方式二:wget http://nginx.org/download/nginx-1.13.7.tar.gz2、解壓tar包到/usr/local/nginx/目錄下 tar -zxvf nginx-1.13.7.tar.gz -C /usr/local/ngnix/3、安裝nginx cd /usr/local/nginx/nginx-1.13.7 執行配置 ./configure 編譯安裝 make && make install4、配置nginx.conf,將端口號改成8089,因為可能apeache占用80端口,apeache端口盡量不要修改,選擇修改nginx端口 vim /usr/local/nginx/nginx-1.13.7/conf/nginx.con5、啟動nginx cd /usr/local/nginx/sbin/nginx/nginx-1.13.7 ./nginx 啟動 ./nginx -s stop 關閉 ./nginx -s reload 重啟6、查看nginx進程是否啟動 ps -ef | grep nginx7、驗證nginx是否配置成功 nginx -t8、查詢nginx的安裝路徑 whereis nginx

2、編寫前置腳本

#!/bin/bash#app_build.shapp_name=${1} #項目名稱,例:Learn-Java group_name=${2} #分組名稱,例:best env_name=${3} #環境名稱,例:test1 time=`date +%Y-%m-%d_%H:%M:%S` #時間#檢測前端編譯是否成功 shell_check(){if [ $? -eq 0 ];thenecho -e "\033[32m${time} ===前端編譯成功,繼續===\033[0m"elseecho -e "\033[31m${time} ===前端編譯失敗,請排查問題再發布===\033[0m"exit 1fi }if [[ ${env_name} = "請選擇" ]] ; thenecho -e "\033[31m${time} 請選擇正確環境!\033[0m"exit 1 elif [[ ${env_name} = "test1" || ${env_name} = "test2" ]] ; thenecho -e "\033[32m${time} ${group_name} ${app_name} ${env_name} 前端編譯 cnpm install\033[0m"cd /jenkins_workspace/${group_name}_${app_name}/${app_name}-view/cnpm installecho -e "\033[32m${time} ${group_name} ${app_name} ${env_name}\033[0m"npm run build:test1shell_checkecho -e "\033[32m${time} cp /jenkins_workspace/deploy.sh to /jenkins_workspace/${group_name}_${app_name}\033[0m"cp /jenkins_workspace/deploy.sh /jenkins_workspace/${group_name}_${app_name} elseecho -e "\033[31m${time} 請輸入正確參數!\033[0m" fi

3、編寫應用部署腳本

#!/bin/bash#deploy.shapp_name=${1} #項目名稱,例:Learn-Java env_name=${3} #環境名稱,例:test1 time=`date +%Y-%m-%d_%H:%M:%S` #時間#檢查上一條命令是否執行成功 shell_check(){if [ $? -eq 0 ];thenecho -e "\033[32m${time} 2|8、上一條命令執行成功, 繼續\033[0m"else echo -e "\033[31m${time} 2|8、上一條命令執行失敗, 退出\033[0m"exit 1fi }#部署應用服務 deploy_app(){echo -e "\033[32m${time} 1、解壓${app_name}.tar.gz\033[0m"cd /tmp/${app_name}/target/ && tar -xzvf ${app_name}.tar.gzshell_checkecho -e "\033[32m${time} 3、停止${app_name}服務\033[0m"var=`cd /app/${app_name}/bin/ && su ${app_name} stop.sh`if [[ $var = *alive* ]];thenecho -e "\033[31m${time} $var 無法正常停止應用進程,請前往服務器進行排查\033[0m"exit 1elseecho -e "\033[32m${time} $var ,繼續\033[0m"fiecho -e "\033[32m${time} 4、覆蓋代碼\033[0m"rsync -r /tmp/${app_name}/target/conf/ /app/${app_name}/configrsync -r --delete /tmp/${app_name}/target/lib/ /app/${app_name}/libecho -e "\033[32m${time} 5、拉取disconf\033[0m"cd /app/${app_name}/config && wget -O configs.tar.gz http://disconf.demo.com/api/config/downConfigs?app=${app_name}'&'env_name=${env_name}'&'version=1.0.0 && tar -xvf configs.tar.gz && rm -rf configs.tar.gzecho -e "\033[32m${time} 6、分組賦權\033[0m"cd /app && chown -R ${app_name}:coreapp ${app_name}echo -e "\033[32m${time} 7、重啟服務\033[0m"cd /app/${app_name}/bin/ && su ${app_name} start.shshell_checkpid=`ps aux | grep ${app_name} | grep -v grep | awk '{print $2}'`if [ "${pid}" ]; thenecho -e "\033[32m${time} 9、${app_name} core ${pid} 啟動成功\033[0m"elseecho -e "\033[31m${time} 9、${app_name} core ${pid} 啟動失敗\033[0m"exit 1fiecho -e "\033[32m${time} 10、查看日志\033[0m"cd /app/${app_name}/log/ && tail -n 200 stdout.logecho -e "\033[32m${time} 11、刪除/tmp目錄下舊壓縮包,避免再次部署代碼重復\033[0m"cd /tmp && rm -rf ${app_name} }deploy_app

4、Jenkins配置

指路【Jenkins系列】如何構建Jenkins Job。

新增Job,主要用于拉取代碼,執行Maven編譯,執行app_build.sh,將壓縮包通過ssh發送到目標機器,遠程調用目標機器的deploy.sh。

三、含淚踩坑

踩坑1

問題描述:在錯誤的路徑拉取配置,原因是未成功解壓壓縮包。

解決方案:校驗壓縮包是否解壓成功解壓成功,并且在cd到正確的路徑后添加&&(&&表示上一條命令執行成功再執行下一條命令)才進行拉取配置。

踩坑2

問題描述:項目沒有正常停止,導致無法重新啟動。

解決方案:雖然執行kill -9,但是未找到根本原因,因此加了一個檢測機制,如果檢測沒有正常停止服務,則退出程序。

踩坑3

問題描述:生產部署腳本拉取了開發環境的的jdbc配置,原因是生產部署腳本寫錯了開發環境disconf的域名,當時我同時在搞開發生產環境的腳本,開發和生產是兩套不同的腳本,一時混亂寫錯了,嚇得一批,好在當時生產環境還沒投產使用。

解決方案:為了避免后續這種情況的發生,而且是必須避免的,我們通過環境名稱來判斷走開發還是生產域名,這樣就能保證腳本一致性了。

在這個項目實際遇到的問題遠不止上面這幾個,在這個實踐過程中,我對整個應用部署流程有了更深的理解,平時方方面面的學習終于集中化起來進行實踐了。

我習慣將學到的知識和遇到的問題記錄起來,在寫這篇文章的過程回過頭來看,五味雜陳,原來我都經歷了這些哈哈哈…

踩過的坑終究使我更加強大**,帶你見證呱呱本呱成長為參天大呱~**

四、歷史文章指路

關注【嘎嘎軟件測試】

搞測試,不迷路

呱呱大王本呱帶你飛!

嘎嘎軟件測試

將分享個人成長、團隊管理、軟件測試技能知識等內容,更新頻率一周兩篇,做到有思想、有觀點、有深度,歡迎訂閱。

總結

以上是生活随笔為你收集整理的【自动化运维】从0到1 CICD自动化部署落地分享的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产视频在线看 | 特色特色大片在线 | 欧美精品一区三区 | 日韩视频三区 | 中文字幕人妻一区二 | 国产黄色激情视频 | 影音先锋色小姐 | 国产一区二区三区小说 | 在线一区二区观看 | 国产97色 | 欧美极品在线视频 | 黄色大片免费观看视频 | av网站在线看 | 亚洲精品日韩av | 亚洲天堂第一页 | 国产激情91| 亚洲av第一成肉网 | 一级黄色aa | 18岁免费观看电视连续剧 | 成人午夜网址 | 久青草视频在线 | 黄瓜视频在线免费观看 | 欧美成人精品一区二区三区在线观看 | 亚洲精品自拍视频 | 日本美女一级视频 | 午夜精品在线免费观看 | 黄色一级免费观看 | 国产精品偷伦视频免费看 | 丁香激情综合 | 亚洲精品视频三区 | 激情青青草 | 深夜福利免费在线观看 | 中文字幕日韩欧美 | 久久综合日本 | 青青综合网| 99er精品视频| 欧美韩一区| 国产精品大屁股白浆一区 | 国产精品911 | 日韩欧美综合久久 | 理论片在线观看视频 | 日本啪啪网 | 免费h漫禁漫天天堂 | 97在线播放免费观看 | 亚洲妇女av | 日韩欧美一区二区三区 | 国产偷人妻精品一区二区在线 | 一级黄色录相 | 欧美日韩亚洲国产综合 | 亚洲国内精品 | 2019中文字幕在线观看 | 欧美日韩国产不卡 | 国产成人综合在线观看 | 欧美色图激情 | 封神榜二在线高清免费观看 | 久久av一区二区三区漫画 | 久久一级免费视频 | 欧美一区二区三区婷婷月色 | 亚洲国产精品视频在线观看 | 亚洲欧美一区二区精品久久久 | 丁香花在线影院观看在线播放 | 久久99日韩| 成年在线视频 | 爱情岛亚洲论坛入口 | 国产亚洲欧美日韩精品一区二区三区 | 老女人性生活视频 | 玖玖玖在线观看 | 偷偷草| 国产伦精品免费视频 | 色吊丝av中文字幕 | 国产精品果冻传媒潘 | 一级视频毛片 | 亚洲免费三区 | 色黄网站在线观看 | 久久久男人的天堂 | 五月天中文字幕在线 | 亚洲在线综合 | 欧美成人一区二区三区高清 | 杨幂国产精品一区二区 | 国产精品无码在线播放 | 亚洲乱码在线观看 | 欧美情侣性视频 | 最新视频 - x88av | 亚洲熟妇无码乱子av电影 | 中文字幕在线视频一区二区 | 91丝袜| 秋霞欧美一区二区三区视频免费 | 亚洲天堂伊人网 | 国产乱码精品一区二区三区忘忧草 | 亚洲国产成人在线 | 中文在线а√天堂官网 | 日日摸日日 | 欧美偷拍一区二区 | 狠狠热免费视频 | 亚洲美女偷拍 | 亚洲色图二区 | 黄色片网站免费观看 | 91免费看片网站 | 精品一区二区三区四区视频 |