/data/container/nginx/html目錄,因為要發布的靜" />

日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

【微服務部署】Jenkins+Docker一鍵打包部署Vue項目步驟詳解

來源: 責編: 時間:2023-09-18 21:41:36 323觀看
導讀一、服務器環境配置?前面說明了服務器Nginx的安裝和配置,這里稍微有些不同,但是因為此文是用Nginx鏡像和前端鏡像頁面同時部署的方式來打包發布的,所以這里不再需要建立
/data/container/nginx/html目錄,因為要發布的靜

v2X28資訊網——每日最新資訊28at.com

一、服務器環境配置

?前面說明了服務器Nginx的安裝和配置,這里稍微有些不同,但是因為此文是用Nginx鏡像和前端鏡像頁面同時部署的方式來打包發布的,所以這里不再需要建立
/data/container/nginx/html目錄,因為要發布的靜態頁面已經在Nginx鏡像中的/nginx/html目錄了。這里也減少了手動部署安裝Nginx的步驟,而是在Jenkins任務中調用shell命令自動執行安裝。
v2X28資訊網——每日最新資訊28at.com

1、新建Dockerfile文件,用于定義Nginx鏡像,及將打包成功的靜態文件復制到鏡像中,此文件放在前端項目的根目錄下,Jenkins打包時會從此處查找Dockerfile文件。

FROM nginx:latest# 維護者信息MAINTAINER gitegg# 將生成的靜態頁面文件復制到nginx的/usr/share/nginx/html/目錄COPY dist/ /usr/share/nginx/html/# 容器啟動時運行的命令CMD ["nginx", "-g", "daemon off;"]

2、部署及備份目錄準備

  • 新建 /opt/tmp 目錄,用于Jenkins打包后,通過 Publish Over SSH插件將包傳輸到服務器的臨時目錄(如果前面創建過,這里無需再創建)。
  • 新建 /opt/bak 目錄,用于存儲所有部署過的包備份,方便后續版本回滾。此目錄可能會占用很大空間,所以需要選擇一個磁盤空間大的掛載目錄(如果前面創建過,這里無需再創建)。
  • 新建 /opt/script 目錄,用于Jenkins將包傳輸完成之后,執行安裝、備份操作的相關命令腳本(如果前面創建過,這里無需再創建)。
  • 新建 /data/container/nginx/www,映射Nginx容器內的/var/www目錄。
  • 新建 /data/container/nginx/logs,映射Nginx容器內的/var/log/nginx目錄,存放nginx運行日志。
  • 新建 /data/container/nginx/etc,映射Nginx容器內的/etc/nginx目錄
  • 新建 /data/container/nginx/etc/nginx.conf,映射Nginx容器內的/etc/nginx/nginx.conf配置文件
mkdir -p /opt/tmp /opt/bak /opt/script /data/container/nginx/www /data/container/nginx/logs  /data/container/nginx/etcchmod -R 777 /opt/tmp /opt/bak /opt/script /data/container/nginx/www /data/container/nginx/logs  /data/container/nginx/etc

3、根據系統部署要求編寫Nginx配置文件nginx.conf,以下是簡單的配置方法,正常情況下https請求還需要配置ssl證書,還有ipv6配置等,后面詳細講解Nginx配置。一定要將修改后的nginx.conf文件放到/data/container/nginx/etc/目錄下,否則nginx啟動時會報錯找不到配置文件。

server {        listen 80;        server_name  域名;        gzip on;        gzip_buffers 32 4K;        gzip_comp_level 6;        gzip_min_length 100;        gzip_types application/javascript text/css text/xml text/plain application/x-javascript image/jpeg image/gif image/png;        gzip_disable "MSIE [1-6]/.";         gzip_vary on;        #charset koi8-r;        access_log  /var/log/nginx/portal.access.log  main;        location / {                root /nginx/html/gitegg_portal;                try_files $uri $uri/ /index.html;                index  index.html index.htm;        }        location /gitegg-api/ {            proxy_set_header Host $http_host;                           proxy_set_header X-Real-Ip $remote_addr;            proxy_set_header REMOTE-HOST $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_pass http://172.17.0.1:8080/;        }    }

4、部署腳本編寫說明

  • 定義入參,可以通過Jenkins任務將參數傳入腳本中,我們定義了下面7個參數:
    container_name=portal-server : 容器名稱image_name=portal-server : 鏡像名稱version=latest : 鏡像版本portal_port=80: 宿主主機端口映射server_port=80: 容器內服務端口portal_ssl_port=443: 宿主主機端口映射serve_sslr_port=443: 容器內服務端口
  • 對參數進行檢查,是否未傳入參數,這里根據自己的實際情況判斷,比如必須傳入哪些參數,就設置參數的個數不能小于幾。
echo "param validate"if [ $# -lt 1 ]; then  echo "you must use like this : ./publish_docker_portal.sh <container_name> <image_name> <version> [portal port] [server port] [portal ssl port] [server ssl port]"    exit  fi
  • 入參賦值,如果有參數傳入,則取服務參數,如果沒有參數傳入則取默認值
if [ "$1" != "" ]; then   container_name="$1"fiecho "container_name=" $container_nameif [ "$2" != "" ]; then   image_name="$2"fiif [ "$3" != "" ]; then   version="$3"fiecho "version=" $versionif [ "$4" != "" ]; then   portal_port="$4"fiecho "portal_port=" $portal_portif [ "$5" != "" ]; then   server_port="$5"fiecho "server_port=" $server_portif [ "$6" != "" ]; then   portal_ssl_port="$6"fiecho "portal_ssl_port=" $portal_ssl_portif [ "$7" != "" ]; then   serve_sslr_port="$7"fiecho "serve_sslr_port=" $serve_sslr_port
  • 停止并刪除容器
echo "執行docker ps"docker ps if [[ "$(docker inspect $container_name 2> /dev/null | grep $container_name)" != "" ]]; then   echo $container_name "容器存在,停止并刪除"  echo "docker stop" $container_name  docker stop $container_name  echo "docker rm" $container_name  docker rm $container_nameelse   echo $container_name "容器不存在"fi
  • 停止并刪除鏡像
# 刪除鏡像echo "執行docker images"docker imagesif [[ "$(docker images -q $image_name 2> /dev/null)" != "" ]]; then   echo $image_name '鏡像存在,刪除鏡像'  docker rmi $(docker images -q $image_name 2> /dev/null) --forceelse   echo $image_name '鏡像不存在'fi
  • 備份本次安裝鏡像包
#bak imageecho "bak image" $image_nameBAK_DIR=/opt/bak/docker/$image_name/`date +%Y%m%d`mkdir -p "$BAK_DIR"cp "/opt/tmp/portal-image.tar" "$BAK_DIR"/"$image_name"_`date +%H%M%S`.tar
  • 執行安裝鏡像包命令
echo "docker load" $image_namedocker load --input /opt/tmp/portal-image.tar
  • 執行運行命令
echo "docker run" $image_namedocker run -d -p $portal_port:$server_port -p $portal_ssl_port:$server_ssl_port --name=$container_name -e TZ="Asia/Shanghai" --restart=always -v /data/container/nginx/www:/var/www -v /data/container/nginx/logs:/var/log/nginx -v /data/container/nginx/etc:/etc/nginx -v /data/container/nginx/etc/nginx.conf:/etc/nginx/nginx.conf -v /etc/localtime:/etc/localtime -v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone -v /bxl/container/nginx/ssl:/nginx/ssl $image_name
  • 刪除安裝文件,因為前面已經備份過了,所以這里將臨時安裝文件刪除
echo "remove tmp " $image_namerm -rf /opt/tmp/portal-image.tar
  • 打印執行完成的命令
echo "Docker Portal is starting,please try to access $container_name conslone url"
  • 完整的安裝部署腳本
container_name=portal-serverimage_name=portal-serverversion=latestportal_port=80server_port=80portal_ssl_port=443serve_sslr_port=443echo "param validate"if [ $# -lt 1 ]; then    echo "you must use like this : ./publish_docker_portal.sh <container_name> <image_name> <version> [portal port] [server port] [portal ssl port] [server ssl port]"    exit  fiif [ "$1" != "" ]; then   container_name="$1"fiecho "container_name=" $container_nameif [ "$2" != "" ]; then   image_name="$2"fiif [ "$3" != "" ]; then   version="$3"fiecho "version=" $versionif [ "$4" != "" ]; then   portal_port="$4"fiecho "portal_port=" $portal_portif [ "$5" != "" ]; then   server_port="$5"fiecho "server_port=" $server_portif [ "$6" != "" ]; then   portal_ssl_port="$6"fiecho "portal_ssl_port=" $portal_ssl_portif [ "$7" != "" ]; then   serve_sslr_port="$7"fiecho "serve_sslr_port=" $serve_sslr_portecho "執行docker ps"docker ps if [[ "$(docker inspect $container_name 2> /dev/null | grep $container_name)" != "" ]]; then   echo $container_name "容器存在,停止并刪除"  echo "docker stop" $container_name  docker stop $container_name  echo "docker rm" $container_name  docker rm $container_nameelse   echo $container_name "容器不存在"fi# 刪除鏡像echo "執行docker images"docker imagesif [[ "$(docker images -q $image_name 2> /dev/null)" != "" ]]; then   echo $image_name '鏡像存在,刪除鏡像'  docker rmi $(docker images -q $image_name 2> /dev/null) --forceelse   echo $image_name '鏡像不存在'fi#bak imageecho "bak image" $image_nameBAK_DIR=/opt/bak/docker/$image_name/`date +%Y%m%d`mkdir -p "$BAK_DIR"cp "/opt/tmp/portal-image.tar" "$BAK_DIR"/"$image_name"_`date +%H%M%S`.tarecho "docker load" $image_namedocker load --input /opt/tmp/portal-image.tarecho "docker run" $image_namedocker run -d -p $portal_port:$server_port -p $portal_ssl_port:$server_ssl_port --name=$container_name -e TZ="Asia/Shanghai" --restart=always -v /data/container/nginx/www:/var/www -v /data/container/nginx/logs:/var/log/nginx -v /data/container/nginx/etc:/etc/nginx -v /data/container/nginx/etc/nginx.conf:/etc/nginx/nginx.conf -v /etc/localtime:/etc/localtime -v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone -v /bxl/container/nginx/ssl:/nginx/ssl $image_nameecho "remove tmp " $image_namerm -rf /opt/tmp/portal-image.tarecho "Docker Portal is starting,please try to access $container_name conslone url"

二、新建Jenkins配置打包任務,打包部署NodeJS(Vue)鏡像

1、新建任務前,安裝Docker Pipeline插件,使用Pipeline流水線任務構建部署,安裝Jenkins插件相關內容,請查看前面部署Jenkins相關文章。

v2X28資訊網——每日最新資訊28at.com

  • 流水線任務可以在右側顯示階段視圖

v2X28資訊網——每日最新資訊28at.com


v2X28資訊網——每日最新資訊28at.com

v2X28資訊網——每日最新資訊28at.com

6、構建成功后,下方會給出構建成功提示。

v2X28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-10462-0.html【微服務部署】Jenkins+Docker一鍵打包部署Vue項目步驟詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 我們一起聊聊.NET 8 RC1

下一篇: 離譜!頂流游戲引擎新增斂財名目,Unity開發者徹底怒了!

標簽:
  • 熱門焦點
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對Reader和Writer接口的組合,
  • 多線程開發帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數據期間,該數據被其他的線程所修改,那么對于當前線程而言,該線程
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 消費結構調整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經主攻中高端與品質的淘寶天貓、京東重拾&ldquo;低價&rdquo;口號。而過去與他們錯位競爭的拼多多,靠
  • 小米MIX Fold 3配置細節曝光:搭載領先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 華為發布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發者大會2023(HDC.Together)大會上,HarmonyOS 4正式發布。自2019年發布以來,HarmonyOS一直以用戶為中心,經歷四年多的發展HarmonyOS已
Top 主站蜘蛛池模板: 蓝田县| 体育| 灵宝市| 江津市| 苏尼特左旗| 自治县| 安丘市| 海南省| 疏勒县| 岳普湖县| 乌拉特前旗| 广饶县| 沈阳市| 双城市| 平度市| 岑巩县| 林芝县| 荔浦县| 邮箱| 峨眉山市| 菏泽市| 德阳市| 彰化市| 永嘉县| 泰兴市| 衡阳县| 深圳市| 济阳县| 鄱阳县| 翼城县| 新巴尔虎右旗| 息烽县| 琼中| 思南县| 邢台市| 修文县| 蒙阴县| 合川市| 微博| 扎鲁特旗| 盐源县|