jenkins自动化部署 jenkins发布过程中有哪些问题

题图来自儿子拼的积木安装插件: 使用MSBuild来构建.NET工程;系统设置中设置git路径确保机器上msbuild的路径在系统path环境变量中,例如C:\Windows\Microsoft.NET\Framework\v4.0.30319MSBuild Build File直接使用.net项目里的.sln文件即可。xcopy实现从jenkins编译后的地方拷贝到程序部署位置,/S表示复制目录和子目录,/y表示直接覆盖目标文件,不再提示是否覆盖, /d表示只复制那些源时间比目标时间新的文件。也可以远程拷贝,在命令中输入cmd /c call C:\send.batsend.bat的内容如下:net use \\10.168.*.*\C$ password /user:administratorxcopy c:\send_Release\*.* \\10.168.*.*\C$\www /e/k/h/y/d要屌不能丝(diaonotsi) 
 文章为作者独立观点,不代表微头条立场
的最新文章
题图来自儿子拼的积木有时,不想让图片在ueditor中上传时压缩的厉害,导致上传上去的图片看不清。打开文件u题图来自儿子拼的积木后台启动kibana(加上&) kibana-4.5.2-linux-x64/bin/k最近在搭建ELK平台,kibana是用tar包直接解压缩使用的方式安装的。但是安装完成后遇到一个问题就是如何搭建Logstash是任何一个SA都要做的事情。写一个简单的博客存下来为了下次好重新搭建。当然基础的下载和配题图来自儿子拼的积木本周的工作计划是调研并测试ELK,那什么是ELK呢?简而言之就是开源的主流的日志收集与分zf2框架的php程序,nginx下运行提示404 not found
ElasticSearch 安装ElasticSearch版本与Kibana版本是有关联关系的,否则二者配合题图来自儿子拼的积木
我们知道,在一些主流的浏览器中按F12,就会拉出一个查看web
访问详细信题图来自儿子拼的积木在使用nginx的过程中总是会碰到nginx提示50*错误,可是具体错误在哪里出的就需要题图来自儿子拼的积木tomcat对每个请求的超时时间是通过connectionTimeout参数设置的。默认日志为AlloVince原创。版权采用『
知识共享署名-非商业性使用 2.5 许可协议』进行许可。之前一直题图来自儿子拼的积木安装插件MSBuild Plugin: 使用MSBuild来构建.NET工程;系统设置中题图来自儿子拼的积木Jenkins除了开源和免费,还有一个最吸引人的功能之一就是支持插件。Jenkins不光题图来自儿子拼的积木nginx + tomcat 架构的 Web 服务中,用户感觉响应很慢,如何排查呢?可以题图来自儿子拼的积木这是持续集成系列的下半部分,如果你还没看过上半部分的话,请点击这里:用MSBuild和J题图来自儿子拼的积木查看日志tail /var/log/nginx/error.log,提示“primary系统管理员的日常工作之一就是升级服务,为服务打上补丁包或升级一些花哨的功能。2013年初,最新的 MySQL题图来自儿子游玩时在ubuntu下,开机后会自动执行/etc/init.d/rc.local中的命令,平时启题图来自儿子游玩时拼的积木阿里云服务器php composer安装提示超时等失败信息时可以使用国内镜像修改 vsftpd是centos下最常用的ftp软件,下面是一些使用总结。1. 常用配置如果是使用yum方式安装的是防火墙的问题,我们不能关闭或清空防火墙,通过添加规则即可安装memcached后执行 iptables -安装memcached后执行 iptables -A INPUT-m state --state NEW -解决方法:
增加http post缓存, 如果使用git命令,设置参数命令如下:#增加为 500MB
gitios程序中不识别读取到的JSON数据中 \u开头的数据。PHP 生成JSON的时候,必须将汉字不转义为 \修改/etc/apache2/apache2.conf
O苹果app开发好后,放到公司网站以供下载,结果需要利用 itms-services 协议,需要开通HTTPSdiaonotsi记录一个IT人的心路历程热门文章最新文章diaonotsi记录一个IT人的心路历程SVN培训及Jenkins自动化发布平台介绍_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SVN培训及Jenkins自动化发布平台介绍
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩43页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢查看: 6304|回复: 4
集成 Jenkins 和 TestNG 实现自助式自动化测试平台
论坛徽章:349
在软件业十分成熟的今天,敏捷(Agile)开发在业界日益流行,而面临的挑战也日益增多,不断变化的用户需求、缩短的开发周期、频繁的部署上线、复杂的产品架构和团队组织,如何继续保证软件的质量是一个不能回避的课题。
许多企业级规模的项目常常按照功能模块将庞大的团队分为多个独立的 Scrum 团队。在这种情况下,每个 Scrum 团队各自负责其所属功能模块的开发和测试。在 Scrum 团队中各种角色在不同的时间点有针对性不同的测试需求。其次,Build 部署以及测试频率大幅增加。测试类型和阶段也更加细化。
而现有的自动化测试,常常由独立的自动化测试团队来执行和维护。其他的 Scrum 团队成员除非十分了解自动化测试包的细节,否则无法按照自身多类型的测试需求来执行自动化脚本。并且有些项目自动化测试包涵盖了成百上千的测试用例,仅仅因为需要验证某个模块或某几个功能点是否成功而执行整个测试包不仅费时且没有必要。
本文针对以上涉及的问题,提出以下的解决方案:利用 Jenkins 和 TestNG 搭建“自助式”自动化测试平台,充分利用了 Jenkins 成熟的平台及其插件, 以及 TestNG 对选择测试用例的内在支持。
该平台具有以下优点:
基于成熟的测试工具。Jenkins 是目前业内最流行的快速持续集成工具之一, 其稳定的性能和丰富的扩展性, 使得很多的团队都优先选择它作为项目的主要支持工具。TestNG 作为一款强大的 Java 测试框架,其在 Junit,NUnit 的基础上做了广泛的增强,从单元测试、功能测试到集成测试,都能提供良好的支持。这两个工具一方面功能稳定,有大量的实际使用案例和文档支持,另一方面由于其属于主流工具,很多团队已经有过相应的经验,可以大大缩短学习曲线和成本。
灵活地定制自动化测试。团队成员通过登陆平台 Web 界面,按照需求任意选择部署在平台上的自动化测试包,目标测试环境,测试集和测试用例。提交定制化的自动化执行请求,执行结束系统自动发邮件通知。不同人员的请求可以实现并行执行。
所有的自动化执行历史记录都可以保存在平台上。可以通过 Web 的方式随时查阅。
Jenkins 支持丰富的插件,用户可以按照需求进行选择安装和配置,以实现生成执行状态表格,自动部署/更新自动化测试包等高级功能。
论坛徽章:349
方案设计概述
本文将使用一个简化后的“自助式”自动化测试应用场景以介绍本方案的核心设计思想。首先列举出该平台需要满足的各项需求:
用户权限管理,用户可以使用自己的帐号进行登陆访问,提交请求。
用户根据自身的具体需求,灵活的选择已经部署在平台上的自动化测试包,并且可以对测试环境,测试集和测试用例进行定制化选择。
多用户并发请求的执行,彼此之间相互独立,互不干扰
请求执行完毕后的 email 通知
执行状态和历史纪录的查询
用户体验良好的 Web 页面访问模式
针对以上的需求,我们可以用图 1 来简要说明该方案的主要功能组件以及彼此之间的联系。
图 1. 平台主要功能组件
图 1. 平台主要功能组件
Web 前端:Jenkins 平台自身提供一套统一标准的 web 界面,用户可以根据需求通过其完成各种系统配置,任务提交,查询等工作。
用户登录与权限控制:Jenkins 平台默认支持若干种用户验证机制,比如 LDAP, Jenkins own database, servlet container authenticate 等等,也可以通过其它插件实现更加复杂的验证。本文将采用最简单的 Jenkins own database 来管理帐户的权限。
任务请求定制化模块:一般来说,Jenkins 大部分情况下只需要完成预定义执行内容的任务。所以在参数定制化请求方面只具备最基本的支持。为了满足更好的“自助式”的用户体验和需求,实现预定义任务对不同用户需求的灵活响应,我们在还需要借助一款 Jenkins 插件“Extended Choice Parameter plugin”的辅助。利用该插件,用户可以在提交请求时在页面上输入多选式参数,这些动态输入将以环境变量的形式传递给执行模块影响最终请求的行为。
任务提交与执行模块:Jenkins 支持稳定的任务管理机制,管理员可以通过配置使同一个任务支持并发响应多个请求,彼此之间独立且互不干扰。
任务状态与历史纪录查询:对于任务请求的状态信息跟踪,Jenkins 默认只支持控制台输出的监控,而且每一次请求记录,Jenkins 只提供一个数字 ID 和时间戳进行标识。对于一个多用户的自助式平台这是远远不够的。我们利用插件“HTML Publisher Plugin”,保存请求生成的 html 格式的运行报告。这样可以在页面上对任意历史请求的执行纪录和报告进行查询和检索;同时利用“EnvInject Plugin”,“Build User Vars Plugin”和“Build Name Setter Plugin”为每一次请求动态生成包含用户姓名等多方面信息的 ID 以区分,大大方便信息的管理和测试结果数据的追溯。
Email 提醒:Jenkins 默认只支持最基本的 email 通知机制。我们使用插件“Email-ext plugin”进行扩展,以支持更加强大的通知机制,灵活定制 email 标题和内容, 添加附件,定制收件人名单等。
TestNG 自动化测试框架:TestNG 是一款强大的自动化测试框架,适用于 Unit 测试,功能测试,集成测试等多类型的自动化测试。其拥有一整套成熟的 API 和 Annotation, 支持数据驱动,测试周期和依赖控制,多线程执行等一系列特性。本方案采用 TestNG 还因为其具有对测试脚本集进行灵活选择的特性。TestNG 利用 xml 文件来组织测试脚本集,在运行的时候,我们可以通过参数指定需要运行的脚本,把 Jenkins 任务与建立在这一框架之上的自动化测试包进行连接,就可以轻松实现用户在页面上选择测试集。
论坛徽章:349
平台的实现与配置[size=1.166em]本章介绍该平台具体的实现和配置流程,主要包含以下步骤:安装 Jenkins 及必要的第三方插件建立新用户及配置权限为自动化测试建立和配置新任务配置用户输入定制化选项配置执行报告保存配置 email 提醒
[size=1.166em]Jenkins 及相关插件的安装 (本文以 jenkins-ver.1.524 为例)[size=1.166em]Jenkins 是一款成熟强大的开源软件,对大部分主流的操作系统平台(Linux,Windows, Mac OS)都提供支持,在其官方网站上可以直接下载到最新的安装包和每一个平台的安装流程文档。[size=1.166em]安装完毕之后,我们可以以后台服务的形式将其启动,这个时候我们就可以用浏览器通过 http://localhost:8080 访问其默认主页面进行平台定制化配置。图 2.Jenkins 主页面[size=1.166em]初始安装后的 Jenkins 并没有默认管理员帐户,第一次打开主页面就可以直接对其进行系统配置,在页面的左端可以通过点击“Manage Jenkins”打开 Jenkins 系统管理界面。图 3.Jenkins 管理界面[size=1.166em]我们可以通过“Manage Plugins”来安装第三方插件。其中本方案建议安装的六个插件分别是“Extended Choice Parameter plugin”,“EnvInject Plugin”,“Build User Vars Plugin”,“Build Name Setter Plugin”,“HTML Publisher Plugin”和“Email-ext plugin”。图 4.Jenkins 插件管理[size=1.166em]安装插件的方法十分简单,在“Manage Plugins”页面的“Available”选项卡中,勾选所需要的目标插件,点击页面下方的相应安装按钮即可。[size=1.166em]新建用户和配置权限[size=1.166em]前面我们提到 Jenkins 在初次安装时默认并没有用户验证的环节,所有打开主页面的用户都具有系统管理员权限。对于一个要在正式项目中被整个团队所公用的测试平台,我们需要严格的建立用户验证和权限配置。[size=1.166em]首先在“Manage Jenkins -&Configure Global Security”页面中勾选“Enable security”。页面刷新之后在“Security Realm”项选择“Jenkins' own user database”,“Authorization”项选择“Matrix-based security”,同时暂时赋给 Anonymous“Overall Admin”权限. 每一个项目也可以根据自身的需要选择其它的认证方式。图 5. 安全管理[size=1.166em]保存设置之后,回到 Jenkins 主页面,此时我们点击右上角 sign up 链接可以进入创建用户页面,输入新建用户的基本信息。通过这种方式可以为需要使用该平台的所有成员创建属于他们自己的专用账号。图 6. 帐号创建[size=1.166em]新建账号完毕之后,用专门为管理员创建的账号重新登陆,再次进入“Manage Jenkins -&Configure Global Security”,为我们刚才创建的团队成员账号设置权限,同时禁用 Anonymous 的所有权限,具体方式如图 7 所示,保存之后即可生效。图 7. 权限配置[size=1.166em]为自动化测试建立和配置新任务。当以上工作都准备完毕之后,就可以开始在 Jenkins 平台上为自动化测试创建新的任务。首先在主界面的左上方点击“New Job”, 选择“Build a free-style software project”类型,并且提供一个合适的任务名如“ProjectA RESTAPI automation”。图 8. 新 Job 创建
论坛徽章:349
[size=1.166em]点击 OK 之后就可以开始对 Job 内容进行定义和配置。传统的 Jenkins 平台应用主要集中在持续集成(CI)领域,所以在配置页面提供了大量的关于源代码获取,Build 创建等传统配置选项。而本文从全新的角度利用 Jenkins 平台的特性搭建自助式平台,基于篇幅所限,这里只介绍和本方案相关的主要配置项。[size=1.166em]首先,为了让自动化任务在提交请求的时候都能够接收不同用户的选择,我们需要勾选“This build is parameterized”。在接下来的“Add Parameter”下拉菜单中,Jenkins 提供多种类型的用户输入,在这里我们选择“Extended Choice Parameter”(这是由上文中提到的插件“Extended Choice Parameter plugin”新增出的支持类型),同时 Jenkins 每一个 Job 支持多个用户输入选项,并且彼此之间可以属于不同类型,管理员可以根据项目需要进行灵活搭配。图 9. 参数化配置[size=1.166em]在这里为了简单起见,本文新建了两个参数化输入选项以说明问题。其中第一个为单选项,提供用户对目标测试环境的选择,另一个为多选项,提供对具体测试用例的选择。每一个输入项在配置时需要提供唯一标识的名字, 不仅会显示在输入页面上,同时用户提交请求时真实的输入将会以同样命名的环境变量的形式传递给具体的执行脚本。其次对于备选项列表的配置,系统提供两种方式。第一种是直接在“Value”项中提供所有备选项的列表,并以逗号隔开(如图 10 中对环境选项 ENVIRONMENT 的配置),另一种是当备选列表比较长的时候我们可以以文件的形式来提供(如图 11 中对测试用例 SELECTED_TESTCASE 选项的配置)。备选列表文件的内容格式如清单 1 所示:清单 1. SELECTED_TESTCASE 选项的备选列表文件内容TestCase = Testcase1,Testcase2,\Testcase3
[size=1.166em]备选选项列表以文件形式提供的好处之一是我们可以自己设计脚本来自动生成和更新这个列表,这样当自动化测试包有更新的时候我们并不需要每次都手动更新这些配置文件。同时文件的更新可以即时生效,这一点十分重要。图 10. 单选项配置图 11. 多选项配置[size=1.166em]本例所示参数化配置之后,用户在提交请求时,系统将会显示如下页面以提示用户进行选择,用户可以根据需要自由的选择测试的目标环境和测试用例集合。图 12. 参数化界面[size=1.166em]其次,如果该 Job 需要支持多人提交请求的并行执行(前提是 Job 执行的内容本身不会因为并行执行产生问题,比如每个请求都需要独占某个仅有的目标资源等),我们可以勾选“Execute concurrent builds if necessary”,同时我们需要考虑 Jenkins 所在服务器本身的配置和负荷能力。图 13. 并行配置[size=1.166em]同时,每一个来自不同用户的请求在系统中都会产生唯一的 ID 和时间戳以标示,但是这些信息并不足以让我们了解该请求的具体内容和发起人,可读性是很差的。为了更方便阅读和管理过往的记录,在此可以为每一个请求动态生成包含多种可识别信息的名字。我们利用“EnvInject Plugin”,“Build User Vars Plugin”和“Build Name Setter Plugin”三个插件以实现为不同请求定制如图 14 所示的名字。(Jenkins 自身提供部分系统环境变量如 BUILD_NUMBER, 之前为选择目标测试环境而配置的用户输入提供了环境变量 ENVIRONMENT,“Build User Vars Plugin”插件为我们提供了请求发起人的用户名信息 BUILD_USER)图 14. 请求命名 ID 的配置[size=1.166em]通过以上的配置,不同用户请求的历史记录将更加易于查询和管理,如图 15 所示图 15. 历史记录[size=1.166em]紧接着就是通过配置“Build Step”来定义每次请求具体的执行内容,Jenkins 提供 Windows batch, shell, Ant, Maven 四种方式调用外部的命令和脚本图 16.Build Step[size=1.166em]我们将在 build step 的命令中调用基于 TestNG 框架的自动化测试包。TestNG 是利用一种特殊格式的 XML 文件来定义测试用例集合的,称之为测试套件文件。假定我们项目的自动化测试包有一个包含三个 test 的测试套件 projectARestAPISuite.xml,如清单 2 所示,它所包含 test 的名字(test name 属性)分别为 Testcase1,Testcase2,Testcase3。清单 2. TestNG 测试套件文件 projectARestAPISuite.xml&suite name=&Project A RestAPI automation suite&&&&&test name=&Testcase1&&&&&classes&&&&class name=&tests.Testcase1& /&&&&/classes& &/test& &test name=&Testcase2&&&&&classes&&&&class name=&tests.Testcase2& /& &/classes& &/test& &test name=&Testcase3&&&&&classes&&&&class name=&tests.Testcase3& /&&&&/classes& &/test& &/suite&
[size=1.166em]那么就可以用下面的命令集来定义 build step, 在此处巧妙地利用了 TestNG 启动命令的两个重要选项:[size=1.166em]-testname 接受以逗号隔开的 test name 列表,脚本运行时 suite xml 中只有-testname 选项列表里指定了的 test 才会被执行。而上文当中用户在提交请求时在定制页面上实际选择(多选)的测试集合恰恰会以逗号隔开的方式传递给 SELECTED_TESTCASE 环境变量,我们正是通过这种方式达到用户自由选择 case 执行的目的。[size=1.166em]-d 指定 TestNG 默认 report 生成的路径。因为不同用户可能存在并行执行的请求,为了防止冲突,每一个请求的 report 会生成在以环境变量 BUILD_ID 命名的目录下,BUILD_ID 可以唯一标示不同的请求。[size=1.166em]而前面的另一个用户输入 ENVIRONMENT 也可以以环境变量的形式被自动化脚本所读取,根据用户的不同输入做出不同的响应。图 17.Build 命令[size=1.166em]-testname 只是 TestNG 支持定制化选择的其中一个选项,除此之外还支持包括-groups,-methods,-testclass 等多种选择方式,用户可以根据项目的需要灵活使用,具体方法可以参照 TestNG 的官方帮助文档。[size=1.166em]脚本执行完毕之后,接下来就需要归档生成的测试报告。这里采用了插件“HTML Publisher Plugin”新增的配置选项。首先在“Add post-build action”中选择“Publish HTML reports”,指定每一个请求所生成的 HTML 报告的路径和文件名, 勾选“Keep past HTML reports”, 这样就可以在历史记录的快捷菜单中轻松的查询过往请求的执行报告了。图 18. 报告发布图 19. 报告路径和配置图 20. 报告查询[size=1.166em]最后,因为该平台是提供给整个团队使用的公共自助式平台,所以每一个请求执行结束后我们都希望请求发起者可以收到执行完成的 email 通知,这里我们利用“Email-ext plugin”新增的配置选项,在“Add post-build action”中选择“Editable Email Notification”. 该插件提供丰富的 email 配置,可以利用环境变量定制 email 通知的主题,正文,添加附件等等,在高级选项中可以添加“Trigger”。当然为了邮件可以成功的发出,还需要在“Manage Jenkins -&Configure System”中的“Jenkins Location”中为系统邮件配置一个默认邮箱地址,以及在“E-mail Notification”中配置一个有效的 SMTP server 地址。
论坛徽章:349
图 21.Email 通知配置图 22. 系统发件人 Email 地址配置图 23.SMTP 配置[size=1.166em]按照本文所介绍的内容,我们可以搭建起一个自助式的自动化平台,同时不仅仅局限于自动化测试的需要,项目团队所开发的其他自动化工具包,部署,监测,生成报告等脚本工具都可以按同样的方式部署在该平台上,让所有团队的成员都能够自由的共享使用,也更加便于管理和维护。图 24 用来表示这种全新的团队协作模式:图 24. 协作模式
[size=1.166em]结论[size=1.166em]本文简要介绍了如何使用 Jenkins 和 TestNG 搭建一个自助式的自动化测试平台。这个平台可以让项目团队成员更加灵活和有效的使用自动化工具包完成各项工作,提高工作效率,降低管理和维护成本。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号4263人阅读
编程交流(167)
技术文章(211)
自动分析(9)
感悟(42)
通过之前的努力,将自动编译过程通过脚本在60多个项目组推广了,接下来就需要“自动部署”了。最近几天也在考虑这个自动部署的具体如何实现,自己能想到的先总结下:1、共享目录。通过脚本 net use \\remote_machine_ip\share_folder 的方式实现(仅仅通过脚本就能实现,前提是目录共享,有一定的安全风险)2、临时文件中转服务器。一般实现自动化编译,有一套的自己的源码管理服务器(比如: svn 或 git 服务器),在编译服务器上将编译好的文件上传到临时的文件服务器或源码管理服务器,在需要部署的服务器上通过命令(svn export 或其他),从文件服务器上下载最新的编译后的文件,完成部署即可。3、使用插件:& & &基于 windows 系统的,可以考虑 CIFS 插件,见:&&(.net 部署可以使用此程序)& & &基于 tomcat 的插件,见:&& (建议 java 程序使用此插件进行部署,支持 tomcat/jboss/gishfish等,java服务器支持足以)4、若是 linux 系统,可以考虑 rsync ,rscp 等脚本可完成,这个需要一定的shell基础。&其他的请各位补充,多谢!ps: 若有jenkins 的相关问题,可 @ 我,大家可以一起讨论讨论。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:977208次
积分:13218
积分:13218
排名:第673名
原创:302篇
转载:180篇
评论:378条
(9)(4)(1)(12)(4)(3)(5)(10)(5)(1)(4)(5)(11)(3)(5)(25)(19)(3)(10)(23)(21)(16)(2)(3)(6)(3)(2)(2)(1)(6)(2)(5)(1)(1)(2)(1)(5)(2)(5)(1)(1)(3)(5)(1)(4)(3)(1)(4)(3)(7)(9)(2)(2)(2)(4)(2)(7)(10)(1)(19)(13)(3)(10)(7)(7)(1)(9)(8)(7)(3)(7)(6)(7)(3)(5)(3)(8)(16)(28)浅谈基于Ansible持续部署自动化
 作者: 曲家富 编辑:
  2.1. 配置管理自动化  在一个典型的Web实际应用中,我们需要配置Web服务器和Mysql 数据库服务器,如图一所示▲图一 ansible配置web及数据库服务器结构图  ansible目录结构如下:  -- hosts  -- site.yml  `-- roles  -- common  -- handlers  -- tasks  `-- templates  -- db  -- handlers  -- tasks `-- templates  `-- web  -- handlers  -- tasks  `-- templates  具体hosts内容定义如下,web3作为web服务器,web2作为数据库服务器:  [webservers]  web3  [dbservers]  web2  site.yml中定义如下,对所有hosts中的服务器以root用户执行common角色的操作;对所有hosts中的服务器以root用户执行common角色的操作:  ---  # This playbook deploys the whole application stack in this site.  - name: apply common configuration to all nodes  hosts: all  user: root  roles:  - common  - name: configure and deploy the webservers and application code  hosts: webservers  user: root  roles:  - web  - name: deploy MySQL and configure the databases  hosts: dbservers  user: root  roles:  - db  在对应role的目录下,需要组织针对不同的role准备相应的handler、task、template内容,比如时间服务器、mysql和apache的配置文件放到相应的templates目录下。详细的参考代码请参考附录的链接,这里就不再一一列举。所有准备就绪之后,执行如下命令,所有配置部署操作将由ansible自动完成:  #ansible-playbook -i hosts site.yml  2.2. 应用部署自动化  基础环境部署好之后,接下来我们可以在这个环境上部署web应用。通常情况下,web应用部署都是用命令远程同步到web服务器,然后重启服务。利用ansible,我们可以将这个步骤自动化,如下图所示:▲图二 ansible自动部署web应用  在编译工具把代码编译成发布包以后,我们可以通过执行ansible-playbook将包部署到web服务器上,并自动重启服务。  比如下面deploy.yml  - hosts: webservers  user: root  pre_tasks:  - name: Stop web service  action: service name=httpd state=stopped  - name: Deploy the code from repository  git: repo=git://foosball.example.org/path/repo.git version=release-0.22 dest=/var/www/html/  post_tasks:  - name: Start web service  action: service name=httpd state=started  执行命令自动完成部署:  #ansible-playbook -i hosts deploy.yml  3. 结合jenkins持续部署  Jenkins作为一个持续集成的开源工具,一直在持续集成和持续部署领域被广泛使用。本例将结合jenkins讨论ansible在持续部署方面的使用方法。▲图三 ansible结合jenkins持续部署  如图三所示,将应用源代码和playbook及服务器配置文件存放在git服务器中,将需要部署的服务器在hosts中相应分成test,staging,production三个组。  部署的时候,运维人员在ansible服务器上用git从git服务器中取playbook并执行部署,可以一次部署三个环境,也可以选择指定的环境部署;在环境准备好后,开发人员通过jenkins工具取代码,build并构建部署任务。用jenkins调用ansible并执行相应的部署playbook进行自动应用部署,这里的playbook可以定义先判断在test环境是否部署正常,如正常则把当前应用部署到staging环境,否则将test环境回退到之前状态,同样情况在每次应用更新的时候也适用。具体详细的配置可以参照ansible官方文档,这里不一一列举。  利用这种方式,开发人员将专注于代码的开发设计而不用每次变更的时候要花时间关心在各种部署操作;运维人员也会将更多的精力投入到playbook及服务器配置模板的维护中来,而不是频繁忙于各种服务器的登陆,安装,部署中。  4. 小结  本文以具体实例介绍了ansible使用方法,并着重说明了ansible在不同场景下的自动化部署功能,也对持续部署进行了探索性讨论。旨在为开发和运维团队在面对越来越复杂的各种环境中,可以多一些便捷的选择方案。(作者简介:曲家富 任职于某大型外资IT企业,从事系统管理工作,专注于系统自动化部署。)  参考资料:  Ansible Official Site  /home  Ansible example resource link  /ansible/ansible-examples  Zero Downtime Application Updates with Ansible  /2013/07/zero-downtime-application-updates-with-ansible.html
大学生分期购物销量榜
IT168企业级

我要回帖

更多关于 jenkins自动化打包 的文章

 

随机推荐