<!-- [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持续集成与持续交付实践 持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)是企业IT实践中两个非常重要的概念,它们之间紧密相连,都是为了提高软件开发、测试和部署的效率和...
持续集成、交付和部署(CI/CD)是软件开发行业中的实践方法,其目标是使组织能够更频繁、更可靠地发布新的特性和产品。随着对持续实践方法兴趣的增加,系统性地回顾和总结这些实践方法、工具、挑战和实践的做法变得...
持续集成实践作为软件开发领域的一项重要实践,是保障软件开发质量、提高开发效率的重要手段。该实践强调开发团队成员频繁地集成他们的工作成果,通常每人每天至少集成一次,从而尽早发现和解决问题,减少集成的...
【PHP持续集成实践】 PHP持续集成是软件开发过程中的一个重要环节,它强调在开发过程中频繁地集成代码,并通过自动化的方式进行编译、测试和质量检查,以尽早发现并修复问题,提升软件的质量和稳定性。本实践主要...
**敏捷实践与持续集成** 在敏捷环境中,持续集成是保持团队敏捷性和响应能力的关键。它促进了快速反馈,帮助团队尽早发现和修复问题,减少了“技术债务”。此外,持续集成有助于保持代码库整洁,降低合并冲突的风险...
PM01-蒋志强-持续集成和发布在蘑菇街的实践,详细介绍了蘑菇街的相关技术
持续集成持续集成持续集成持续集成持续集成持续集成持续集成
在《20101019-钱晓飞-ICP-CI工具介绍》这个文档中,可能会详细介绍钱晓飞先生关于集成实践的见解,包括如何选择合适的CI工具,如何设置和优化CI流程,以及在实际项目中遇到的问题和解决方案。学习这个文档,你将更...
##### 持续集成的最佳实践与流程 - **代码提交**:开发人员将代码提交到版本控制系统中。 - **自动构建**:提交后立即触发构建过程。 - **自动测试**:自动运行单元测试、集成测试等,确保代码质量。 - **自动部署*...
【持续集成实践】 持续集成是现代软件开发中的关键实践,旨在早期发现并修复错误,提高软件质量。在NC(可能是SAP NetWeaver或类似产品)总账的开发过程中,持续集成扮演着至关重要的角色。NC总账持续集成实践涉及...
【高效客户端持续集成实践之路】 在敏捷开发的背景下,为了应对快速迭代和高并发的开发需求,客户端持续集成成为了解决方案的关键。闲鱼作为一款高频应用,采用泳道任务模式进行迭代,每两周推出一个新版本。面对...
### 持续集成与部署的关键实践:初创公司的视角 #### 一、引言 持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)是软件开发领域的重要实践,尤其是在快速变化的初创公司环境中更为...
【持续集成PHP】是一种开发实践,它鼓励开发者频繁地将代码变更合并到主分支,以减少集成冲突并尽早发现潜在问题。在这个过程中,自动化工具如Hudson被用来构建、测试和部署代码,确保每次合并都是可靠的。Hudson是...
持续集成从“配置管理”、“构建”、“测试”、“部署及发布”及“团队习惯”5个纬度考察其成熟度,每个维度都有5个级别,分别是“入门”、“新手”、“中等”、“进阶”和“疯狂”。目前在各个维度上,行业的平均...
- 敏捷原则中的“尽早并经常交付有价值的软件”与持续集成相辅相成,后者帮助团队实现这一目标。 3. **自动化流程** - 自动化构建:当代码提交时,自动触发构建过程,减少人为错误,提高效率。 - 自动化测试:...
对持续集成中数据库集成的经典的xml配置文件
持续集成与单元测试是现代软件开发中至关重要的两个实践。持续集成关注于通过频繁地集成代码到主分支上,从而及早发现并解决集成问题;而单元测试则强调编写和执行代码中最小可测试单元的测试代码,确保这些单元的...
### 持续集成测试工具与实践案例分享 在当今快速发展的软件开发领域,持续集成(CI)已经成为提升软件质量、加速开发周期的关键技术之一。本文将深入探讨持续集成测试工具及其实践案例,特别是聚焦于一种名为Toast的...
构建是持续集成中的一个重要步骤,它包括将源代码转换为可执行的程序,例如安装必要的依赖、配置资源等。常用的构建工具包括Jenkins、Travis CI、Codeship和Strider等。这些工具多是开源软件,其中Travis CI和...