Docker搭建微服务自动部署 <架构探险之路>,让咱们来看看如何实现基于Docker的Jenkins自动化部署。html
构建思路linux
镜像的自动构建分两种状况:git
jenkins所在容器中已部署docker服务github
直接在构建中利用shell脚本完成Dokcerfile文件的复制和执行,进而在jenkins所在容器内完成镜像的构建
复制代码
jenkins所在容器中未部署docker服务web
- jenkins中利用Docker插件实现镜像构建
- jenkins 全局工具配置中安装docker[自动安装]
- 将jenkins部署在宿主机上,重复上述关联步骤。gitlab可切换为github、gitee
复制代码
为了提高镜像的自动构建速度,最终采用本地部署jenkins的方式,由于宿主机是有docker运行环境的。docker
jenkins环境 [相对版本较低]shell
docker pull jenkins
docker run -d -p 8002:8080 -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always jenkins
查看容器日志
docker logs -f jenkins
查看容器运行
docker ps
复制代码
界面访问`127.0.0.1:8080`,自动跳转至登陆界面
复制代码
观察日志获取初始密码
复制代码
jenkins安装
复制代码
访问
admin:jenkins
复制代码
jenkinsci/jenkins [最新版本]api
镜像缓存
docker pull jenkinsci/jenkinstomcat
启动
docker run -d -p 8002:8080 -m 1024m -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always jenkinsci/jenkins
日志
docker logs -f jenkins
jenkis 绑定gitlab
docker run -d -p 8002:8080 -m 1024m -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always --link gitlab:gitlab.yiyuery.com jenkinsci/jenkins
maven构建项目
gitlab's project 配置
此处ssh鉴权失败须要生成key添加到gitlab中,和github同样,例外,不能使用ssh,只能用http 点击Add,输入帐户root
,密码Abc23++,此为gitlab管理员帐号和访问gitlab时设置的密码
构建后的maven命令配置
下方的为构建后的须要存档的文件配置 [Ant风格] pom.xml
文件对应工程目录msa-api-hello/pom.xml
构建结果
本地映射jenkins工做空间
> 定时构建
复制代码
shell脚本自动化构建Docker镜像
可用环境变量
# 定义变量
API_NAME="msa-api-hello"
API_VERSION="0.0.1"
API_PORT="8101"
IMAGE_NAME="127.0.0.1:5000/com.msa/$API_NAME:$BUILD_NUMBER"
CONTAINER_NAME=$API_NAME-$API_VERSION
# 进入target目录并复制Dockerfile文件
cd $WORKSPACE/target
cp classes/Dockerfile .
# 构建Docker镜像
docker build -t $IMAGE_NAME .
# 推送Docker镜像
docker push $IMAGE_NAME
# 删除Docker容器
cid=$(docker ps | grep $CONTAINER_NAME |awk '{print $1}')
if [ x"$cid" != x ]
then
docker rm -f $cid
fi
# 启动Docker容器
docker run -d -p $API_PORT:8080 --name $CONTAINER_NAME $IMAGE_NAME
# 删除Dockerfile文件
rm -f Dockerfile
复制代码
提高maven构建速度
maven clean install -Dmaven.test.skip=true 跨过测试类的执行
jenkins 没法经过shell脚本进行docker镜像的构建
解决方案:
- 不使用任何Jenkins镜像,宿主机安装Jenkins [宿主机有Docker服务]
- 不使用官方Jenkins镜像,本身构造带有Docker服务的Jenkins镜像
- Docker-in-Docker [DinD]
- Docker-outside-of-Docker [DooD]
- 使用Jenkins的Docker插件
复制代码
考虑到本地笔记本开发环境,多个dokcer的运行效率原本就低,所以,为提升构建速度,下载war包后在本地tomcat中运行,须要对jenkins进行构建的话,启动tomcat便可。
tomcat 部署项目
直接放在tomcat的webapp目录下后在bin目录下直接启动也是能够的。此处主要是由于idea中开发演示项目,直接放在一块儿,方便管理。
安装maven插件
不安装插件则没法构建maven项目,jenkins默认是不支持maven的
配置后拉取项目代码进行构建
tag使用的是构建次数做为版本标记
自动发布
备注: