Docker 之 Jenkins自动化部署
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"
其他相关博文
- Jenkins Wiki
- 使用Docker安装Jenkins
- Jenkins与Docker相关的Plugin使用
- jenkins for SpringBoot
- Jenkins (自动使用docker容器发布java.war +tomcat)
Docker 之 Jenkins自动化部署的更多相关文章
- docker安装jenkins自动化部署
Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...
- AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...
- springboot docker jenkins 自动化部署并上传镜像
springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1. ...
- Jenkins自动化部署代码
通过jenkins自动化部署项目代码可以大幅度节省打包上传部署的时间,提高开发测试的工作效率 ========== 完美的分割线 =========== 1.Jenkins是什么 1)Jenkins是 ...
- Jenkins 自动化部署上线
转载于互联网 jenkins自动化部署项目,通过jenkins 部署来节省运维时间,不需要手动cp上线及版本发布 Jenkins 自动化部署上线 Jenkins Jenkins 自动化部署上线一.Je ...
- Linux下的Jenkins+Tomcat+Maven+Gitlab+Shell环境的搭建使用(jenkins自动化部署)
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
- jenkins自动化部署项目1--下载安装启动(windows)
年初以来断断续续研究jenkins自动化部署项目,前些天终于搞定了,接下来一点点把做的时候遇到的坑以及自己的心得写下来,方便以后复用. 我的jenkins服务是是部署在windows上的 一.下载安装 ...
随机推荐
- 修改/查看ssh端口
修改ssh端口 vi /etc/ssh/sshd_config 将Port修改为需要的端口 Port 212 重启ssh服务 service sshd restart 查看ssh端口 netstat ...
- 常用的Git命令清单
目录 名词解释 开卷必读 一. 新建代码库 二.配置 三. 忽略某个文件的改动 四. 增加/删除文件 五. 代码提交 六. 分支 七. 标签 八. 查看信息 九. 远程同步 十. 撤销 十一. Git ...
- 多年经验,教你写出最惊艳的 Markdown 高级用法
点赞再看,养成习惯,微信搜索[高级前端进阶]关注我. 本文 GitHub https://github.com/yygmind 已收录,有一线大厂面试完整考点和系列文章,欢迎 Star. 最近在学习的 ...
- Nginx安装,开箱即用?
一.官网 首页:http://nginx.org/ 下载地址:http://nginx.org/download 安装文档:http://nginx.org/en/docs/install.html ...
- STP、PVST、MST协议
• STP:生成树协议 ○ 阻止环形链路的广播风暴 • PVST:VLAN生成树 ○ 是STP的进阶版不仅能阻止广播风暴,还可以做到基于VLAN进行流量均衡. ...
- Windows软件Everything的配置
Everything配置 Everything是一款Windows下的搜索软件,怎么安装应该不难.这里说一下个人使用的两个习惯. 主要就两点,一个是快捷键,一个是搜索路径 1. 快捷键 配置快捷键,点 ...
- Java实现PDF和Excel生成和数据动态插入以及导出
一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...
- 【剑指 Offer】04.二维数组中的查找
题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- Linux 服务器安装node环境
Linux 装 node 环境 我的是 CentOS 查看服务器是多少位系统 getconf LONG_BIT 下载地址, 下载对应的版本: http://nodejs.cn/download/ 我这 ...
- 【栈和队列】2、栈的基本实现 - Java
简单记录 - bobo老师的玩转算法系列–玩转数据结构 - 栈和队列 栈的实现 Stack<E> void push(E) E pop() E peek() int getSize() b ...