`
shishi11
  • 浏览: 115672 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

持续集成安装与实践

阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!-- [if !mso]> <span class="mceItemObject" classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui> </span> <style> st1\:*{behavior:url(#ieooui) } </style> <![endif]--> <!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->

持续集成安装与实践

<!-- [if !supportLists]-->1. <!-- [endif]-->准备

<!-- [if !supportLists]-->(1)     <!-- [endif]--> verycd 上下了一个持续集成的服务器 bamboo ,商业的,据说比较容易上手。其实还有别的,也下了, CruiseControl hudson 都有,也试了一下,确实这个比较容易上手。

<!-- [if !supportLists]-->(2)     <!-- [endif]-->看到持续集成服务器都需要从 cvs svn 上下代码才能进行,于是下了 cvsnt2.5

<!-- [if !supportLists]-->(3)     <!-- [endif]-->由于原来用的都是 eclipse3.4 ,所以安装了 m2eclipse ,这个过程比较费劲。要注意的是要把 java_home 设到 jdk 下面。在外面环境和内部都要设。

<!-- [if !supportLists]-->(4)     <!-- [endif]-->单独的 maven 是下的 springside3allinone 里带的,打通 path 就行了。

2. 试验

1 )先试 maven2 ,从 springside3 的例子 min-web 导入到 eclipse 中,项目叫 ss3 。其实是以前玩这个的时候建的,现在用来试 maven2 。改了几个地方,一个是自建了一个 mysql 的库,一个是改了一下 action 的输出,改用 json 实现,不再这里说了。

2 )在命令行下试 mvn ,及 mvn test

3 )安了 m2eclipse 后,其实倒有点不会用 mvn 了,不知有什么用,于是开始试。

4 )原来的 test 处改了下,改为可以直接做集成测试,将 pom-parent.xml 的部分改为:

< artifactId > maven -surefire -plugin </ artifactId >

              <!--configuration>

                  <excludes>

                     <exclude>**/integration/**</exclude>

                  </excludes>

              </configuration>

              <executions>

                  <execution>

                     <id>integration-test</id>

                      <goals>

                         <goal>test</goal>

                     </goals>

                     <phase>integration-test</phase>

                     <configuration>

                         <excludes>

                            <exclude>none</exclude>

                         </excludes>

                         <includes>

                            <include>**/integration/**</include>

                         </includes>

                     </configuration>

                  </execution>

              </executions-->

这个 surefire 插件是个好东西,没事也看了看。

这样才真的走了 test ,以前这里被跳过去了,还是看了江南大大的说明才了解的。

<!-- [if !supportLists]-->(5)     <!-- [endif]-->原来了 junit 用的是 3.8.1 ,看到 junit4.4 又有了很好的特性,于是改为用 4.4

<!-- [if !supportLists]-->(6)     <!-- [endif]-->新写了一个测试类

package ssh.integration.service.user;

 

import java.util.List;

 

import org.apache.commons.lang.RandomStringUtils;

import org.junit.Assume;

import org.junit.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;

 

import ssh.entity.user.User;

import ssh.service.user.UserManager;

import  org.springframework.util.Assert;

/**

  * UserManager 的集成测试用例 .

  *

  * 调用实际的 DAO 类进行操作 , 默认在操作后进行回滚(在 hibernate 中不会实际执行 SQL 操作 ).

  *

  * @author calvin

  */

@ContextConfiguration(locations = { "/applicationContext.xml" })

public class junit4UserManagerTest  extends AbstractTransactionalJUnit4SpringContextTests {

 

       /**

         * 也可以用 Resource autowired 匹配类型, resource 匹配名字

         */

       @Autowired

       private UserManager userManager;

      

       @Test

       public void testCreateUser() {

 

              User entity = new User();

              // 因为 LoginName 要求唯一性,因此添加 random 字段。

              entity.setLoginName("tester" + RandomStringUtils.randomAlphabetic(5));

              userManager.saveUser(entity);

              Assert.notNull(entity.getId());

       }

       @Test

       public void testAuth() {

              Assert.isTrue(userManager.auth("admin", "admin"));

              Assert.isTrue(!userManager.auth("admin", ""));

       }

 

}

其实跟原来差不太多。只是对 junit4.4 中的 assertthat 这个没有办法实现。

总之,写好了之后,去 run as junit 看到图形化的结果。

<!-- [if !supportLists]-->(7)     <!-- [endif]-->改写 pom.xml ,将 junit 写为 4.4 。试一下。

<!-- [if !supportLists]-->(8)     <!-- [endif]-->下面想把项目放到 cvs

先在 cvsnt 下建仓库 e:\cvsnt ,使用 unicode 方式,其实原来安这个的时候还是比较头痛的,权限问题好不容易才理解了,这里只是想试验,不是真的用,所以什么也不改,登录的时候用 windows administrator 的用户名和口令。

<!-- [if !supportLists]-->(9)     <!-- [endif]--> eclipse 中, team->share project ,新设一个 repository

:pserver:administrator@192.168.32.164:/cvsnt  然后一路下一步下去。这里还出过一次问题,原来 eclipse 里的目录,让我在 windows 下给删了,而在上传时总是出错,说 XXX 没有什么的,我查了半天,后来无意中 refresh 了一下,就好了,郁闷!

<!-- [if !supportLists]-->(10)  <!-- [endif]-->上传完了之后,再 checkout 到另一处,运行 maven ,却总也不成,说什么没有类什么的,我还为此装了 tortoiseCVS ,其实也没什么用。

看了半天,结果是由于以前加的 josn 输出用了几个类,没有在 maven dependency 里,所以 eclipse 编译过了,但 mvn 编译过不了。又看了半天如何加,出下面的语句

mvn install:install-file -Dfile=jsonplugin-0.33.jar -DgroupId=com.googlecode.jsonplugin -DartifactId=jsonplugin -Dversion=0.33 -DgeneratePom=true -Dpackaging=jar

mvn install:install-file -Dfile=ezmorph-1.0.6.jar -DgroupId=ezmorph -DartifactId=ezmorph -Dversion=1.0.6 -DgeneratePom=true -Dpackaging=jar

然后,在 pom.xml 里加了

< dependency >

           < groupId > com .googlecode .jsonplugin </ groupId >

           < artifactId > jsonplugin </ artifactId >

           < version > 0.33 </ version >

           < type > jar </ type >

           < scope > compile </ scope >

       </ dependency >

       < dependency >

           < groupId > ezmorph </ groupId >

           < artifactId > ezmorph </ artifactId >

           < version > 1.0.6 </ version >

           < type > jar </ type >

           < scope > compile </ scope >

       </ dependency >

 

主要问题是,其中一个类是 googlecode 的,在 maven 的主类库里都找不到,所以才用了这个方式。这也用来加载一些自制的类包。

<!-- [if !supportLists]-->(11)  <!-- [endif]-->编译通过之后,开启了 bamboo ,用管理员登录, create plan

Source Repository 里用 cvs

CVS Root:

:pserver:administrator@192.168.32.164:/cvsnt

Module:

ss3

Build Strategy:

Repository Polling

后面设 builder

maven2 jdk

但在 administration 里重设 maven 的路径为本机 springside3 tool 里的 maven

重设 jdk 的路径为 jdk_1.5 而不用原来的 jre

<!-- [if !supportLists]-->(12)  <!-- [endif]-->经过多次试验之后,终于可以自动执行了,但看 test 时总也没有。所以,在 builder 设的时候要选 The build will produce test results. 而因为原来比较规范,所以,这里选 The build will produce test results. 就可以了,实际用的还是 maven-surefire 的结果。

再运行,看到 test 里有数了。

 

至此,大致完成了搭建的过程,以及实践一个项目的持续集成。下一步,还要试一下自动部署的过程,以及 jire 的使用。另外,再换换 hudson CC 来试试。

 

分享到:
评论

相关推荐

    企业IT持续集成与持续交付实践.pdf

    企业IT持续集成与持续交付实践 持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)是企业IT实践中两个非常重要的概念,它们之间紧密相连,都是为了提高软件开发、测试和部署的效率和...

    持续集成、交付和部署:对方法、工具、挑战和实践的系统回顾.pdf

    持续集成、交付和部署(CI/CD)是软件开发行业中的实践方法,其目标是使组织能够更频繁、更可靠地发布新的特性和产品。随着对持续实践方法兴趣的增加,系统性地回顾和总结这些实践方法、工具、挑战和实践的做法变得...

    持续集成实践

    持续集成实践作为软件开发领域的一项重要实践,是保障软件开发质量、提高开发效率的重要手段。该实践强调开发团队成员频繁地集成他们的工作成果,通常每人每天至少集成一次,从而尽早发现和解决问题,减少集成的...

    PHP持续集成实践

    【PHP持续集成实践】 PHP持续集成是软件开发过程中的一个重要环节,它强调在开发过程中频繁地集成代码,并通过自动化的方式进行编译、测试和质量检查,以尽早发现并修复问题,提升软件的质量和稳定性。本实践主要...

    敏捷实践之持续集成

    **敏捷实践与持续集成** 在敏捷环境中,持续集成是保持团队敏捷性和响应能力的关键。它促进了快速反馈,帮助团队尽早发现和修复问题,减少了“技术债务”。此外,持续集成有助于保持代码库整洁,降低合并冲突的风险...

    PM01-蒋志强-持续集成和发布在蘑菇街的实践

    PM01-蒋志强-持续集成和发布在蘑菇街的实践,详细介绍了蘑菇街的相关技术

    java持续集成 持续集成

    在《20101019-钱晓飞-ICP-CI工具介绍》这个文档中,可能会详细介绍钱晓飞先生关于集成实践的见解,包括如何选择合适的CI工具,如何设置和优化CI流程,以及在实际项目中遇到的问题和解决方案。学习这个文档,你将更...

    持续集成与交付实践指南.pptx

    ##### 持续集成的最佳实践与流程 - **代码提交**:开发人员将代码提交到版本控制系统中。 - **自动构建**:提交后立即触发构建过程。 - **自动测试**:自动运行单元测试、集成测试等,确保代码质量。 - **自动部署*...

    NC总账持续集成实践

    【持续集成实践】 持续集成是现代软件开发中的关键实践,旨在早期发现并修复错误,提高软件质量。在NC(可能是SAP NetWeaver或类似产品)总账的开发过程中,持续集成扮演着至关重要的角色。NC总账持续集成实践涉及...

    高效客户端持续集成实践之路

    【高效客户端持续集成实践之路】 在敏捷开发的背景下,为了应对快速迭代和高并发的开发需求,客户端持续集成成为了解决方案的关键。闲鱼作为一款高频应用,采用泳道任务模式进行迭代,每两周推出一个新版本。面对...

    持续集成php持续集成

    【持续集成PHP】是一种开发实践,它鼓励开发者频繁地将代码变更合并到主分支,以减少集成冲突并尽早发现潜在问题。在这个过程中,自动化工具如Hudson被用来构建、测试和部署代码,确保每次合并都是可靠的。Hudson是...

    持续集成实践成熟度模型

    持续集成从“配置管理”、“构建”、“测试”、“部署及发布”及“团队习惯”5个纬度考察其成熟度,每个维度都有5个级别,分别是“入门”、“新手”、“中等”、“进阶”和“疯狂”。目前在各个维度上,行业的平均...

    持续集成最佳实践数据库的例子

    对持续集成中数据库集成的经典的xml配置文件

    持续集成与单元测试xmzy.pdf

    持续集成与单元测试是现代软件开发中至关重要的两个实践。持续集成关注于通过频繁地集成代码到主分支上,从而及早发现并解决集成问题;而单元测试则强调编写和执行代码中最小可测试单元的测试代码,确保这些单元的...

    持续集成测试工具与实践案例分享

    ### 持续集成测试工具与实践案例分享 在当今快速发展的软件开发领域,持续集成(CI)已经成为提升软件质量、加速开发周期的关键技术之一。本文将深入探讨持续集成测试工具及其实践案例,特别是聚焦于一种名为Toast的...

    持续集成的几个步骤

    构建是持续集成中的一个重要步骤,它包括将源代码转换为可执行的程序,例如安装必要的依赖、配置资源等。常用的构建工具包括Jenkins、Travis CI、Codeship和Strider等。这些工具多是开源软件,其中Travis CI和...

    持续集成软件质量改进和风险降低之道.pdf

    - 敏捷原则中的“尽早并经常交付有价值的软件”与持续集成相辅相成,后者帮助团队实现这一目标。 3. **自动化流程** - 自动化构建:当代码提交时,自动触发构建过程,减少人为错误,提高效率。 - 自动化测试:...

    企业持续集成及云端交付架构实践.pdf

    企业持续集成(Continuous Integration,简称CI)和持续交付(Continuous Delivery,简称CD)是现代软件开发中用于提高软件开发效率和软件质量的实践方法。持续集成是指开发人员频繁地将代码集成到主干上,每次代码...

Global site tag (gtag.js) - Google Analytics