当前位置:首页 > 科技  > 软件

【微服务部署】Jenkins+Docker一键打包部署Vue项目步骤详解

来源: 责编: 时间:2023-09-18 21:41:36 444观看
导读一、服务器环境配置 前面说明了服务器Nginx的安装和配置,这里稍微有些不同,但是因为此文是用Nginx镜像和前端镜像页面同时部署的方式来打包发布的,所以这里不再需要建立
/data/container/nginx/html目录,因为要发布的静

Uh828资讯网——每日最新资讯28at.com

一、服务器环境配置

 前面说明了服务器Nginx的安装和配置,这里稍微有些不同,但是因为此文是用Nginx镜像和前端镜像页面同时部署的方式来打包发布的,所以这里不再需要建立
/data/container/nginx/html目录,因为要发布的静态页面已经在Nginx镜像中的/nginx/html目录了。这里也减少了手动部署安装Nginx的步骤,而是在Jenkins任务中调用shell命令自动执行安装。
Uh828资讯网——每日最新资讯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相关文章。

Uh828资讯网——每日最新资讯28at.com

  • 流水线任务可以在右侧显示阶段视图

Uh828资讯网——每日最新资讯28at.com


Uh828资讯网——每日最新资讯28at.com

Uh828资讯网——每日最新资讯28at.com

6、构建成功后,下方会给出构建成功提示。

Uh828资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10462-0.html【微服务部署】Jenkins+Docker一键打包部署Vue项目步骤详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

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

下一篇: 离谱!顶流游戏引擎新增敛财名目,Unity开发者彻底怒了!

标签:
  • 热门焦点
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top