前言

在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。

本文基于Jenkins+Docker+Git\Svn实现一套CI自动化发布流程,同时支持撤回。

一、发布流程设计

工作流程:

  1. 开发人员提交代码到Git或Svn版本仓库;
  2. Jenkins人工/定时触发项目构建;
  3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
  4. Jenkins在Docker主机创建容器并发布。

二、环境设计

1、服务器部署信息

服务器 主机名 IP 运行服务
jenkins服务器 jenkins 10.0.xxx.100 安装docker、 运行jenkins容器、git客户端、jdk、maven
docker服务器 docker 10.0.xxx.103 安装docker、创建镜像运行java项目:bsm
Git和私有仓库服务器 git_registry 10.0.xxx.104 安装docker、git服务、运行registry私有仓库容器

2、版本信息

名称 版本 软件包 说明
服务器 Centos 7.4 linux系统
docker 17.12.0-ce yum安装 docker引擎服务
jdk 1.8.0_45 jdk-8u45-linux-x64.tar.gz 运行jenkins需要的JDK环境
maven 3.5.0 apache-maven-3.5.0-bin.tar.gz 构建java项目需要的工具
jenkins 最新版本 docker hub下载最新jenkins镜像 持续集成工具
registry 最新版本 docker hub下载最新registry镜像 docker私有仓库

jdk官方下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
maven官方下载地址:https://maven.apache.org/download.cgi
jenkins官方镜像地址:https://hub.docker.com/_/jenkins/
registry官方镜像地址:https://hub.docker.com/_/registry/

3、操作系统信息

  CentOS7.4

三、部署Git或Svn仓库

在【git_registry】主机安装r。

具体方法请参考网上教程

四、部署Jenkins

在【jenkins】主机安装Jenkins。

安装方法请参考:https://www.cnblogs.com/caoweixiong/p/12306340.html

 

五、安装Docker

在【jenkins、docker、git_registry】3台主机安装Docker。

安装方法请参考:https://www.cnblogs.com/caoweixiong/p/12186736.html

六、部署私有镜像仓库

Docker Hub作为Docker默认官方公共镜像;这里搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单。

在【git_registry】主机上搭建私有镜像仓库,具体方法请参考:https://www.cnblogs.com/caoweixiong/p/12197602.html

七、构建Tomcat基础镜像

项目需要使用tomcat,这里使用Dockerfile来制作镜像。

具体方法请参考:https://www.cnblogs.com/caoweixiong/p/12230725.html

八、Jenkins配置全局工具配置

  • 主页面 -> 系统管理 -> 全局工具配置

指定JDK、Git、Maven路径:

如果Jenkins主机没有git命令,需要安装Git:

# yum install git -y

九、Jenkins安装必要插件

  • 主页面 -> 系统管理 ->管理插件:

安装SSH与Git Parameter插件。

插件说明:

  1. SSH:用于SSH远程Docker主机执行Shell命令
  2. Git Parameter:动态获取Git仓库Branch、Tag
  • 配置SSH插件

第一步:先创建一个用于连接Docker主机的凭据。

主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:

第二步:添加SSH远程主机
主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:

十、Jenkins创建项目并发布测试

自己准备1个web项目,我这里的项目名字为bsm,通过svn管理代码。

  • 主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目

注意:如果没有显示“构建一个Maven项目”选项,需要在管理插件里安装“Maven Integration”插件。

  • 设置参数化构建过程:

  • 设置源码管理

注:这里使用svn管理源码

  • 设置maven构建命令选项:

利用pom.xml文件构建项目。

  • 在Jenkins本机,构建镜像并推送到私有镜像仓库:

上述命令说明:

  1. 根据参数 type 来判断是部署还是撤回;
  2. 部署项目:创建Dockerfile文件,使用当前编译序号做为镜像的版本号;
    •   基于私有镜像仓库的 tomcat 镜像;
    •   先删除webapps目录下的war包;
    •   将jenkins编译好的war包,复制到tomcat镜像中的webapps目录下
    •   启动tomcat
  3. 部署项目:构建镜像;
  4. 部署项目:上传镜像到私有仓库;
  5. 部署项目:删除本地镜像;
  6. 撤回项目:什么也不做;
  • 在Jenkins本机,通过SSH远程连接到Docker主机,下载并使用推送的镜像创建容器

上述命令说明:

  1. 根据参数 type 来判断是部署还是撤回;
  2. 部署项目:获取当前编译版本号,从私有镜像仓库下载镜像进行部署;
    •   停止容器;
    •   删除容器;
    •   删除本地历史镜像
    •   启动容器,并暴露端口
  3. 撤回项目:参数【version】为空,默认返回到上一版本;
  4. 撤回项目:参数【version】不为空,撤回到指定版本;
  5. 部署项目:删除本地镜像;
  6. 撤回项目:什么也不做;
  • 选择tag,开始构建:

注:type=deploy,部署项目;type=rollback,撤回项目

十一、验证

浏览器访问bsm项目:http://10.0.xxx.103:8888

参考:

https://blog.51cto.com/lizhenliang/2159817

Docker——Jenkins + Git + Registry构建自动化持续集成环境(CI/CD)的更多相关文章

  1. 用Jenkins构建Django持续集成环境

    用Jenkins构建Django持续集成环境 - V2EX https://www.v2ex.com/t/32054

  2. 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境

    作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  3. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

  4. Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库文件和版本,以 ...

  5. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境

    前言 但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子.假如一个项目,由A.B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端.A和B都习 ...

  6. Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境

    使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一) 2015-01-14 20:28 by 飘扬的红领巾, 4322 阅读, 5 评论, 收藏, 编辑 ...

  7. 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境

    使用jenkins+calabash+cocoapods搭建ios持续集成环境 持续集成 持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义: 持续集成是一种软件开发实践. 在持续集成 ...

  8. jenkins+git+maven搭建自动化部署项目环境

    简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...

  9. ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成

    为什么不用gitlab? 没有采用gitlab,因为gitlab比较吃配置,至少得2核4G的配置.采用go语言开发的gogs来代替,搭建方便(不到10分钟就能安装完成),资源消耗低,功能也比较强大,也 ...

随机推荐

  1. 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...

  2. 201871010129-郑文潇 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh ...

  3. Dynamics CRM安装教程九(续):自建证书的CRM项目客户端设置CRM访问

    配置完IFD之后就可以为客户端电脑配置访问CRM了首先到CA证书服务器中把证书下载下来,打开CA服务器的浏览器,输入地址http://stg-ad/certsrv/ 其中stg-ad是机器名之后点击下 ...

  4. 数栈SQL优化案例:隐式转换

    MySQL是当下最流行的关系型数据库之一,互联网高速发展的今天,MySQL数据库在电商.金融等诸多行业的生产系统中被广泛使用. 在实际的开发运维过程中,想必大家也常常会碰到慢SQL的困扰.一条性能不好 ...

  5. Java中获取类的运行时结构

    获取运行时类的完整结构 通过反射获取运行时类的完整结构 Field(属性).Method(方法).Constructor(构造器).Superclass(父类).Interface(接口).Annot ...

  6. 【Prometheus学习笔记】主机监控 -node_exporter

    Exporter for machine metrics prometheus/node_exporter 安装 Prometheus sudo tar -zxvf prometheus-*.tar. ...

  7. 奇异值分解(SVD)与主成分分析(PCA)

    本文中的内容来自我的笔记.撰写过程中,参考了书籍<统计学习方法(第2版)>和一些网络资料. 第一部分复习一些前置知识,第二部分介绍奇异值分解(SVD),第三部分介绍主成分分析(PCA).以 ...

  8. Insertion Sort and Merge Sort

    Insertion Sort(插入排序) 思路:for 循环遍历数组中的每一个数 用while将每次遍历到的数于左侧的数进行对比,将小的排到左边 void InsertionSort(int*A, i ...

  9. 展开说说,Spring Bean IOC、AOP 循环依赖

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 延迟满足能给你带来什么? 大学有四年时间,但几乎所有人都是临近毕业才发现找一份好工作 ...

  10. wordpress 自定义路由及展示页

    wordpress 自定义路由及展示页 注册domain/test这个路由 wordpress 有重写url的方法,叫 add_rewrite_rule().在function.php中加入如下代码段 ...