1. 程式人生 > >Docker入門實戰(四)——基於jenkins部署微服務

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)刪除過時無用的映象成功