jenkins+docker 持续构建非docker in docker

简介: 工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果本文采用jenkins docker svn maven作为相关工具,项目spring boot框架使用 个软件版本 jenkins Jenkins ver.

 

工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果

本文采用jenkins docker svn maven作为相关工具,项目spring boot框架

使用 个软件版本 

jenkins Jenkins ver. 2.90

docker 17.10-ce

svn 1.6

maven 3.5

spring boot 1.5.6

centos7

实现目标:当我们迁入代码时自动升级到测试服务器,如下图

 

第一步 重新构建自己的jenkins镜像

构建我们自己的jenkins,jenkins 我们在docker容器中运行,但是 我们还要用jenkins来构建docker镜像这是就需要 jenkins容器中可以执行docker命令,所以我们需要构建自己的jenkins镜像

这里借鉴 大桥下的蜗牛 的博客 同时也向大家推荐一下 https://blog.lab99.org/post/docker-2016-07-14-faq.html#ru-he-zai-docker-rong-qi-nei-shi-yong-docker-ming-ling-bi-ru-zai-jenkins-rong-qi-zhong

更详细的 请大家浏览上面的网址查看。

我并没有用上面的Dockerfile来构建jenkins镜像因为上面使用的jenkins版本有点老不过依然能用下面不上我自己的 Dockerfile

FROM jenkinsci/jenkins:2.90-alpine
# 下载安装Docker CLI
USER root
RUN curl -O https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz \
    && tar zxvf docker-latest.tgz \
    && cp docker/docker /usr/local/bin/ \
    && rm -rf docker docker-latest.tgz
# 将 `jenkins` 用户的组 ID 改为宿主 `docker` 组的组ID,从而具有执行 `docker` 命令的权限。
ARG DOCKER_GID=999
USER jenkins:${DOCKER_GID}

然后 docker build -t myjenkins:0.0.1 .  进行构建

运行

docker run --name jenkins \
    -d \
    -p 8081:8080 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    myjenkins:0.0.1

然后就等待容器起来之后打开界面这样打镜像有一个问题(1、很难在线/离线安装jdk除非在构建镜像是就进行安装实际上jenkins基础镜像有jdk环境 2、不知道为什么 不能再挂载volume)

起来之后我们会看到 初始化安装插件等等 这里就不截图展示了 

第二步 安装jenkins插件

系统管理->管理插件->可选插件

 

安装相关maven插件

同样安装docker相关插件,安装完后如下图

上面的插件 有很多都是开始的时候安装的。

第三步 设置docker远程访问

本人使用的是centos7操作系统

首先打开docker安装文件路径如下

/usr/lib/systemd/system

修改 docker.service文件

ExecStart=/usr/bin/docker --tls=false -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

然后刷新配置文件重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

这样docker就会监听2375端口我们就可以对他进行远程操作

docker -H IP:2375 ps

执行docker命令时指定IP和端口号

第四部 配置我们的jenkins

系统管理->系统设置

选择 svn使用版本

设置Docker builder 地址这里一定要主要 是tcp协议不是http,填写完一定要测试一下链接确定是否联通

 

 

 

然后进行全局工具配置

系统管理->全局工具配置

进行maven配置 其中jdk在jenkins中已经存在jdk环境所以不需要设置

 

 选择完后点击保存

第五部 创建item

 

 首先配置svn

然后在设置构建步骤

这里的基本思想是 首先maven将工程达成jar包,然后用Dockerfile文件生成docker镜像然后在上传到私有仓库再然后远程执行部署和更新命令

首先设置maven构建

 

然后设置镜像构建

选择完Execute Docker command 之后在选择 Create/build image

这里说明一下

最上面选择 只有构建成功才进行下一步操作

然后在进行选择进行镜像推送

最后我们远程执行docker命令进行运行创建容器

 

 

$WORKSPACE/src/docker

上面的路径是java工程的路径Dockerfile文件在上面的路径在工程中写好另外我们工程生成的java包也是需要生成输出到这个目录的

$BUILD_NUMBER  这个全局变量是自增的每次构建都会+1可以用它来标记版本

到这里我们的jenkins基本上已经设置完成可以保存进行应用构建执行了。

最后 我们看下我们的项目结构

再附上本人java工程的Dockerfile文件

FROM java:8
VOLUME /tmp
ADD testdemo-0.0.5.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 10005
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

本文还涉及很多其他知识比如私有仓库的搭建Spring boot框架等知识

 

上面忘记了 如果要持续构建的话 

需要设置一下

每5分钟构建一次这样就可以 我们编辑完代码 上传svn就会马上发布到测试版

解放Control+c Control+v操作

 

相关文章
|
1月前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
1天前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
115 75
|
24天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
46 9
|
22天前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
39 5
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
1月前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
160 2
|
1月前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
67 6
|
1月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
35 4
|
1月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
55 3
|
1月前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。