传统的软件开发、测试、运维须要三个团队在三个不一样的环境中进行,而三个环境的不一样引起了不少的问题。如:工做内容的重复;开发环境中可运行的程序在测试和运维环境下却未必正常;开发人员提交代码前的测试不充分而引入新的BUG,没有有效的机制进行提交前的充分测试;测试出的BUG由于环境的复杂使得开发人员难以复现等等。html
Docker的出现让一切都不一样以往,Docker能够将系统与应用打包成一个镜像,能够根据Dockerfile和一个简单的构建命令轻易的重现开发和测试的环境。将Docker引入持续集成(Continuous Integration - CI)构建系统中,保证了开发、测试、运维环境的统一。结合Github和Jenkins能够实现自动化测试和自动部署。现已有不少基于Docker容器技术的开发、测试、运维一站式解决方案。Docker相关产品应用的出现使得Docker的使用愈来愈方便。java
持续集成的特色:git
它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;web
须要有专门的集成服务器来执行集成构建;docker
须要有代码托管工具支持;数据库
持续集成的做用:浏览器
保证团队开发人员提交代码的质量,减轻了软件发布时的压力;服务器
持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减小重复过程以节省时间、费用和工做量;架构
开源项目Jenkins是一个基于Java开发的开放易用的持续集成平台,可用于执行和监控重复性的工做:持续的软件版本发布/测试项目;监控外部调用执行的工做。能够方便的安装第三方插件,能够实时监控持续集成过程当中存在的错误,并提供详细的日志文件,还具有提醒功能,还能用图表的形式形象地展现项目构建的趋势和稳定性。其具有如下特色:运维
易安装:仅仅一个 java -jar jenkins.war,从官网下载该文件后,直接运行,无需额外的安装,更无需安装数据库;
易配置:提供友好的GUI配置界面;
变动支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并输出到编译输出信息中;
支持永久连接:用户是经过web来访问Jenkins的,而这些web页面的连接地址都是永久连接地址,所以,你能够在各类文档中直接使用该连接;
集成E-Mail/RSS/IM:当完成一次集成时,可经过这些工具实时告诉你集成结果(据我所知,构建一次集成须要花费必定时间,有了这个功能,你就能够在等待结果过程当中,干别的事情);
JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;
支持分布式构建:Jenkins能够把集成构建等工做分发到多台计算机中完成;
文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使用了哪一个版本的jars文件等构建记录;
支持第三方插件:使得 Jenkins 变得愈来愈强大;
想了解更多详细信息请移步Jenkins官方网站。
BuildPipeline:这是Jenkins的一个插件,它能够将多个须要协同工做的Jenkins任务按照流水线进行排序,将各任务间的关系变为可视化的图表,使得部署流程清晰可见。
经过Docker能够将每个任务模块化,并经过Dockerfile制做有针对性的镜像来运行任务,并能够经过管道获取各任务的执行时间和结果,为产品的成功发布奠基基础。接下来就是根据自身状况合理的利用和调度Docker。
让单元测试运行的更顺畅;
单元测试驱动开发是一个很好的应用程序开发方式,单元测试每每也是和代码一块儿被提交到代码仓库中。可是不少单元测试一般依赖于不少其余服务,而这些服务的标准化配置每每是一个难点,如数据库的搭建、防火墙的配置等。而Docker容器则能够将这些配置一块儿打包到新的镜像中,从而轻松的完成这些测试。
让虚拟机再也不困扰集成测试和功能测试;
为下降成本,过去不少不一样业务的测试会运行在同一个虚拟机中,这样的测试环境并不纯粹。而经过Docker则能够在数秒内部署出一套清洁的测试环境,包括微服务的架构的测试环境,同时这些测试环境是能够共享的。
测试团队和客户无需再配置冗长的配置文件;
一般软件的复杂度越高,其环境配置也就越复杂,传统的测试一般须要先根据用户文档进行环境配置,并且还不必定一次性成功,错误的环境配置也更容易报出Bug。而Docker则能够经过打包镜像保证开发、测试、运维环境的一致性,包括配置文件、路径、权限等。
能够轻易复现Bug场景;
传统开发过程当中,客户的环境每每没法共享给开发团队,致使Bug的复现出现困难,不得不经过客户的log进行分析。而Docker则能够经过镜像马上复现客户的运行场景,更快的定位问题。
Dockerfile能够构建流程清晰可见;
Dockerfile是描述Docker镜像构建步骤的一个文档,从FROM开始,每一步都是以上一步指令产生的镜像为基础,执行当前的命令,而后将执行结束后的整个环境打包成一个新的镜像层并添加到基础镜像以后。以哪一个镜像为基础,又前后对该镜像进行了哪些操做都清晰可见,而镜像的构建又是严格依照该文件描述的步骤进行,因此说,只要Dockerfile相同,依据其所构建的镜像也是相同的,固然,前提条件是你的基础镜像也相同。
成熟的测试套件和工具能够经过镜像共享;
软件厂商发布的测试套件和工具能够直接打包进镜像进行发布。环境的配置直接使用镜像便可,而再也不是根据用户手册进行配置。
Docker的目标:Build,Ship,and Run Any App,Anywhere;即在任何地方构建、部署、运行任何应用程序。
可是Docker依然有它自身的局限性:
由于容器与主机公用内核,因此若是容器须要使用不一样的内核版本,主机内核就须要作同步变动;
不能修改内核参数或自主定制内核;
对内核版本有依赖,Docker一般须要3.10或以上版本的内核;
在容器中加载或卸载内核模块会影响到主机和其余容器;
跨主机通讯能力不足;
没法像qemu同样模拟嵌入式系统运行环境;
虽然某些旧版本内核也能够运行Docker,可是Docker官方对这类内核不提供支持,而这类内核极可能潜在诸多问题。另外,运行Docker对不少内核编译选项有要求,基于旧版本内核的Linux发行版不必定开启了这些编译选项,可能须要用户从新编译内核才能运行。
方法一:直接在主机中配置Jenkins环境;
wget -qO - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add - && echo 'deb http://pkg.jenkins-ci.org/debian binary/' | tee /etc/apt/sources.list.d/jenkins.list && apt-get update && apt-get -y install jenkins
方法二:使用Docker镜像配置Jenkins环境;
# 拉取Jenkins镜像 $ docker pull jenkins && mkdir /opt/jenkins/data # 启动jenkins容器 $ docker run -d --name jenkins-server -p 7780:8080 -p 50000:50000 -v /opt/jenkins/data:/var/jenkins_home -u root --restart always jenkins # 在浏览器中访问容器所在宿主机ip:7780或domainname:7780便可进入Jenkins页面
大多数工具基本都是这两种安装方式。
Gitlab相似于Github,是一个项目管理程序,能够浏览源代码、管理缺陷和注释,不一样的是Github私有项目收费,而Gitlab则是搭建在本身的服务器上的。具体操做请参照Gitlab官方网站。固然你也能够选择Github,不少有名的开源项目都是放在Github上的,你也能够找到更多的帮助和说明文档。
须要的Jenkins控件(系统管理 - 管理插件):
GIT client plugin:1.18.0
GIT plugin:2.4.0
Gitlab Merge Request Builder:1.2.2
GitLab Plugin:1.1.25
SCM API Plugin
若是须要更多的Jenkins控件请点击这里。
接下来须要配置Jenkins的从节点。在从节点主机上安装Java包:
apt-get -y install default-jre
Jenkins主节点是Jenkins Web Server所在的主机,负责测试任务的调度,不负责测试用例的执行。而从节点接受主节点的调度,负责测试用例的执行。
Docker build step plugin:能够添加Docker命令到构建步骤中;
CloudBees Docker Build and Publish plugin:提供经过Dockerfile构建工程的能力并将制做好的镜像发布到Docker仓库中;
Docker Plugin:可使用Docker主机动态分配的容器做为Jenkins的从节点;
Kubernetes Plugin:经过由Kubernetes管理的多个Docker主机系统来动态分配的容器做为Jenkins的从节点;
Docker Commons Plugin:为其余与Docker相关的插件提供API;
参考目录:
《Docker技术入门与实践》(杨保华 戴王剑 曹亚仑)