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

本文采用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操作

jenkins+docker 持续构建非docker in docker jenkins docker svn maven的更多相关文章

  1. jenkins+docker 持续构建非docker in docker

    工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...

  2. Docker-通过docker-maven-plugin插件实现docker镜像构建并自动发布到远程docker服务器

    我们知道,docker能实现应用打包隔离,实现快速部署和迁移.如果我们开发应用使用了spring cloud + spring boot架构,那么,通过docker-maven-plugin实现快速构 ...

  3. jenkins简单持续构建

    一.安装jenkins 二.将需要持续构建的java project打包成jar文件 1.选择导出需要运行的main方法所在java类

  4. 11.实战交付一套dubbo微服务到k8s集群(4)之使用Jenkins进行持续构建交付dubo服务的提供者

    1.登录到jenkins,新建一个项目 2.新建流水线 3.设置保留的天数及份数 4. 添加参数 # 参数 . name: git_repo type: string description: 项目在 ...

  5. 实战交付一套dubbo微服务到k8s集群(5)之使用Jenkins进行持续构建交付dubo服务的提供者

    1.登录到jenkins,新建一个项目 2.新建流水线 3.设置保留的天数及份数 4.添加第一个参数:设置项目的名称 5.添加第二个参数:docker镜像名称 6.添加第三个参数:项目所在的git中央 ...

  6. 搭建Jenkins自动化持续构建和部署系统

    什么是Jenkins? Jenkins是一个持续集成和持续交付的java应用程序,可以处理任何类型的构建或持续集成.集成Jenkins可以用于一些测试和部署技术.简单得说就是一款自动化构建测试和部署的 ...

  7. Docker镜像构建原理解析(不装docker也能构建镜像)

    在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有im ...

  8. gitlab和jenkins做持续集成构建教程

    背景介绍 上一个轮回,我花了三篇文章的时间着重向大家介绍了在条件有限的情况下,如果优雅地进行前端发版和迭代.庆七一,热烈庆祝香港回归,人民生活水平越来越好,昨天上午我自掏腰包买了台服务器,决定由冷兵器 ...

  9. 个人环境搭建——搭建jenkins持续构建集成环境

    ---恢复内容开始--- 搭建jenkins持续构建集成环境  要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK:   第一部分,基本说明:   敏捷(Agile) 在软件工程领域 ...

随机推荐

  1. 不同Activity之间传递线程

    场景:Android由Activiy A创建Activiy B时 ,A创建的线程B中依然需要调用,这时候需要在两个activity之间传递线程的信息. 解决: 方式一:线程自己维护自己的静态句柄(比较 ...

  2. Linux常见命令集锦

    这是平常用到的命令在这里做一下总结: 一.python 类1.pip(已安装)pip用来安装来自PyPI(https://www.python.org/)的python所有的依赖包,并且可以选择安装任 ...

  3. 如何判断Linux 是32位还是64位

    .运行 'uname -m' 命令 上面的命令内涵太多了,可以用这个参数直指人心:'uname -m' . 例如,在我的系统里,它显示了以下信息: $ uname -m i686

  4. jS判断浏览器终端

    在做移动端项目的时候,常常会遇到需要判断页面浏览终端的需求.要想判断是什么浏览器终端,先打印 navigator.userAgent 出来.所以收集了几种比较常用的方法: if(/(iPhone|iP ...

  5. c#中list使用示例

    protected void Page_Load(object sender, EventArgs e) { List<string> studentNames = new List< ...

  6. 数据库表反向生成(一) MyBatis-generator与IDEA的集成

    在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中. 数据库表反向生成,指的是通过数据库如mysql中的库表schema生成dao层读写表的基础代码,包括model ...

  7. 人工智能 tensorflow框架-->简介及安装01

    简介:Tensorflow是google于2015年11月开源的第二代机器学习框架. Tensorflow名字理解:图形边中流动的数据叫张量(Tensor),因此叫Tensorflow 既 张量流动 ...

  8. mysql多实例-主从复制安装

    安装环境:Centos6.5 mysql版本:mysql-5.5.32.tar.gz 一:安装前准备: 1.安装一些依赖库 yum install cmake gcc gcc-c++ ncurses- ...

  9. Sping AOP初级——入门及简单应用

    在上一篇<关于日志打印的几点建议以及非最佳实践>的末尾提到了日志打印更为高级的一种方式——利用Spring AOP.在打印日志时,通常都会在业务逻辑代码中插入日志打印的语句,这实际上是和业 ...

  10. LINUX 笔记-重定向 :<,<<,>,>>

    command>filename  把标准输出重定向到一个新文件中 command>>filename  把标准输出重定向到一个文件中(追加) command 1>filena ...