docker+jenkins远程部署war包,shell自动备份启动

目录

1.目的
2.Docker是什么,jenkins是什么
3.怎么用
  3.1Docker教程
    3.1.1Docker快速安装
    3.1.2Docker常用命令
  3.2Jenkins教程
    3.2.1安装
    3.2.2Jenkins插件和配置
  3.3远程部署配置
    3.3.1源码配置
    3.3.2构建环境配置
    3.3.3远程部署shell(核心)

1.目的

实现项目自动化部署,使用docker外部加载文件夹的方式加载外部war包或者项目的特性,利用jenkins在内网的高速传输实现代码从git上的拉取,编译,打包,上传,备份旧项目,覆盖项目。

实际效果:
项目部署一个100m的war包项目,从拉取,编译,打包上传,备份,启动,人工部署需要5-15分钟,利用外网走docker+Jenkins自动化部署要1-5分钟,利用内网走docker+Jenkins部署就是30-40秒。
可以说自动部署提高了10-20倍的部署效率
在这里插入图片描述

2.Docker是什么,jenkins是什么

Docker是容器,而容器时轻量级们可移植的为应用程序提供了隔离的运行空间
优势是统一了开发环境,能够快速构建,分享和运行。

jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。

3.怎么用

3.1Docker教程

3.1.1Docker快速安装

Docker原参考教程地址:https://www.runoob.com/docker/docker-tutorial.html

1.linux自动化安装docker(快速自动安装)
curl -sSL https://get.daocloud.io/docker | sh

2.设置开机启动docker
systemctl enable docker.service
3.设置docker启动
systemctl start docker

4.设置加速器及设置docker log大小(可以不设置,设置后可以加速)

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

以下目录增加以下文件及内容
/etc/docker/daemon.json
{
“registry-mirrors”: [“https://r2esf14q.mirror.aliyuncs.com”],
“log-driver”:“json-file”,
“log-opts”: {“max-size”:“500m”, “max-file”:“3”}
}

3.1.2Docker常用命令(通过-v加载外部文件)

基础命令

查找进行

docker search 查找镜像仓库

拉取镜像

docker pull 镜像

查看镜像:

docker images

查看所有容器:

docker ps -a

查看运行容器:

docker ps

删除容器:

docker rm 容器id

删除镜像:

docker rmi 容器id

运行指定容器:

docker start 容器id
docker start name

获取容器/镜像的元数据

docker inspect name

运行镜像

docker run -d -p 8084:8080 -e "SPRING_PROFILES_ACTIVE=dev" -e TZ=Asia/Shanghai --name xxx -v /g/var:/var 仓库名(关系dockerID上传)/镜像名:标签

备注:-d表述后台运行,-p端口映射,-e环境变量映射 -name指定容器名 -v指定路劲/文件映射

镜像文件
创建Dockerfile
内容如下:

# 基础镜像使用java
FROM java:8
EXPOSE 8084
ENTRYPOINT ["java","-jar","/var/xxx.jar"]

创建镜像(后面的点是必须的标识运行创建)

docker build -t xxxa/xxxb .
docker build -t 仓库名(关系dockerID上传)/镜像名:标签 .

3.2Jenkins教程

3.2.1安装

docker pull jenkins

(Docker Jenkins 是一个专用来做部署的容器,自带Java,不需要额外配置JDK)

首次启动Jenkins

docker run -d -p 8080:8080 -p 50000:50000 -v /usr/local/jenkins:/var/jenkins_home  --name jenkins --restart always Jenkins

Jenkins插件和配置
后续访问8080端口进行jenkins的配置
获取默认密码

$cat /usr/local/jenkins/secrets/initialAdminPassword

一系列配置及其他设置

在jenkins中配置 Maven/git(注意maven/git的目录映射通过docker映射,本次不演示这个)
配置maven国内仓库速度快
在这里插入图片描述

在jenkins安装 Maven Integration plugin插件(用于构建项目)

在这里插入图片描述

在jenkins安装Publish Over SSH插件(用于远程执行shell及上传文件)

在这里插入图片描述

备注安装完插件需要重启项目

3.3远程部署配置:

3.3.1源码配置

在这里插入图片描述

3.3.2构建环境配置

在这里插入图片描述

远程部署shell(核心)

#!/bin/bash
#需要修改的参数开始
projectName=xxx
wroot=/var/wwwroot-saas-xxx/
dockerRun="docker run -d -p 8443:8443 -e SPRING_PROFILES_ACTIVE=pro -e TZ=Asia/Shanghai --name $projectName -v /var:/var -v $wroot:/usr/local/tomcat/webapps tomcat:8"
#需要修改的参数完毕
projectWar=$projectName.war
backup=/var/wwwbackup/$projectName/
wwwproject=/var/wwwproject/$projectName/
datename=$(date +%Y%m%d-%H%M%S)
startflag=$(docker inspect --format '{{.State.Running}}' "$projectName")
exit=$(docker ps -a |grep "$projectName")
imagesExit=$(docker images -q tomcat:8)
if [ ! -d "$backup" ];then
  sudo mkdir /var/wwwbackup
  sudo mkdir $backup
  echo "创建备份文件夹成功"$backup
fi
if [ ! -d "$wroot" ];then
  sudo mkdir $wroot
  echo "项目文件夹成功"$wroot
fi
if [ ! -d "$wwwproject" ];then
  sudo mkdir $wwwproject
  echo "项目文件夹成功"$wwwproject
fi
if [ "$imagesExit" == "" ];then
		  echo "镜像不存在,主动拉取docker构建镜像"
		  docker pull tomcat:8
fi
if [ ! -e "$wwwproject$projectWar" ];then
  echo "新war包不存在,退出构建"
else
	if [ ! -d "$wroot$projectName" ];then
		echo "去"$wwwproject"首次构建docker项目"
		unzip $wwwproject$projectWar -d $wroot$projectName
		cd $wroot
		pwd
		if [ "$exit" != "" ];then
		  echo "容器已经存在,删除容器"
		  docker stop "$projectName"
		  docker rm "$projectName"
		  echo "删除容器成功"
		fi
		echo "容器首次运行"
		${dockerRun}
		echo "第一次容器创建完成端口号"
	 else
		echo "备份文件"
		cd $wroot
		tar -czvf $backup$projectName$datename.tar.gz $projectName
		echo "最新war包"
		unzip -oq $wwwproject$projectWar -d $wroot$projectName
		echo “工程名称”
		echo $projectName
		echo “容器是否运行状态”
		echo $startflag
		echo "开始启动"
		if [ "$exit" == "" ];then
		  echo "没有容器,新建容器"
		  ${dockerRun}
		  echo "第一次容器创建完成端口号"
		else
		  echo "容器已经存在,重启容器"
		  docker restart "$projectName"
		  echo "容器重启成功"
		fi
		echo “启动结束”
		docker ps -a
		echo "运行成功"
	fi
fi


版权声明:本文为qq_30240219原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。