Docker入門實戰(四)——基於jenkins部署微服務
阿新 • • 發佈:2018-11-15
一、部署前端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)刪除過時無用的映象成功