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

一、环境准备

接上篇:上篇搭建好了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 成功将相关服务注册到注册中心 检查相关应用也正常

 

posted @ 2023-02-19 00:06  KwFruit  阅读(560)  评论(0编辑  收藏  举报