Jenkins, docker-compose动态修改镜像版本升级部署

news2024/7/5 22:45:22

docker-compose镜像版本动态控制

提取.env文件进行配置通用环境变量

# 当前机器用户的home路径
HOST_HOME=/home/guimu
# 上传文件临时路径
TMP_DATA_PATH=${HOST_HOME}/tempdata/
# media的home路径
MEDIA_HOME=/media
# 挂载的mysql的data路径
MYSQL_DATA_PATH=${HOST_HOME}/mysql/data
# mysql配置文件
MYSQL_CONF=${HOST_HOME}/mysql/my.cnf
#redis数据
REDIS_DATA_PATH=${HOST_HOME}/redis/data
#redis配置文件
REDIS_CONFIG=${HOST_HOME}/redis/redis.conf
# geoserver路径
GEO_SERVER_HOME=${HOST_HOME}/geoserver
# mysql数据库的用户名
DB_USER=root
# mysql数据库的密码
DB_PASSWORD=password
# mysql数据库的host, 一般不用修改,除非docker-compose中的mysql容器名修改才进行修改
DB_HOST=das-mysql
# 当前机器的ip(一般用外网能访问的ip)
HOST_IP=localhost
# 用于测试打包新版本服务镜像, 需要打包新镜像版本时使用
VERSION=latest
# 图像雷达服务日志路径
IMG_RADAR_LOG_PATH=${HOST_HOME}/img_radar_log

docker-compose编排

创建docker-compose-dev.yml:

version: '3'
networks:
  guimu-micro-service-platform_default:
services:
  xxl-job-admin:
    image: kven/xxl-job-admin:2.3.0
    restart: always
    container_name: xxl-job-admin
    environment:
      PARAMS:
        '
              --server.port=9090
              --server.servlet.context-path=/xxl-job-admin
              --spring.datasource.url=jdbc:mysql://${DB_HOST}:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
              --spring.datasource.username=${DB_USER}
              --spring.datasource.password=${DB_PASSWORD}'
    ports:
      - 9090:9090
    networks:
      - guimu-micro-service-platform_default
  geoserver:
    restart: always
    image: kven/geoserver:3.0
    container_name: geoserver
    volumes:
      - ${GEO_SERVER_HOME}/data_dir:/usr/local/geoserver/data_dir
      - /usr/share/fonts/:/usr/share/fonts/ # 此处将宿主机字体映射到容器中,解决发布图层中文乱码问题
    ports:
      - "9180:9180"
    networks:
      - guimu-micro-service-platform_default
  #注册中心
  #自定义的服务名称
  service-registry:
    build:
      context: das-service-registry
      dockerfile: Dockerfile
    #    #镜像名称
    image: kven/service-registry:${VERSION}
    #    #容器名称
    container_name: service-registry
    environment:
      JAVA_OPTS: -Xms256m -Xmx256m
    #容器down掉后,会自动重启
    restart: always
    #映射端口。格式为宿主机端口:容器端口
    ports:
      - "9185:9185"
    networks:
      - guimu-micro-service-platform_default

  #  das-ai-service:
  #    build:
  #      context: das-ai-service
  #      dockerfile: Dockerfile
  #    image: das-ai-service
  #    container_name: das-ai-service
  #    restart: always
  #    ports:
  #      - "9111:9111"
  #    depends_on:
  #      - service-registry
  #    networks:
  #      - guimu-micro-service-platform_default

  #网关服务
  api-gateway-zuul:
    build:
      context: das-service-gateway
      dockerfile: Dockerfile
    image: kven/api-gateway-zuul:${VERSION}
    container_name: api-gateway-zuul
    environment:
      JAVA_OPTS: -Xms256m -Xmx256m
    restart: always
    ports:
      - "9100:9100"
    depends_on:
      - service-registry
    networks:
      - guimu-micro-service-platform_default
  das-data-processed-service:
    build:
      context: das-data-mgr-processed
      dockerfile: Dockerfile
    image:  kven/das-data-processed-service:${VERSION}
    container_name: das-data-processed-service
    environment:
      DB_HOST: ${DB_HOST}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      IMG_HOST: imgcentos
    #      DB_PORT: 3306 # 不配置,默认为3306端口
    # 挂载的路径需要根据后面迁移的机器进行挂载
    volumes:
      - ${MEDIA_HOME}:/media/
      - ${TMP_DATA_PATH}:/home/das/tempdata/
    restart: always
    ports:
      - "9109:9109"
    depends_on:
      - service-registry
      - xxl-job-admin
    networks:
      - guimu-micro-service-platform_default
  das-data-gis-service:
    build:
      context: das-data-mgr-gis
      dockerfile: Dockerfile
    image: kven/das-data-gis-service:${VERSION}
    container_name: das-data-gis-service
    environment:
      DB_HOST: ${DB_HOST}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      JAVA_OPTS: -Xms256m -Xmx256m
    # 挂载的路径需要根据后面迁移的机器进行挂载
    volumes:
      - ${MEDIA_HOME}:/media/
      - ${TMP_DATA_PATH}:/home/das/tempdata/
    restart: always
    ports:
      - "9108:9108"
    depends_on:
      - service-registry
      - xxl-job-admin
    networks:
      - guimu-micro-service-platform_default
  das-data-raw-service:
    build:
      context: das-data-mgr-raw
      dockerfile: Dockerfile
    image: kven/das-data-raw-service:${VERSION}
    container_name: das-data-raw-service
    environment:
      DB_HOST: ${DB_HOST}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      JAVA_OPTS: -Xms256m -Xmx256m
    # 挂载的路径需要根据后面迁移的机器进行挂载
    volumes:
      - ${MEDIA_HOME}:/media/
    restart: always
    ports:
      - "9107:9107"
    depends_on:
      - service-registry
      - xxl-job-admin
    networks:
      - guimu-micro-service-platform_default
  das-security-service:
    build:
      context: das-service-security
      dockerfile: Dockerfile
    image: kven/das-security-service:${VERSION}
    container_name: das-security-service
    environment:
      DB_HOST: ${DB_HOST}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      JAVA_OPTS: -Xms256m -Xmx256m
    restart: always
    ports:
      - "9110:9110"
    depends_on:
      - service-registry
    networks:
      - guimu-micro-service-platform_default
  das-ui-service:
    build:
      context: das-web-ui
      dockerfile: Dockerfile
    image: kven/das-ui-service:${VERSION}
    container_name: das-ui-service
    environment:
      GATE_HOST: ${HOST_IP}
      DB_HOST: ${DB_HOST}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      JAVA_OPTS: -Xms256m -Xmx256m
    # 挂载的路径需要根据后面迁移的机器进行挂载
    volumes:
      - ${MEDIA_HOME}:/media/
    restart: always
    ports:
      - "9103:9103"
    depends_on:
      - service-registry
    networks:
      - guimu-micro-service-platform_default
  das-workflow-service:
    build:
      context: das-workflow-core
      dockerfile: Dockerfile
    image: kven/das-workflow-service:${VERSION}
    container_name: das-workflow-service
    environment:
      DB_HOST: ${DB_HOST}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      JAVA_OPTS: -Xms256m -Xmx256m
    restart: always
    ports:
      - "9101:9101"
    depends_on:
      - service-registry
    networks:
      - guimu-micro-service-platform_default
  mysql:
    restart: always
    container_name: das-mysql
    image: kven/mysql:1.0
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
    volumes:
      - ${MYSQL_DATA_PATH}:/var/lib/mysql
    networks:
      - guimu-micro-service-platform_default
  redis:
    restart: always
    container_name: das-redis
    image: redis:6.2.7
    ports:
      - "6380:6379"
    volumes:
      - ${REDIS_DATA_PATH}:/data
      - ${REDIS_CONFIG}:/etc/redis/redis.conf
    networks:
      - guimu-micro-service-platform_default
  imgserver:
    image: kven/imgcentos:4.0
    container_name: imgcentos
    restart: always
    ports:
      - "9140:9140"
    volumes:
      - ${MEDIA_HOME}:/media
      - ${IMG_RADAR_LOG_PATH}:/root/log
    networks:
      - guimu-micro-service-platform_default
  radarserver:
    image: kven/radarcentos:2.0
    container_name: radarcentos
    restart: always
    ports:
      - "9130:9130"
    volumes:
      - ${MEDIA_HOME}:/media
      - ${IMG_RADAR_LOG_PATH}:/root/log
    networks:
      - guimu-micro-service-platform_default

# 修改.env文件中的version配置打包对应的版本镜像, 指定文件docker-compose-dev.yml构建dev的镜像

docker-compose -f docker-compose-dev.yml up --build -d

推送构建的镜像到远程仓库

# 首先需要登录对应的远程仓库, 输入指定的账号密码

docker login

编写对应的推送脚本pushImage.sh:

#!/bin/bash
version=$1

commands="docker push kven/das-workflow-service:${version};
docker push kven/das-ui-service:${version};
docker push kven/das-security-service:${version};
docker push kven/das-data-raw-service:${version};
docker push kven/das-data-gis-service:${version};
docker push kven/das-data-processed-service:${version};
docker push kven/api-gateway-zuul:${version};
docker push kven/service-registry:${version};"

bash -c "$commands"

# 设定可执行权限

chmod +x pushImage.sh

# 推送指定的版本:

# ./pushImage.sh 版本号

./pushImage.sh latest

配置Jenkins

新建工程

 配置工程名称, 选择freestyle project,点击确定

 支持参数化构建

 通过shell构建

 在对应的构建服务器上编写restart.sh脚本:

#!/bin/bash
# 切换到对应的工程目录
cd /home/guimu/das-docker/guimu-micro-service-platform-internal
# 更新代码
svn up
# 打包
mvn package -DskipTest
# 关闭原有的容器
docker-compose -f docker-compose-dev.yml down
# 构建新的容器并启动
docker-compose -f docker-compose-dev.yml up --build -d

# 添加可执行权限

chmod +x restart.sh

在前一步中的Jenkins添加的shell中编写脚本:

#!/bin/sh
# 切换到工程的工作空间
cd /home/guimu/das-docker
# 根据Jenkins的构建参数version动态替换.env文件中对应的版本号
sed -i "s/VERSION=\(.*\)/VERSION=${version}/g" /home/guimu/das-docker/guimu-micro-service-platform-internal/.env
# 重启并构建新版本的容器镜像
./restart.sh
# 推送对应的版本镜像
./pushImage.sh $version

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go 函数或者方法参数调用的过程

前言 最近做项目,使用go开发,但是在发生函数调用传参数时,对指针的指针的传递有难以理解的代码,就此分析过程。尤其是对于多重指针作为参数,而且对于一些内置函数的修改逻辑也需深入的理解。 1. demo package slice…

client-go源码学习(四):自定义Controller的工作原理、WorkQueue

本文基于Kubernetes v1.22.4版本进行源码学习,对应的client-go版本为v0.22.4 4、自定义Controller的工作原理 Controller中主要使用到Informer和WorkQueue两个核心组件 Controller可以有一个或多个Informer来跟踪某一个resource。Informer跟Kubernetes API Server保…

安装 Visual Studio Code、MinGW-w64、CMake

文章目录1.安装 Visual Studio Code1.1 下载1.2 安装2.安装 MinGW-w642.1 下载2.2 解压到合适的目录下2.3 添加到环境变量2.4 测试是否安装成功3.安装 CMake3.1 下载3.2 解压到合适的目录下3.3 添加到环境变量3.4 测试是否安装成功1.安装 Visual Studio Code 1.1 下载 Visual…

Options API

computed计算属性 1、复杂data的处理方式 我们知道,在模板中可以直接通过插值语法显示一些data中的数据。 但是在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示; 比如我们需要对多个d…

自动驾驶控制算法之车辆纵向控制(project)

本文为深蓝学院-自动驾驶控制与规划-第二章作业 目录 1 project introduction 2 思路提示 3 解决积分饱和的方法 3.1 IC 积分遇限削弱法 3.2 BC 反馈抑制抗饱和 4 ROSLGSVL联合仿真 1 project introduction 本项目希望大家根据PID控制方法实现一个巡航控制系统。我们已…

深度学习之边缘检测算法论文解读(EDTER: Edge Detection with Transformer)

引言 边缘检测是计算机视觉中最基本的问题之一,具有广泛的应用,例如图像分割[8,23,39,44,45,47]、对象检测[23]和视频对象分割[5,57,59]。给定输入图像,边缘…

webpack-dev-server:静态资源目录配置

目录 webpack-dev-server Webpack项目-配置自动打包 访问错误信息分析 简单配置静态资源访问目录 完整配置静态资源访问目录 directory属性 staticOptions属性 publicPath属性 serveIndex属性 watch属性 完整配置webpack.config.js示例 默认显示index.html内容配置 默…

fsdb DUMP的操作记录

参考链接: https://blog.csdn.net/ohuo666/article/details/124973939https://blog.csdn.net/ohuo666/article/details/124973939 https://blog.csdn.net/yuexiangallan/article/details/121760768https://blog.csdn.net/yuexiangallan/article/details/121760768…

基于 DolphinDB 的行情中心解决方案

随着国内量化金融的高速发展,行情数据所包含的微观交易结构信息越来越受到券商自营团队、资管团队以及各类基金的重视。这些交易团队迫切希望拥有一个与生产环境类似的投研仿真环境,提升研发的效率和质量。作为国内领先的高性能时序数据库厂商&#xff0…

【地铁上的Redis与C#】数据类型(七)--List类型

我们这篇文章开始讲解list类型。 什么是list list是一个存储空间保存多个数据,底层使用双向链表存储结构实现的一种Redis数据类型,。list类型一般用在存储多个数据,并需要对数据进入存储空间的顺序进行区分的情况下。list的存储方式是一个存…

气泡法检漏技术特点分析和新型压力衰减法测试技术

摘要:针对传统的气泡法检漏技术,本文详细介绍了气泡法的基本原理、气泡法中的两种标准方法——加压法和真空法以及对应的标准规范,并对这两种气泡法进行了对比分析。本文还对气泡法的技术特点进行了分析,指出了气泡法检漏技术的局…

使用ruoyi-vue控制数据权限

说在前面 啥是数据权限?例如校长可以看到全部学生的信息,系主任可以看到该院系的学生信息,老师可以看到本班的学生信息,学生自己只能查看自己的信息 对于ruoyi的角色,我们只能控制用户可以访问那些菜单以及接口,而不能控制接口返回的数据 假如有这样一个需求,不同用户上传各…

赛狐ERP | 亚马逊卖家FBA常见问题解析!

许多亚马逊卖家在使用亚马逊FBA时经常会遇到一些问题,如FBA如何收费、如何提升发货数量、物流方式问题等问题,这些问题是常见问题,也是亚马逊卖方们应该把握的问题。下面就来跟大家分享一些常见的亚马逊FBA相关问题。一、亚马逊FBA如何收费&a…

OSCP_vulnhub—GOLDENEYE: 1

vulnhub—GOLDENEYE: 1About信息搜集查看js泄露POP3 密码破解及登录使用admin/xWinter1995x!登录 getshell提权About GoldenEye: 1 ~ VulnHub Download (Mirror): https://download.vulnhub.com/goldeneye/GoldenEye-v1.ova DHCP service: Enabled IP address: Automaticall…

【Kubernetes 入门实战课】Day01——虚拟机创建及安装

文章目录前言一、实验环境选择二、选择合适的虚拟机软件1.VirtualBox2.VMWare三、Linux版本四、如何配置虚拟机1、安装VMware2、虚拟网络设置1、虚拟机网络编辑器2、设置 VMnet 8 网段3、创建虚拟机1、创建虚拟机2、启动虚拟机3、虚拟机配置4、虚拟机管理前言 俗话说&#xff…

[oeasy]python0052_ raw格式字符串_单引号_双引号_反引号_ 退格键

转义字符 回忆上次内容 最近玩的是\n、\r 之外的转义序列 \a是 ␇ (bell)\t是 水平制表符\v是 换行不回车 通过 16 进制数值转义 \xhh把(hh)16 进制对应的 ascii 字符输出 通过 8 进制数值转义 \ooo把(nnn)8 进制对应的 ascii 字符输出 这次加了 转义输出 反斜杠本身 \\ 输出…

24.Isaac教程--路径规划的区域划分

路径规划的区域划分 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 为了赋予地图区域关于通过它们规划的路径的语义意义,引入了三个新的规划器影响区域: No-replanning zones:当机器人通过这个多边形区域时&a…

python textwrap 模块,这里有你需要的学习资料

Python 标准库中的 textwrap 模块可以把长文本按照指定的宽度进行换行。这个模块提供了一些高级的文本处理功能,例如按照指定的宽度进行自动换行,保留段首缩进等。 python textwrap 模块python textwrap 模块主要函数textwrap.wrap(text, width70, \*\*k…

ruoyi-vue版本(四)@PreAuthorize 注解在若依里面的作用,springsecurity 框架相关的配置

目录1 需求2 实现2.1 背景2.2 实现2.3 springsecurity 框架相关的配置2.3.1 EnableGlobalMethodSecurity详解2.3.2 认证失败处理类AuthenticationEntryPointImpl2.3.3 自定义退出处理类LogoutSuccessHandlerImpl2.3.4 filter 为啥会多次执行3 PreAuthorize 注解1 需求 我们打开…

Flink面试题汇总

1,简单介绍一下 Flink Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。并且 Flink 提供了数据分布、容错机制以及资源管理等核心功能。Flink提供了诸多高抽象层的API以便用户编写分布式任务: DataSet API&#xf…