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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Docker Compose 部署 Jenkins 可以简化 Jenkins 的安装和配置过程,提高部署效率和可维护性。 以下是部署 JenkinsDocker Compose 文件示例: ``` version: '3' services: jenkins: image: jenkins/jenkins:lts ports: - "808:808" - "50000:50000" volumes: - jenkins_home:/var/jenkins_home environment: - JAVA_OPTS=-Djenkins.install.runSetupWizard=false networks: - jenkins_network volumes: jenkins_home: networks: jenkins_network: ``` 在该示例中,我们定义了一个名为 `jenkins` 的服务,使用了 Jenkins 官方提供的 `jenkins/jenkins:lts` 镜像。我们将 Jenkins 的 808 和 50000 端口映射到主机的同名端口,以便我们可以通过浏览器访问 Jenkins。我们还将 Jenkins 的数据目录 `/var/jenkins_home` 挂载到了 Docker 卷 `jenkins_home` 中,以便我们可以在容器重启后保留 Jenkins 的配置和数据。我们还设置了一个环境变量 `JAVA_OPTS=-Djenkins.install.runSetupWizard=false`,以禁用 Jenkins 的安装向导。最后,我们将 Jenkins 容器连接到一个名为 `jenkins_network` 的 Docker 网络中。 要部署 Jenkins,只需在包含上述 Docker Compose 文件的目录中运行以下命令: ``` docker-compose up -d ``` 该命令将启动 Jenkins 容器,并将其连接到 `jenkins_network` 网络中。我们可以通过浏览器访问 `http://localhost:808` 来访问 Jenkins。在第一次访问时,我们需要输入初始管理员密码,该密码可以在容器日志中找到。输入密码后,我们可以按照向导完成 Jenkins 的配置。 希望这个回答对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值