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上的 一.下载安装 ...
随机推荐
- springboot 日期参数前后台转换问题
方式 一: 在实体类上加@DatetimeFormat与@JsonFormat注解 @DatetimeFormat:将前台日期字符串转换成Date格式 @DateTimeFormat(pattern= ...
- java线程,进程,多线程
(1)线程和进程 通俗一点,进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行. (2)java中实现线程的两种方式,第一种是继承Thre ...
- C语言中一维数组
(1)输出数组元素 #include<stdio.h> int main() { int index; /*定义循环变量*/ int iArray[6]={0,1,2,3,4,5}; /* ...
- vue项目中使用日期获取今日,昨日,上周,下周,上个月,下个月的数据
今日公司项目接口要求获取动态的上周数据,经过不断的寻找,找到此方法. 该方法使用的是Moment.js JavaScript日期处理类库 一:安装依赖 npm install moment --sav ...
- centos 8.x系统配置chrony时间同步服务
redhat/centos 7.x默认使用的时间同步服务为ntp服务,但是从redhat/centos 8开始在官方的仓库中移除了ntp软件,换成默认的chrony进行时间同步的服务,虽然也可以通过添 ...
- 基于腾讯云存储COS的ClickHouse数据冷热分层方案
一.ClickHouse简介 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS),支持PB级数据量的交互式分析,ClickHouse最初是为YandexMetrica ...
- 【Spring】Spring JdbcTemplate
Spring JdbcTemplate 文章源码 JdbcTemplate 概述 它是 Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装.Spring 框架提供了很多的操 ...
- js的函数-function
function函数 function的英文是[功能],[数] 函数:职责:盛大的集会的意思 在js里,就是函数的意思.在Java里叫做方法. 定义函数 function fun(参数){ //函数体 ...
- 【原创】X86_64汇编、寄存器、内嵌汇编
整理的X86_64/X86汇编.寄存器.C内嵌汇编笔记,主要用于查阅使用. 目录 一.汇编语言 二.指令 数据传输指令 栈操作指令 push pop 运算指令 位操作 比较操作指令 标志寄存器 流控制 ...
- JavaScript入门-对象
js对象 本篇主要介绍js里如何创建对象,以及for循环访问对象的成员... 什么是对象? 对象,并不是中文里有男女朋友意思,它是从英文里翻译来的,英文叫[Object],目标,物体,物品的意思. 在 ...