由于Jenkins容器化部署,容器容器之间拷贝文件及其繁琐,如果在Jenkins部署在系统外层也需要配置复杂的流程才能实现微服务的自动化部署,本文主要通过脚本方式取代Jenkins实现自动化部署。脚本方式简单快捷,可以快速实现微服务部署、升级,避免Jenkins占用内存。
一、准备环境
1. 硬件环境
centos7.5
2. 软件环境
docker、jdk、maven(如果是gradle项目则安装gradle)、git
二、安装软件
1.安装docker
下载依赖
yum -y install yum-utils device-mapper-persistent-data lvm2
设置镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
1. yum makacache fast 2. yum -y install docker-ce
启动docker
systemctl start docker
设置开机启动
systemctl enable docker
2.安装jdk
yum install java-1.8.0-openjdk.x86_64
查看是否可用
java -version
3.安装maven
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc
yum -y install apache-maven
检查是否可用
mvn -version
4.安装git
yum install -y git
二、建立工作空间
首先定义/home目录为我们的工作空间,在这个工作空间下我们需要建立Gitspace、DockerBuilder、Shell这三个文件夹
1.Gitspace
代码工厂,用来存储各个项目的代码
2.DockerBuilder
Docker构建工厂,用来放置各个项目的dockerfile文件,生成docker镜像
3.Shell
用来存放启动脚本,意见化启动部署微服务
三、操作步骤
1.克隆代码
进入Gitspace目录,然后克隆我们需要自动化部署的项目
1. cd /home/Gitspace 2. git clone git clone http://xxxxx/xxxx/xxxxx.gi
2.配置Git免密拉取
进入Gitspace下的项目目录,然后ls -a可以看到有个.git的隐藏文件夹
vim .git/config
然后添加上下边两行
1. [credential] 2. helper = store
3.编写dockerfile
进入/home/DockerBuilder目录新建项目文件夹,然后新建项目的dockerfile文件
FROM openjdk:8 MAINTAINER NETGATE LABEL app="hb-server" version="0.0.1" by="eric" COPY ./hb-server-0.0.1-SNAPSHOT.jar hb-server.jar RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone CMD java -jar hb-server.jar
4.编写shell脚本
进入/home/Shell文件夹,新建test.sh脚本
#!/bin/bash #auth eric #date 2021-12-13 #*********脚本入参#********* appname=hb-server #Git源码位置 gitsrc=/home/GitSpace/$appname #Docker脚本位置 dockersrc=/home/DockerBuilder/$appname #*********脚本入参#********* cd $gitsrc && git pull origin master && mvn install -DskipTests if [ $? -eq 0 ]; then echo "maven build success " else echo -e '\033[31m[ error ] gradle build faild \033[0m' && exit 1 fi \cp -f $gitsrc/target/*.jar $dockersrc echo '第二步:查看是否有镜像' cd $dockersrc imageresult=$(docker images |grep $appname | wc -l) echo $imageresult if [ $imageresult -eq 0 ]; then echo "不存在镜像,需要重新初始化鏡像"; docker build -t $appname . docker run -d --name $appname -p 8003:8003 --restart always $appname else conid=$(docker ps |grep $appname |awk '{print $1}') docker cp *.jar $conid:/$appname.jar docker restart $conid if [ $? -eq 0 ]; then echo "发布成功!" else echo -e '\033[31m[ error ] 发布失败 \033[0m' && exit 1 fi fi
5.执行shell脚本
sh test.sh