首页 > 其他分享 >CICD流水线 Jenkins + Docker compose 分环境 一键部署SpringCloud项目

CICD流水线 Jenkins + Docker compose 分环境 一键部署SpringCloud项目

时间:2023-02-19 00:24:56浏览次数:57  
标签:compose zeal SpringCloud redis nacos acl conf CICD docker

一、环境准备

接上篇:上篇搭建好了Jenkins 环境 并把docker-compose.yml Dockerfile 相关jar包推送到了目标服务器。

二、分环境部署

1、SpringBoot配置

pom.xml

 <profiles> <!--与build标签同级别,放在project标签中-->
        <!--这是开发环境-->
        <profile>
            <id>dev</id>
            <properties>
                <!-- 环境标识,需要与配置文件的名称相对应 -->
                <activatedEnv>dev</activatedEnv>
            </properties>
            <activation>
                <!-- 默认环境 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!--这是测试环境-->
        <profile>
            <id>sit</id>
            <properties>
                <activatedEnv>sit</activatedEnv>
            </properties>
        </profile>
    </profiles>

bootstrap-dev.properties

#服务发现
spring.cloud.nacos.discovery.server-addr=192.168.56.15:8848


#配置中心
spring.cloud.nacos.config.server-addr=192.168.56.15:8848
spring.cloud.nacos.config.namespace=f9f9b142-110c-4c82-ae48-a15f73074b00
spring.cloud.nacos.config.ext-config[0].data-id=zeal_acl.properties
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.group=DEFAULT_GROUP

bootstrap-sit.properties

#服务发现
spring.cloud.nacos.discovery.server-addr=192.168.56.15:8848

#配置中心
spring.cloud.nacos.config.server-addr=192.168.56.15:8848
spring.cloud.nacos.config.namespace=8da183ca-408a-4d3b-983f-35bf18d9edcc
spring.cloud.nacos.config.ext-config[0].data-id=zeal_acl.properties
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.group=DEFAULT_GROUP

application.properties

spring.profiles.active=@activatedEnv@

2、Jenkins打包设置

echo $Tag
cd /var/jenkins_home/workspace/zeal
git checkout $Tag
git pull origin $Tag
/var/jenkins_home/apache-maven-3.6.3/bin/mvn clean package -P sit

3、Dockerfile、docker-compose.yml 配置 

Dockerfile

FROM openjdk:8
ENV APP_HOME=/apps/data/zeal_acl
WORKDIR $APP_HOME
COPY ./zeal_acl-1.0-SNAPSHOT.jar ./zeal_acl.jar
EXPOSE 8009
ENV JAVA_OPTS=""
CMD java ${JAVA_OPTS}  -jar zeal_acl.jar

docker-compose.yml 

version: "3.3"

networks:
  zeal:

volumes:
  data:

services:

  gateway:
    restart: always
    build:
      context: gateway
      dockerfile: Dockerfile
    container_name: zeal_gateway #指定容器名称
    ports:
      - "8222:8222"
    networks:
      - zeal

  zeal_acl:
    build:
      context: zeal_acl
      dockerfile: Dockerfile
    container_name: zeal_acl #指定容器名称
    environment:
      - JAVA_OPTS=${JAVA_OPTS}
    ports:
      - "8009:8009"
    volumes:
      - /logs/apps/zeal_acl/:/logs/apps/zeal_acl/
    networks:
      - zeal

  nacos:
    restart: always
    image: nacos/nacos-server:latest
    ports:
      - "8848:8848"
    environment:
      - "MODE=standalone"
    networks:
      - zeal

  mysql:
    restart: always
    image: daocloud.io/library/mysql:5.6.20 #指定镜像路径
    container_name: mysql #指定容器名称
    ports:
      - "3306:3306" #只写一个端口随机使用宿主机一个端口进行容器端口映射
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
      - "TZ=Asia/Shanghai"
      - "MYSQL_DATABASE=zeal_acl"
    volumes:
        - /apps/docker/mysql:/var/lib/mysql #映射数据卷
        - /apps/db/zeal_acl/zeal_acl_db.sql:/docker-entrypoint-initdb.d/zeal_acl_db.sql
    networks:
      - zeal

  sentinel1:
    restart: always
    image: redis
    container_name: redis-sentinel-1
    command: redis-sentinel /apps/docker/redis/conf/sentinel1.conf # 自定义路径,可更改,但是需要和volumes中的路径相同。
    ports:
      - 26380:26380
    volumes:
      - ./apps/docker/redis/conf/sentinel1.conf:/apps/docker/redis/conf/sentinel1.conf # 自定义路径,可更改,但是需要和command中的路径相同。
    networks:
      - zeal

  sentinel2:
    restart: always
    image: redis
    container_name: redis-sentinel-2
    command: redis-sentinel /apps/docker/redis/conf/sentine2.conf
    ports:
      - 26381:26381
    volumes:
      - ./apps/docker/redis/conf/sentinel2.conf:/apps/docker/redis/conf/sentine2.conf
    networks:
      - zeal

  sentinel3:
    restart: always
    image: redis
    container_name: redis-sentinel-3
    command: redis-sentinel /apps/docker/redis/conf/sentine3.conf
    ports:
      - 26382:26382
    volumes:
      - ./apps/docker/redis/conf/sentinel3.conf:/apps/docker/redis/conf/sentine3.conf
    networks:
      - zeal

看上面的配置  docker-compose.yml 里的 JAVA_OPTS=${JAVA_OPTS}是动态的 那么JAVA_OPTS在哪里配置呢?

答案 .env 文件 在docker-compose.yml同级目录中加入.env文件,则可以设置docker-compose环境变量的默认值,可以在docker-compose中引用到的。

相关资料 

我们只需要在Jenkins推送文件后将JAVA_OPTS写入进.env文件中就行了

echo "JAVA_OPTS=-Dspring.profiles.active=sit"  >  .env

三、Jenkins推送后执行脚本

1、将文件移动到部署目录

2、停掉并删除相关服务旧容器,删除旧镜像

3、重新构建镜像并启动容器

这里就是一些文件操作和Docker命令操作就不贴出来了

四、测试

1、提交代码后 Gitee打标签

2、Jenkins构建

 

3、查看应用日志 环境切换成功

docker logs 容器id

4、SUCCESS 成功将相关服务注册到注册中心 检查相关应用也正常

 

标签:compose,zeal,SpringCloud,redis,nacos,acl,conf,CICD,docker
From: https://www.cnblogs.com/mangoubiubiu/p/17134059.html

相关文章

  • springcloud day01
    单体架构:业务所有功能都在一个项目中开发,打成一个包部署优点是架构简单部署成本低缺点是耦合度高分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为一个独立的......
  • composer ssl3_get_server_certificate:certificate verify failed
    使用composer命令composerself-update或composerrequirewechatpay/wechatpay都出现以下问题:[Composer\Downloader\TransportException]The"https://getcom......
  • 63-CICD持续集成工具-Jenkins结合Ansible实现自动化批量部署
    集成Ansible的任务构建安装Ansible环境#包安装即可(新版ubuntu包安装Ansible会缺少配置文件,可copy旧版的部分)[root@jenkins~]#aptinstallansible-y[root@jenkins~]#......
  • 重温 dockerfile & docker-compose
    重温dockerfile&dockerCompose复习dockerfile将应用程序及其需要的系统函数库、环境、配置、依赖,打包常用命令https://docs.docker.com/engine/reference/builder/......
  • SpringCloud Alibaba框架都有啥啊
    前言springcloud是一个基于springboot实现的微服务架构开发工具,使用springcloud框架进行微服务业务开发是java后端开发必备技能,目前主流的SpringCloud分为SpringCloudNet......
  • minio+elasticsearch docker-compose
    version:'3.1'services:elasticsearch:image:elasticsearch:7.17.4#volumes:#-/etc/localtime:/etc/localtime#-./es/plugins:/us......
  • 62-CICD持续集成工具-Jenkins构建Golang的web项目
    实现Golang应用源码编译并部署安装Golang环境#编译安装[root@jenkins~]#catinstall_go.sh#!/bin/bashGO_VERSION=1.18.4URL=https://studygolang.com/dl/golang/go${......
  • composer 执行install 超时解决
    我本地的环境是docker,进入docker执行install后返回超时:#composerinstallNocomposer.lockfilepresent.Updatingdependenciestolatestinsteadofinstallingf......
  • SpringCloudStarterSleuth搭建&使用
    是什么SpringCloudSleuth是SpringCloud生态系统中的一个分布式跟踪解决方案,可以用于跟踪微服务应用程序中的请求链路。它通过在请求中添加唯一标识符(TraceID)和调用标......
  • docker-compose 配置 es kibana
    直接上代码elasticsearch.ymlhttp:host:0.0.0.0xpack.security.enabled:falsexpack.security.enrollment.enabled:truexpack.security.http.ssl:enabled:fal......