Docker 之 Jenkins自动化部署



相关原文地址:

简书:离兮丶斜阳:[Docker] Docker 之 Jenkins自动化部署



构建思路:

  • Docker 安装jenkins,用来拉取代码自动更新
  • Docker 安装gitlab,用来局域网或本地管理代码
  • Docker 安装本地镜像仓库registry、docker-register-web
  • Spring Boot 开发代码后编写Dokcerfile文件
  • Spring Boot 利用docker的mvn插件测试镜像的生成和推送
  • 测试镜像运行

镜像的自动构建分两种情况:

jenkins所在容器中已部署docker服务:
直接在构建中利用shell脚本完成Dokcerfile文件的复制和执行,进而在jenkins所在容器内完成镜像的构建

jenkins所在容器中未部署docker服务:

  • jenkins中利用Docker插件实现镜像构建
  • jenkins 全局工具配置中安装docker[自动安装]
  • 将jenkins部署在宿主机上,重复上述关联步骤。gitlab可切换为github、gitee

为了提升镜像的自动构建速度,最终采用本地部署jenkins的方式,因为宿主机是有docker运行环境的。

Jenkins部署

通过docker pull 拉下来的Jenkins环境版本较低。。。居然2.1左右,而且会缺少很多插件。

甚至是插件下载不下来的情况,所以后来改用了rpm的方式安装。

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

访问界面:

ip:8080
#自动跳转至登录界面

访问:

admin: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

shell脚本自动化构建Docker镜像

可通过下方蓝色字体查看可用环境变量,查看shell脚本可用的环境变量:
在这里插入图片描述

# 定义变量
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插件

检测容器和镜像是否存在,滚动更新

imagesid=`docker images|grep -i docker-test|awk '{print $3}'`
project=/testdockfile/
dockerid=`docker ps -a|grep -i docker-test|awk '{print $1}' `
echo $project
if  [ ! -n "$imagesid" ];then
   echo $imagesid "is null"
else
    docker rmi $imagesid -f
fi
cd $project

docker build -t docker-test .

if  [ -n "$dockerid" ]  ;then
   docker stop $dockerid
   docker rm -f $dockerid
else
   echo 'dockerid is null'
fi
docker run -it -d -p 8080:8080 -t "docker-test"

其他相关博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值