Docker入门实战(四)——基于jenkins部署微服务

一、部署前端Vue项目

第一步、编写构建脚本xxx-build.sh

port=xxx
#根据端口号查询对应的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');

#杀掉对应的进程,如果pid不存在,则不执行
if [  -n  "$pid"  ];  then
    kill  -9  $pid;
fi

#进入工作目录,重启baye-ui
if [ $? -eq 0 ]; then
	echo "关闭baye-ui成功"
#让项目在后台运行
	nohup npm run test >/dev/null 2>&1 &
	echo "重启成功"
else
	echo "无法终止baye-ui"
fi

第二步、在jenkins中创建构建项目

第三步、配置项目

(1)工作空间

(2)源码仓库

(3)构建触发事件

主要讲述push事件

A:配置jenkins

 B:配置gitlab

进入gitlab-->进入项目-->打开左侧setting-->选择Integrations-->添加jenkins中获取的URL和token

(4)配置构建shell命令

#禁止构建后中止衍生进程
BUILD_ID=DONTKILLME
cd /workspace/baye-ui
sh ./baye-ui-run.sh

第四步、立即构建,测试配置

二、部署后端Cloud项目

2.1  服务中编写Dockerfile文件

#基本形式如下
FROM anapsix/alpine-java:8_server-jre_unlimited

MAINTAINER [email protected]
#创建服务工作目录
RUN mkdir -p /xxx-/bin/xxx/xxx-config
#指定工作目录
WORKDIR /xxx-/bin/xxx/xxx-config
#与端口对应
EXPOSE 11001
#添加jar包到工作目录
ADD ./xxx-config/target/xxx-config.jar ./
#运行服务
CMD java -Djava.security.egd=file:/dev/./urandom -Xms50m -Xmx300m -jar xxx-config.jar

2.2 项目中编写docker-compose.yml

version: '2'
#定义服务
services:
  xxx-zookeeper:
    image: zookeeper:3.4.13
    ports:
      - 2181:2181
    restart: always
    container_name: xxx-zookeeper

  xxx-redis:
    image: redis:4.0.10
    ports:
      - 6379:6379
    restart: always
    container_name: xxx-redis

  xxx-eureka:
    build:
      context: ./
      dockerfile: ./xxx-eureka/Dockerfile
    restart: always
    ports:
      - 11002:11002
    container_name: xxx-eureka

  xxx-config:
    links:
      - xxx-eureka
    build:
      context: ./
      dockerfile: ./xxx-config/Dockerfile
    restart: always
    ports:
      - 11001:11001
    container_name: xxx-config

  xxx-gateway:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-gateway/Dockerfile
    restart: always
    ports:
      - 11003:11003
    container_name: xxx-gateway

  xxx-auth:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-auth/Dockerfile
    restart: always
    ports:
      - 11004:11004
    container_name: xxx-auth

  xxx-upms:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-gateway
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-provider/xxx-upms-biz/Dockerfile
    restart: always
    ports:
      - 10003:10003
    container_name: xxx-upms

  xxx-monitor:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-visual/xxx-monitor/Dockerfile
    restart: always
    ports:
      - 11005:11005
    container_name: xxx-monitor

  xxx-daemon:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-visual/xxx-daemon/Dockerfile
    restart: always
    ports:
      - 5002:5002
    container_name: xxx-daemon

  xxx-codegen:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-gateway
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-visual/xxx-codegen/Dockerfile
    restart: always
    ports:
      - 11007:11007
    container_name: xxx-codegen

  xxx-tx-manager:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-visual/xxx-tx-manager/Dockerfile
    restart: always
    ports:
      - 11008:11008
      - 9998:9998
    container_name: xxx-tx-manager

  xxx-base:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-gateway
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-provider/xxx-base-biz/Dockerfile
    restart: always
    ports:
      - 10001:10001
      - 9998:9998
    container_name: xxx-base

  xxx-vas:
    links:
      - xxx-eureka
      - xxx-redis
      - xxx-gateway
      - xxx-config
    build:
      context: ./
      dockerfile: ./xxx-provider/xxx-vas-biz/Dockerfile
    restart: always
    ports:
      - 10005:10005
    container_name: xxx-vas



注意:

links:实现容器间相互通信(最好更改hosts文件,做端口和域名映射)

build:指定Dockerfile文件所在

ports:宿主机与容器端口映射

container_name:容器名

2.3 编写构建脚本


#进入工作目录
cd /workspace/xxx
#安装xxx至本地maven仓库
mvn clean install -Dmaven.test.skip=true -P test


#停止容器
if [ $? -eq 0 ]; then
	echo "编译成功,开始停止容器"
	docker-compose stop
else
	echo "无法完成编译"
	exit
fi

#删除容器
if [ $? -eq 0 ]; then
	echo "开始删除容器"
	docker-compose rm -f
else
	echo "无法停止容器"
	exit
fi

#重新创建服务
if [ $? -eq 0 ]; then
	echo "编译成功,开始重新创建服务"
	docker-compose build
else
	echo "无法删除容器"
	exit
fi

#启动eureka
if [ $? -eq 0 ]; then
	docker-compose up -d xxx-eureka
else
	echo "无法创建服务"
	exit
fi

#启动config
if [ $? -eq 0 ]; then
	docker-compose up -d xxx-config
else
	echo "无法启动eureka"
	exit
fi

#启动auth
if [ $? -eq 0 ]; then
	docker-compose up -d xxx-auth
else
	echo "无法启动config"
	exit
fi

#启动gateway
if [ $? -eq 0 ]; then
	docker-compose up -d xxx-gateway
else
	echo "无法启动auth"
	exit
fi

#启动upms
if [ $? -eq 0 ]; then
	docker-compose up -d xxx-upms
else
	echo "无法启动gateway"
	exit
fi


#启动codegen
if [ $? -eq 0 ]; then
	docker-compose up -d xxx-codegen
else
	echo "无法启动upms"
	exit
fi


#删除无用镜像
if [ $? -eq 0 ]; then
docker rmi `docker images | grep  "<none>" | awk '{print $3}'`
fi

2.4 配置jenkins

与一种配置方式基本一致

2.5  立即构建,测试并追踪构建信息

(1)拉取源码,并执行install成功

(2)重新构建项目成功

(3)删除过时无用的镜像成功

猜你喜欢

转载自blog.csdn.net/qq_35813653/article/details/84062382