paas持续集成
A. Docker崛起,如何对待这个“坏孩子”
不久前,Docker官方公布的数据显示,全球已有46万个应用Docker 化,并且实现两年增长3000%。以Docker为代表的容器技术在发展速度上,业已超过了曾经的虚拟化技术和云计算技术。
或许也正因如此,2015年被称为Docker野蛮扩张的一年,先后通过了OCI和CNCF 两大标准组织的确立,更是在中国引发了如火如荼的Docker 创业之风,出现了阿里百川、网易蜂巢等大批基于Docker的容器云。诞生于2013年的Docker技术,让那些成熟的云计算服务突然显得老迈、迟缓且落伍,而国内外的云计算巨头们又是如何对待这个坏孩子呢?
Docker崛起,或受益于羸弱的传统PaaS服务
有关“PaaS已死”的说法由来已久,既不如IaaS那样灵活自由,又不如SaaS那样可以直接推向消费者。一个似乎可以用来佐证的事实是,DotCloud作为Docker技术的缔造者,在今年年初宣布倒闭,Docker的繁荣间接地导致dotCloud在PaaS平台上的衰败。
PaaS服务的羸弱在一定程度上受限于不成熟的框架和工具,导致有些PaaS解决方案让原来在IaaS上很容易实现的事变得更加复杂。一方面,企业应用环境多样化,单一PaaS平台很难满足企业客户的多样化需求。另一方面,PaaS没有像Openstack类似的标准,市场上的很多PaaS厂商都提供自己的私有API开发接口,并且互不兼容,导致企业在某个PaaS平台上开发的应用,很难移植到另一平台上。对很多工程师和程序员来说,他们更愿意作为PaaS的构建者,而非PaaS的使用者。企业则寄希望于PaaS来消除技术“周边环境”的不利因素,让开发者有更多的精力专注于开发。这种需求和初衷的不相符,尽管让传统 PaaS厂商在2015年依旧取得了不菲的成绩,但容器技术的热火朝天,或多或少反衬出了传统 PaaS提供商的些许落寞。
而被翻译成“码头集装箱”的Docker服务,允许开发者在Docker环境下,按一定的打包标准生产程序,生产出来的标准化程序被装进标准化的容器(Container)里。这便保证了开发环境、测试环境、生产环境的一致性。此外Docker还具有资源隔离的特点,不同来源、不同种类的容器内放着运行应用所需的完整用户环境空间,比如程序、组件、运行环境等,对某一容器的改动不会影响其他容器。而且,相比于传统的虚拟机,Docker的启动和部署非常快,具有轻量化的优势。
于是乎,Docker作为开源届的绝对“网红”,很多 PaaS 和 IaaS 厂商在2015年甚至更早开始宣布支持 Docker,包括Deis、Flynn、Tsuru、Dawn和Octohost等行业新贵,以及Cloud Foundry和OpenShift等第二代PaaS主力。
主角还是配角,愈演愈烈的云容器之争
Synergy Research最近发布的一项报告显示,2016年第一季度全球云服务市场收入达到70亿美元,但AWS、微软、IBM和谷歌依旧是市场的垄断者,AWS虏获了31%的云服务市场,微软、IBM和谷歌则分食了22%的市场份额。此外在市场增长率上,四大巨头也远超其他云服务玩家,特别是微软和谷歌的市场增幅均超过了100%。
相比于四大巨头在IaaS和PaaS服务上的跑马圈地,Docker作为新兴的服务模式,被云服务领域的追赶着和创业者视为“颠覆”云计算格局的机遇,至少在造势营销上是这样。各云计算巨头和明星玩家对容器似乎都展示出了欢迎的态度,可Docker是主角还是配角,中美的互联网玩家们却给出了不同的答案。
从美国的云计算圈来看,不少云计算创业者成了Docker的忠实拥趸,这在前面已经有所举例,但云计算巨头们却有着各自的衡量。
2015年,Google 和 RedHat 联盟以 Kubernetes 1.0 为阵地宣告了大规模容器编排与管理领域的领主地位。不久后,微软、IBM、VMware、Docker、CoreOS以及SaltStack等多家公司纷纷加入了Kubernetes社区,业已成为当下最受欢迎的容器集群管理系统。
自从2014年6月份起,微软已经允许用户在Azure的Linux上运行Docker应用程序。不久前Docker官方对外宣布面向微软Azure、AWS、Windows 10和 Mac全面推出新的Docker测试版。近日更是传出了微软试图40亿美金收购Docker的消息。
事实上,亚马逊、思科、Vmware等也都宣布支持Docker。不过在这些云计算巨头的眼中,Docker不过是一个容器引擎,当CoreOS如谷歌分道扬镳推出名为Rocket的容器引擎后,谷歌照旧向其抛出了橄榄枝。未来或许还会出现其他Docker的竞争对手或取代者,而Docker们不过是云计算巨头们维持市场地位的行业工具,远未成为影响云计算现有格局的关键力量,至少在市场份额上,容器在未来很长一段时间内还不能和IaaS服务相提并论。
相比之下,以 Docker 为主的容器技术在国内的发展势头要更为凶猛,不仅吸引了阿里、腾讯、网易、新浪等互联网巨头,一些在亚马逊、谷歌、Vmware有过工作经验的工程师也纷纷投入的容器云创业的大潮中来。综合来看,国内云计算厂商在容器云上的布局可以细分为三种形态:
其一,阿里、华为等IaaS领域的行业先驱。以Docker为代表的容器服务在2015年势如野火,被它吸引了不只是创业者,还有在IaaS领域的诸多云计算厂商,阿里和华为就是两个典型的例子。先是阿里百川在TAE的基础上使用了Docker技术,随后阿里云也推出了基于Docker的容器服务。华为则在去年12月推出了基于Kubernetes和Docker技术打造的CCE容器云。不过,这类厂商的主要业务仍集中在IaaS领域,也多把容器云归为新型PaaS服务。对于瞬息万变的云服务市场,即便是行业巨头也不愿错过任何一个机会。
其二,网易、新浪等踏入云服务市场的第二梯队。对于网易、新浪等具有十多年研发运营经验的老牌互联网企业,在云计算的萌芽期便成为云服务的使用者和推动者,但在近两年才完成了私有云到公有云的过渡,而容器云就是其所青睐的云服务之一。以网易蜂巢为例,这一基于Kubernetes容器集群管理技术打造的容器云,在2015年上线后便成受到市场追捧。原因似乎不难理解,这些企业本身就是容器云的重度使用者,并拥有自研IaaS等优势资源做支撑。而从另一方面来看,相比于竞争已经十分激烈的IaaS,容器云被这类企业进军云计算基础设施服务的一条绿色通道。
其三、时速云、灵雀云等Docker红利下的创业者。用“Docker红利下的创业者”来形容这些厂商似乎并不为过,正如前面所说不少有国外云计算公司从业背景的工程师们看到Docker的崛起后纷纷回国创业,并一度成为国内容器云行业的主流。尽管容器服务的用户规模和客单价远不及IaaS,但在针对当前IT系统的资源管理复杂、运维成本高、产品迭代效率差、微服务架构实施困难等问题上似乎是不错的解决方案。或许也正因如此,资本依旧对这些容器云领域的创业者纷纷报以厚爱。
此外,不少厂商以CaaS(容器即服务而非通讯即服务)来形容容器云,并被誉为下一代云计算。可就目前来看,Docker的处境似乎并不十分乐观,至少在国内面临着如何落地的考验。
下一代云计算?Docker该如何落地
前两年火爆的是Openstack,近两年受宠的当属Docker,融资、并购、发布会、行业峰会,从云服务厂商到媒体无不对Docker表现出了近似膨胀的热情。然而,在高歌Docker和容器云一系列优点的同时,却鲜有人谈及落地的问题。
一般来说,很多企业尤其是中小企业,所需要的不是如何将Docker或其他容器技术移植到公有云或私有云上,而是看到了容器云的微服务化、运维流程的标准化、持续集成部署的自动化等特点,希望通过容器云服务来降低产品研发成本,并最大程度的降低系统风险等。事实上,这类企业也正是网易蜂巢、时速云等容器云产品的目标用户。没有人知道这个市场到底有多大,围绕Docker开展创新服务的公司却开始“你方唱罢我登场”。这便注定容器云市场在未来将迎来一场恶战,目前似乎已经有所端倪。
就目前而言,不管是阿里、腾讯等云计算巨头还是诸多的创业者,在容器云的技术方面并没有拉开太大的距离,无非是稳定性和易用性方面的些许差别。由此便导致,当前容器云市场呈现出拼价格、拼渠道以及拼运营的姿态。可以预见,在不远的将来,容器云市场势必会迎来一场淘汰赛,而能够解决Docker落地的云服务厂商才会是最后的赢家。
不管怎样,Docker 已经成为云服务市场一枚极具意义的战略性棋子,无论是在服务层面还是系统层面,云计算的未来似乎已经被Docker这个坏孩子占据了一席之地。
B. “Docker容器技术”与“虚拟化技术”的区别是什么
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
在docker的网站上提到了docker的典型场景:
Automating the packaging and deployment of applications
Creation of lightweight, private PAAS environments
Automated testing and continuous integration/deployment
Deploying and scaling web apps, databases and backend services
由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。
构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为 on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础
因为其标准化构建方法(buildfile)和良好的REST API,自动测试和持续集成/部署能够很好的集成进来
因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源
虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。
虚拟化,原本是指资源的抽象化,也就是单一物理资源的多个逻辑表示,或者多个物理资源的单一逻辑表示。具体到服务器虚拟化,就是多个物理资源的单一逻辑表示。
虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。
C. docker的优秀性能有哪些
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。
构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为 on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础
因为其标准化构建方法(buildfile)和良好的REST API,自动化测试和持续集成/部署能够很好的集成进来
因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源
局限
D. 国内paas产品都什么可以推荐的
华胜天成-天成云paas平台就不错
在云计算大环境的影响下,华胜天成已经专在北京成立了PaaS平台研发属中心,现在在为中国移动研发专业的paas平台。不仅可以在内万众搭建页面出题服务器,还结合现有的手机接入平台的技术优势,结合云计算相关技术,建设一套依托现有手机接入平台的核心技术,其特点是:
1、通过业务运维管理平台(BOP),快速定制企业用户的端到端业务流程,更加贴近各个企业用户自身的业务特色;
2、将原先独立维护、各自为政的应用作为应用构件,整合为一个完整的企业信息架构,并在真实的业务流程中加以调用,大大简化维护负担、提升企业用户的使用体验;
3、利用BOP业务运营平台的SOA架构,根据各个企业用户自身的要求,灵活取用丰富的基础信息系统(如CRM、ERP、财务管理,OA等专项业务系统)中的功能,为企业构建符合其自身需求的IT架构。
E. 为什么Docker没有在生产环境取得广泛成功
Docker已经可以复用于生产环境,PaaS建设制、定义数据中心、容器即服务、持续集成和发布这些都是使用场景。Docker技术需要和IaaS管理、开发工具、网络和存储进行集成,国内传统对它的认知在不断加深,越来越多的开始内部自研尝试容器技术。
F. docker和virtualenv有什么区别
本质是一样的,virtualenv虚拟python运行环境,保证系统python环境的整洁,docker也是一样,只是它虚拟的是回系统运行环境。docker的用答途更广,因为它虚拟的是操作系统。你可以在docker虚拟的操作系统里面使用virtualenv,但通常没这个必要。
docker通常和KVM, Xen等虚拟化技术比较。
望采纳
G. 容器云构建环境如何解决持续集成,安全
市面上已有很多开源持续集成工具,例如我们熟悉的Jenkins,还有TeamCity、Travis CI、GO CD、Bamboo、Gitlab CI、CircleCI……等等内等等。
开源PaaS Rainbond也支持持容续集成,提供可扩展的CI/CD,支持Java、PHP、Python、Ruby、Node.js、Golang、Scala等源代码构建,支持代码滚动上线、一键回滚、灰度发布、AB测试,可对接Jenkins等第三方CI/CD。
H. paas是什么
PaaS[1],全称:(Platform as a service) ,中文:平台即服务。
实例:CloudCC
PaaS的优势(1张)
所谓PaaS实际上是指将软件研发的平台(计世资讯定义为业务基础平台)作为一种服务,以SaaS的模式提交给用户。因此,PaaS也是SaaS模式的一种应用。但是,PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。在2007年国内外SaaS厂商先后推出自己的PAAS平台。
PaaS之所以能够推进SaaS的发展,主要在于它能够提供企业进行定制化研发的中间件平台,同时涵盖数据库和应用服务器等。PaaS可以提高在Web平台上利用的资源数量。例如,可通过远程Web服务使用数据即服务(Data-as-a-Service:数据即服务),还可以使用可视化的API,甚至像800app的PaaS平台还允许你混合并匹配适合你应用的其他平台。用户或者厂商基于PaaS平台可以快速开发自己所需要的应用和产品。同时,PaaS平台开发的应用能更好地搭建基于SOA架构的企业应用。
此外,PaaS对于SaaS运营商来说,可以帮助他进行产品多元化和产品定制化。例如Salesforce的PaaS平台让更多的ISV成为其平台的客户,从而开发出基于他们平台的多种SaaS应用,使其成为多元化软件服务供货商(Multi Application Vendor),而不再只是一家CRM随选服务提供商。而国内的SaaS厂商800app通过PaaS平台,改变了仅是CRM供应商的市场定位,实现了 BTO(Built to order:按订单生产),和在线交付流程。使用800app的PAAS开发平台,用户不再需要任何编程即可开发包括CRM、OA、HR、SCM、进销存管理等任何企业管理软件,而且不需要使用其他软件开发工具并立即在线运行。
面向个人的EC站点(electronic commerce site)的巨头公司Amazon,把最初为了自己公司的运营用的构筑起来的系统平台,进行出租,用户可以自由选择操作系统和中间软件,以这样的方式提供硬件以及软件平台作为服务,最初被海外以一些冒险事业的企业所使用。从2006年开始 [Amazon EC] [Amazon S3]开始作为服务推向市场。
还有现代软件业霸主同时又是次时代计算的先驱的Google,大家都知道在世界上构筑以及运行了非常多的数据中心。以搜索引擎以及新的广告模式而闻名。他们使用便宜的计算机和强有力的中间件,以及自己的技术装备出了世界上最强大的数据中心,以及超高性能的并行计算群。 2008年4月发表的PaaS服务[Google App Engine]和Amazon 的 EC2,S3,SimpleDB等服务拥有相似的功能。这些稳定的平台上同样搜索引擎,GMail等服务也在运行。同样以ASP~SaaS成功的Salesforce,2007年开始用于提供SaaS的系统基盘对外公开,用Force这个名称开始进入PaaS业务。他所提供的PaaS服务里采用Java类似的语言Apex以及Eclipse开发平台,整合的开发环境也作为服务进行提供(Development as a Service)。Google/Amazon/Salesforce这三个软件巨头非常的重视PaaS这种新的商业模式,Amazon的PaaS服务为了用户可以自由的组合服务提供了更多的自由度,Google的话提供了更多的服务使用户能够方便的使用,去掉了一些繁琐的作业。Google/Salesforce的PaaS不仅是基础硬件的提供开发环境的同样被提供属于真正的平台作为一种服务(PaaS)
I. 如何自动化nginx负载 多个docker
Docker介绍Docker号称是下一代的虚拟机,它在启动和创建速度、性能、移植性等方面均优于传统虚拟机。Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎。它能够让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。目前,通过Boot2Docker已能使Docker运行在Windows和OSX中。Docker容器完全使用沙箱机制,相互之间没有任何接口。Docker几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或系统。Docker在其网站上明确地提到的Docker的典型应用场景如下:对应用进行自动打包和部署创建轻量、私有的PAAS环境自动化测试和持续整合与部署部署和扩展Web应用、数据库和后端服务在自动化测试领域,Docker大有取代传统虚拟机技术的趋势,原因如下:自动化测试依赖的是测试所需要的应用,而并非整个操作系统。因此,传统的虚拟机技术存在资源浪费。Docker构建于LXC之上。借助LXC轻量级的特性,相比于目前的虚拟机技术,Docker启动更快、资源占用更小。Docker比虚拟机轻量、灵活,便于管理。Docker标准化的构建方法(Dockerfile)和良好的RESTAPI,使得自动测试和持续集成/部署能够很好的集成进来。回页首Sahi介绍Sahi是一个开源的WebUI自动化测试框架。尽管它的知名度不及Selenium,用户群也不及Selenium庞大,但它确有它独特的魅力,例如:基于上下文的页面元素识别机制。隐式页面加载响应等待机制。良好的浏览器支持。优秀的跨浏览器录制回放调试工具SahiController。这些特性都大大地加快了自动化测试脚本的开发速度,并降低了维护成本。Sahi通过一个用Java编写的代理服务器,将用户的脚本转换为JavaScript后注入往返的HTTP请求及响应中,从而驱动浏览器事件。编程语言方面,除Sahi脚本(其本质是一个JavaScript库)以外,还支持Java和Ruby。Sahi有开源和收费两个版本。虽然收费版本提供了很多开源版本不具备的高级特性,不过开源版本已经能够满足大部分的功能要求。点此查看开源版本与收费版本的差异。点此查看Sahi与其他Web自动化测试框架的对比。回页首Jenkins介绍Jenkins是一种开源的基于Java开发的持续集成工具,前身称作Hudson。Jenkins提供了用于监控持续重复工作的软件平台。它支持丰富的插件,用户可以按照需求进行选择安装和配置,以实现生成执行状态表格,自动部署、更新自动化测试包等高级功能。本文将要介绍Jenkins的Docker插件,它能够动态地创建Docker容器作为JenkinsSlave节点,并在执行任务后,自动关闭容器。另外,它还支持一些额外功能,比如当构建任务成功完成后自动将容器保存为镜像、自动将镜像上传到资源库等。回页首实例演示该实例演示如何制作一个运行Sahi的镜像以及如何在Jenkins上配置Docker插件以运行Sahi测试脚本。准备Docker镜像本实例需要准备三个镜像:一个运行Jenkins,一个运行Subversion,另外一个运行Sahi。首先,制作运行Sahi的镜像。DockerHub是一个用于分享Docker镜像的资源库。目前,该资源库还没有运行Sahi的镜像,所以必须自己创建Dockerfile来构建镜像。下图是用来制作Sahi镜像的目录。图1.制作Sahi镜像的目录下图是Dockerfile的文件内容。图2.Dockerfile文件内容整个过程大体分为八个步骤:指定基础镜像我们使用的是evarga/jenkins-slave。该镜像基于Ubuntu,安装了SSH服务,并创建了用户Jenkins。替换系统默认更新源。把系统更新源替换为163的,后面的软件安装速度会比较快一些。安装必要的软件(不包括OracleJava和Sahi):Firefox,Unzip以及Xvfb。删除OpenJDK是为了后面安装OracleJava做准备。Firefox不用多说,因为该镜像用于WebUI自动化测试,所以安装了最新版本的Firefox。安装Unzip是因为后面安装Sahi需要用到它。Xvfb(Xvirtualframebuffer)是一个X11显示服务器的实现。它不是将图形在屏幕上显示出来,而是在内存中运行所有的图形操作。对客户端来说,除了无法看到真正的图形显示,没有其他分别。一般称这种运行方式为headless。安装OracleJava8。理论上Sahi应当也支持OpenJDK,所以安装OracleJava不是必须的。安装Sahi。上传了zip文件后,用Unzip解压,Sahi是基于Java的,所以解压后即已安装好Sahi。之后,替换了几个文件,它们的作用如下:Userdata.propertiesuserdata.properties中有个属性叫proxy_alert.disabled,默认值为false。用户第一次启动SahiDashboard的时候,会弹出一个如下图所示的对话框。用户勾选了“Donoshowthismessageagain”并点击Continue按钮之后,Sahi修改该属性值为true。之后就不会在跳出这个对话框了。由于用headless的方式运行Sahi无法点击该对话框,所以必须事先用一个已将该属性设置为true的文件替换Sahi默认的userdata.properties。图3.Sahi代理问题对话框sahi_example_com这是一个证书文件。用户第一次在SahiDashboard中打开Firefox时的页面如下图所示。用户需要点击SSLManager链接手动接受SSL证书。此时,文件sahi_example_com被生成到userdata/certs目录下。之后,就不需要再进行该操作了。所以,复制的sahi_example_com目的也是为了自动完成这步需要在图形界面下才能完成的操作。图4.Sahi启动页图5.SSLManager的非信任连接页面browser_types.xml替换该文件是为了使Sahi以headless的方式工作。在该文件中,事先添加了一个名字为firefox-xvfb的浏览器配置信息。之后,测试脚本就可以指向该浏览器运行。具体配置Sahi和Xvfb的步骤参考。添加init.sh文件init.sh文件用于启动Xvfb和Sahi。其内容如下。图6.init.sh文件内容“sleep5”是因为Sahi启动需要一点时间,若立即运行测试脚本会导致失败。修改权限最终运行的容器是作为JenkinsSlave节点用Jenkins用户运行,因此将整个/usr/local目录及子目录的所有人修改为Jenkins,并给Shell文件添加执行权限。Jenkins用户是在基础镜像evarga/jenkins-slave中创建的,所以在这个Dockerfile里没有创建Jenkins用户的语句。指定默认执行的命令CMD["/usr/sbin/sshd","-D"]–该语句令镜像默认启动SSH服务。事实上,这条语句也可以不添加,因为evarga/jenkins-slave的Dockerfile中已包含该语句。一切就绪之后,在该目录中执行“dockerbuild-tshenrui/sahi–rm=true”。命令成功执行后,通过“dockerimages”应当可以查看到名为“shenrui/sahi”的镜像。该镜像已经上传到DockerHub,有需要的读者可以自行拉取。Sahi镜像构建好之后,接下来准备Jenkins容器。DockerHub上已有官方的Jenkins镜像,直接用命令“dockerpulljenkins”拉取。在Docker主机上,创建一个目录(例如,/data/jenkins_home),并修改权限(chmod777)以便Jenkins容器能读写该目录,然后用命令“dockerrun-d-t--namemyjenkins-p8080:8080-v/data/jenkins_home:/var/jenkins_homejenkins”启动。此时,打开mitmysvn”把上面所做的修改保存下来创建一个新镜像mysvn。最后,用命令“dockerrun-t-d-p3690:3690--namemysvnmysvnsvnserve-d--foreground-r/var/svn/repos”启动mysvn容器。启动时,添加容器到主机的端口映射“-p3690:3690”以便之后直接通过主机IP提交测试脚本。至此,Docker上有两个正在运行的容器(dockerps),名字分别是myjenkins和mysvn。
J. 如何使用docker+jenkins实现自动化集成
Docker 介绍
Docker
号称是下一代的虚拟机,它在启动和创建速度、性能、移植性等方面均优于传统虚拟机。Docker 是 PaaS 提供商 dotCloud
开源的一个基于 LXC 的高级容器引擎。它能够让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux
机器上,也可以实现虚拟化。目前,通过 Boot2Docker 已能使 Docker 运行在 Windows 和 OS X 中。Docker
容器完全使用沙箱机制,相互之间没有任何接口。Docker 几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,
他们不依赖于任何语言、框架或系统。
Docker 在其网站上明确地提到的 Docker 的典型应用场景如下:
对应用进行自动打包和部署
创建轻量、私有的 PAAS 环境
自动化测试和持续整合与部署
部署和扩展 Web 应用、数据库和后端服务
在自动化测试领域,Docker 大有取代传统虚拟机技术的趋势,原因如下:
自动化测试依赖的是测试所需要的应用,而并非整个操作系统。因此,传统的虚拟机技术存在资源浪费。
Docker 构建于 LXC 之上。借助 LXC 轻量级的特性,相比于目前的虚拟机技术,Docker 启动更快、资源占用更小。
Docker 比虚拟机轻量、灵活,便于管理。
Docker 标准化的构建方法 (Dockerfile) 和良好的 REST API,使得自动测试和持续集成/部署能够很好的集成进来。
回页首
Sahi 介绍
Sahi 是一个开源的 Web UI 自动化测试框架。尽管它的知名度不及 Selenium,用户群也不及 Selenium 庞大,但它确有它独特的魅力,例如:
基于上下文的页面元素识别机制。
隐式页面加载响应等待机制。
良好的浏览器支持。
优秀的跨浏览器录制回放调试工具 Sahi Controller。
这些特性都大大地加快了自动化测试脚本的开发速度,并降低了维护成本。
Sahi
通过一个用 Java 编写的代理服务器,将用户的脚本转换为 JavaScript 后注入往返的 HTTP
请求及响应中,从而驱动浏览器事件。编程语言方面,除 Sahi 脚本(其本质是一个 JavaScript 库)以外,还支持 Java 和
Ruby。Sahi 有开源和收费两个版本。虽然收费版本提供了很多开源版本不具备的高级特性,不过开源版本已经能够满足大部分的功能要求。点此查看开源版本与收费版本的差异。点此查看Sahi 与其他 Web 自动化测试框架的对比。
回页首
Jenkins 介绍
Jenkins
是一种开源的基于 Java 开发的持续集成工具,前身称作 Hudson。Jenkins
提供了用于监控持续重复工作的软件平台。它支持丰富的插件,用户可以按照需求进行选择安装和配置,以实现生成执行状态表格,自动部署、更新自动化测试包等
高级功能。本文将要介绍 Jenkins 的 Docker 插件,它能够动态地创建 Docker 容器作为 Jenkins Slave
节点,并在执行任务后,自动关闭容器。另外,它还支持一些额外功能,比如当构建任务成功完成后自动将容器保存为镜像、自动将镜像上传到资源库等。
回页首
实例演示
该实例演示如何制作一个运行 Sahi 的镜像以及如何在 Jenkins 上配置 Docker 插件以运行 Sahi 测试脚本。
准备 Docker 镜像
本实例需要准备三个镜像:一个运行 Jenkins,一个运行 Subversion,另外一个运行 Sahi。
首先,制作运行 Sahi 的镜像。Docker Hub 是一个用于分享 Docker 镜像的资源库。目前,该资源库还没有运行 Sahi 的镜像,所以必须自己创建 Dockerfile 来构建镜像。下图是用来制作 Sahi 镜像的目录。
图 1. 制作 Sahi 镜像的目录
下图是 Dockerfile 的文件内容。
图 2. Dockerfile文件内容
整个过程大体分为八个步骤:
指定基础镜像
我们使用的是 evarga/jenkins-slave。该镜像基于 Ubuntu,安装了 SSH 服务,并创建了用户 Jenkins。
替换系统默认更新源。把系统更新源替换为 163 的,后面的软件安装速度会比较快一些。
安装必要的软件(不包括 Oracle Java 和
Sahi):Firefox, Unzip 以及 Xvfb。删除 Open JDK 是为了后面安装 Oracle Java 做准备。Firefox
不用多说,因为该镜像用于 Web UI 自动化测试,所以安装了最新版本的 Firefox。安装 Unzip 是因为后面安装 Sahi
需要用到它。Xvfb(X virtual framebuffer)是一个 X11
显示服务器的实现。它不是将图形在屏幕上显示出来,而是在内存中运行所有的图形操作。对客户端来说,除了无法看到真正的图形显示,没有其他分别。一般称这
种运行方式为 headless。
安装 Oracle Java 8。理论上 Sahi 应当也支持 Open JDK,所以安装 Oracle Java 不是必须的。
安装 Sahi。上传了 zip 文件后,用 Unzip 解压,Sahi 是基于 Java 的,所以解压后即已安装好 Sahi。之后,替换了几个文件,它们的作用如下:
Userdata.properties
userdata.properties 中有个属性叫
proxy_alert.disabled,默认值为 false。用户第一次启动 Sahi Dashboard
的时候,会弹出一个如下图所示的对话框。用户勾选了“Do no show this message again”并点击 Continue
按钮之后,Sahi 修改该属性值为 true。之后就不会在跳出这个对话框了。由于用 headless 的方式运行 Sahi
无法点击该对话框,所以必须事先用一个已将该属性设置为 true 的文件替换 Sahi 默认的 userdata.properties。
图 3. Sahi 代理问题对话框
sahi_example_com
这是一个证书文件。用户第一次在 Sahi Dashboard
中打开 Firefox 时的页面如下图所示。用户需要点击 SSL Manager 链接手动接受 SSL 证书。此时,文件
sahi_example_com 被生成到 userdata/certs 目录下。之后,就不需要再进行该操作了。所以,复制的
sahi_example_com 目的也是为了自动完成这步需要在图形界面下才能完成的操作。
图 4. Sahi 启动页
图 5. SSLManager 的非信任连接页面
browser_types.xml
替换该文件是为了使 Sahi 以 headless
的方式工作。在该文件中,事先添加了一个名字为 firefox-xvfb 的浏览器配置信息。之后,测试脚本就可以指向该浏览器运行。具体配置 Sahi 和 Xvfb 的步骤参考。
添加 init.sh 文件
init.sh 文件用于启动 Xvfb 和 Sahi。其内容如下。
图 6. init.sh 文件内容
“sleep 5”是因为 Sahi 启动需要一点时间,若立即运行测试脚本会导致失败。
修改权限
最终运行的容器是作为 Jenkins Slave 节点用
Jenkins 用户运行,因此将整个/usr/local 目录及子目录的所有人修改为 Jenkins,并给 Shell
文件添加执行权限。Jenkins 用户是在基础镜像 evarga/jenkins-slave 中创建的,所以在这个 Dockerfile
里没有创建 Jenkins 用户的语句。
指定默认执行的命令
CMD ["/usr/sbin/sshd","-D"] – 该语句令镜像默认启动 SSH 服务。事实上,这条语句也可以不添加,因为 evarga/jenkins-slave 的 Dockerfile 中已包含该语句。
一
切就绪之后,在该目录中执行“docker build -t shenrui/sahi –rm=true”。命令成功执行后,通过“docker
images”应当可以查看到名为“shenrui/sahi”的镜像。该镜像已经上传到 Docker Hub,有需要的读者可以自行拉取。
Sahi
镜像构建好之后,接下来准备 Jenkins 容器。Docker Hub 上已有官方的 Jenkins 镜像,直接用命令“docker pull
jenkins”拉取。在 Docker 主机上,创建一个目录(例如,/data/jenkins_home),并修改权限(chmod
777)以便 Jenkins 容器能读写该目录,然后用命令“docker run -d -t --name myjenkins -p
8080:8080 -v /data/jenkins_home:/var/jenkins_home jenkins”启动。此时,打开
http://<Docker Host IP>:8080 应当可以看到 Jenkins 的管理页面。
同样地,直接拉取 Docker Hub 的 Subversion
的镜像(docker pull bsboiko/subversion)。不过,还需要做进一步的配置。步骤如下:
用命令“docker run -i -t bsboiko/subversion /bin/bash”以交互的方式启动 Subversion 容器。
在容器中创建目录 /var/svn/repos(mkdir -p
/var/svn/repos),并基于该目录创建 Subversion 资源库(svnadmin create
/var/svn/repos)。
在资源库目录下的 svnserve.conf
文件中删除“password-db = passwd”前面的注释符 #,并在 passwd 文件中添加一行“shenrui =
password”。
用命令“docker commit <container id> mysvn”把上面所做的修改保存下来创建一个新镜像 mysvn。
最后,用命令“docker run -t -d -p
3690:3690 --name mysvn mysvn svnserve -d --foreground -r
/var/svn/repos”启动 mysvn 容器。启动时,添加容器到主机的端口映射“-p 3690:3690”以便之后直接通过主机 IP
提交测试脚本。
至此,Docker 上有两个正在运行的容器(docker ps),名字分别是 myjenkins 和 mysvn。