相关原文地址:

简书:离兮丶斜阳:[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"

其他相关博文

Docker 之 Jenkins自动化部署的更多相关文章

  1. docker安装jenkins自动化部署

    Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...

  2. AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署

    一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...

  3. springboot docker jenkins 自动化部署并上传镜像

    springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1. ...

  4. Jenkins自动化部署代码

    通过jenkins自动化部署项目代码可以大幅度节省打包上传部署的时间,提高开发测试的工作效率 ========== 完美的分割线 =========== 1.Jenkins是什么 1)Jenkins是 ...

  5. Jenkins 自动化部署上线

    转载于互联网 jenkins自动化部署项目,通过jenkins 部署来节省运维时间,不需要手动cp上线及版本发布 Jenkins 自动化部署上线 Jenkins Jenkins 自动化部署上线一.Je ...

  6. Linux下的Jenkins+Tomcat+Maven+Gitlab+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  7. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  8. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  9. jenkins自动化部署项目1--下载安装启动(windows)

    年初以来断断续续研究jenkins自动化部署项目,前些天终于搞定了,接下来一点点把做的时候遇到的坑以及自己的心得写下来,方便以后复用. 我的jenkins服务是是部署在windows上的 一.下载安装 ...

随机推荐

  1. 修改/查看ssh端口

    修改ssh端口 vi /etc/ssh/sshd_config 将Port修改为需要的端口 Port 212 重启ssh服务 service sshd restart 查看ssh端口 netstat ...

  2. 常用的Git命令清单

    目录 名词解释 开卷必读 一. 新建代码库 二.配置 三. 忽略某个文件的改动 四. 增加/删除文件 五. 代码提交 六. 分支 七. 标签 八. 查看信息 九. 远程同步 十. 撤销 十一. Git ...

  3. 多年经验,教你写出最惊艳的 Markdown 高级用法

    点赞再看,养成习惯,微信搜索[高级前端进阶]关注我. 本文 GitHub https://github.com/yygmind 已收录,有一线大厂面试完整考点和系列文章,欢迎 Star. 最近在学习的 ...

  4. Nginx安装,开箱即用?

    一.官网 首页:http://nginx.org/ 下载地址:http://nginx.org/download 安装文档:http://nginx.org/en/docs/install.html ...

  5. STP、PVST、MST协议

    • STP:生成树协议        ○ 阻止环形链路的广播风暴    • PVST:VLAN生成树        ○ 是STP的进阶版不仅能阻止广播风暴,还可以做到基于VLAN进行流量均衡.     ...

  6. Windows软件Everything的配置

    Everything配置 Everything是一款Windows下的搜索软件,怎么安装应该不难.这里说一下个人使用的两个习惯. 主要就两点,一个是快捷键,一个是搜索路径 1. 快捷键 配置快捷键,点 ...

  7. Java实现PDF和Excel生成和数据动态插入以及导出

    一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...

  8. 【剑指 Offer】04.二维数组中的查找

    题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  9. Linux 服务器安装node环境

    Linux 装 node 环境 我的是 CentOS 查看服务器是多少位系统 getconf LONG_BIT 下载地址, 下载对应的版本: http://nodejs.cn/download/ 我这 ...

  10. 【栈和队列】2、栈的基本实现 - Java

    简单记录 - bobo老师的玩转算法系列–玩转数据结构 - 栈和队列 栈的实现 Stack<E> void push(E) E pop() E peek() int getSize() b ...