由于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

yum makacache fast
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.repos.d/epel-apache-maven.repo
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目录,然后克隆我们需要自动化部署的项目

cd /home/Gitspace
git clone git clone http://xxxxx/xxxx/xxxxx.git

2.配置Git免密拉取

进入Gitspace下的项目目录,然后ls -a可以看到有个.git的隐藏文件夹

vim .git/config

然后添加上下边两行

[credential]
    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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐