目录
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