数据库开发的持续集成 - CruiseControl.Net的项目配置
2008-06-25 20:20
453 查看
本系列文章目录
数据库开发的持续集成 - Sql Server 部署升级工具
数据库开发的持续集成 - Sql Server数据库结构比较
数据库开发的持续集成 - 方法和流程
数据库开发的持续集成 - Liquibase的简介和应用
数据库的持续集成 - CruiseControl.Net的项目配置
继续数据库的持续集成-方法和流程, 下面来说一下如何配置CruiseControl.Net的项目。
[b]流程和配置详解
[/b]CC项目包括Trunk项目和Studio项目,由于Studio项目相对简单,下面只详解Trunk项目。
先回顾一下流程:
<!-- 按标记回滚(for CC.Net) -->[/b]
<Target Name="TagRollbackCC" Condition="$(CCNetIntegrationStatus) != 'Success'">
<Exec Command="$(LiquiBase) $(ConnectionParam) $(ChangeLogParam) rollback $(Tag) > $(ExecLog)" ContinueOnError="false"/>
<CallTarget Targets="CheckExec"/>
</Target>
2 保证同一份测试代码在本地,CC上的Studio项目和Trunk项目都能应用
需要满足的条件包括:
* 测试代码在Studio项目中使用测试数据库GTCATest,在本地和Trunk中使用GTCA(本地数据库和基线数据同名,方便结构比较)
* 测试代码在Trunk项目中不能修改数据库结构,否则将破坏基线数据库的状态
解决的方案:
* 测试代码中通过预编译指令CC_Studio,CC_Trunk区分三种场景
* 要保证测试在不通场景使用不用的数据库,就不能把数据连接配置放在测试项目的app.config中,使用InPlaceConfigurationSource替代
Dictionary<string, string> properties = new Dictionary<string, string>();
properties.Add("connection.driver_class", "NHibernate.Driver.SqlClientDriver");
properties.Add("dialect", "NHibernate.Dialect.MsSql2000Dialect");
properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider");
#if CC_STUDIO
properties.Add("hibernate.connection.connection_string", "Data Source=.;Initial Catalog=GTCATest;Integrated Security=SSPI");
#else
properties.Add("connection.connection_string", "Data Source=.;Initial Catalog=GTCA;Integrated Security=SSPI");
#endif
InPlaceConfigurationSource source = new InPlaceConfigurationSource();
source.Add(typeof (ActiveRecordBase), properties);
ActiveRecordStarter.Initialize(Assembly.Load("GTCA.Entities"), source);
* 对于CreateSchem/UpdateSchema/DropSchema等函数提供统一的工具类给开发人员使用
public static void PrepareSchema()
public static void DropSchema()
<project name="Database-trunk" webURL="http://192.168.1.44/ccnet/server/local/project/Database-trunk/ViewProjectReport.aspx" >
<workingDirectory>D:\GTCA\Database\trunk</workingDirectory>
<artifactDirectory>D:\GTCA\Database\trunk</artifactDirectory>
<category>GTCA</category>
<labeller type="taoLabeller">
<majorVersion>1</majorVersion>
<minorVersion>0</minorVersion>
</labeller>
<triggers/>
<sourcecontrol type="filtered">
<sourceControlProvider type="svn" autoGetSource="true" tagOnSuccess="true">
<trunkUrl>svn://192.168.1.4/Database/trunk</trunkUrl>
<workingDirectory>D:\GTCA\Database\trunk</workingDirectory>
<tagBaseUrl>svn://192.168.1.4/Database/tags</tagBaseUrl>
</sourceControlProvider>
<inclusionFilters>
<userFilter>
<names><name>zt</name></names>
</userFilter>
</inclusionFilters>
<exclusionFilters>
<pathFilter><pattern>/**/test/**</pattern></pathFilter>
<pathFilter><pattern>/**/document/**</pattern></pathFilter>
</exclusionFilters>
</sourcecontrol>
<prebuild>
<!--tag GTCA with CCNetLabel-->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:tag </buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</prebuild>
<tasks>
<!-- build source -->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk</workingDirectory>
<projectFile>Database.sln</projectFile>
<buildArgs>/noconsolelogger /t:rebuild /p:configuration=release /p:DefineConstants=CC_TRUNK</buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
<!-- deploy GTCA -->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:deploy </buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
<!-- test entities and DAL on GTCA -->
<nunit>
<path>D:\GTCA\reference\tools\nunit\nunit-console.exe</path>
<assemblies>
<assembly>D:\GTCA\Database\trunk\test\TestEntities\bin\Release\TestEntities.dll</assembly>
</assemblies>
</nunit>
<nunit>
<path>D:\GTCA\reference\tools\nunit\nunit-console.exe</path>
<assemblies>
<assembly>D:\GTCA\Database\trunk\test\TestDal\bin\Release\TestDal.dll</assembly>
</assemblies>
</nunit>
<!-- generate database document on GTCA-->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:doc /p:DocDir=D:\dbdoc</buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
<!--publish GTCA -->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:publish</buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</tasks>
<publishers>
<xmllogger />
<modificationHistory onlyLogWhenChangesFound="true" />
<!-- tagrollback on error( if CCNetIntegrationStatus isn't Success) -->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:TagRollbackCC</buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</publishers>
<externalLinks>
<externalLink name="Database Document" url="http://192.168.1.44/dbdoc/" />
</externalLinks>
</project>
这个系列到此告一段落,回顾整个探索过程,曾经满世界的寻找数据库比较和同步的工具,自己也写过升级部署工具。直到liquibase进入视野,给了我足够的支撑,这才能够气定神闲的设计和丰满流程和方法,并将其转为实现。
衷心感谢liquibase的贡献者提供了如此出色的工具。
数据库开发的持续集成 - Sql Server 部署升级工具
数据库开发的持续集成 - Sql Server数据库结构比较
数据库开发的持续集成 - 方法和流程
数据库开发的持续集成 - Liquibase的简介和应用
数据库的持续集成 - CruiseControl.Net的项目配置
继续数据库的持续集成-方法和流程, 下面来说一下如何配置CruiseControl.Net的项目。
[b]流程和配置详解
[/b]CC项目包括Trunk项目和Studio项目,由于Studio项目相对简单,下面只详解Trunk项目。
先回顾一下流程:
<!-- 按标记回滚(for CC.Net) -->[/b]
<Target Name="TagRollbackCC" Condition="$(CCNetIntegrationStatus) != 'Success'">
<Exec Command="$(LiquiBase) $(ConnectionParam) $(ChangeLogParam) rollback $(Tag) > $(ExecLog)" ContinueOnError="false"/>
<CallTarget Targets="CheckExec"/>
</Target>
2 保证同一份测试代码在本地,CC上的Studio项目和Trunk项目都能应用
需要满足的条件包括:
* 测试代码在Studio项目中使用测试数据库GTCATest,在本地和Trunk中使用GTCA(本地数据库和基线数据同名,方便结构比较)
* 测试代码在Trunk项目中不能修改数据库结构,否则将破坏基线数据库的状态
解决的方案:
* 测试代码中通过预编译指令CC_Studio,CC_Trunk区分三种场景
* 要保证测试在不通场景使用不用的数据库,就不能把数据连接配置放在测试项目的app.config中,使用InPlaceConfigurationSource替代
Dictionary<string, string> properties = new Dictionary<string, string>();
properties.Add("connection.driver_class", "NHibernate.Driver.SqlClientDriver");
properties.Add("dialect", "NHibernate.Dialect.MsSql2000Dialect");
properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider");
#if CC_STUDIO
properties.Add("hibernate.connection.connection_string", "Data Source=.;Initial Catalog=GTCATest;Integrated Security=SSPI");
#else
properties.Add("connection.connection_string", "Data Source=.;Initial Catalog=GTCA;Integrated Security=SSPI");
#endif
InPlaceConfigurationSource source = new InPlaceConfigurationSource();
source.Add(typeof (ActiveRecordBase), properties);
ActiveRecordStarter.Initialize(Assembly.Load("GTCA.Entities"), source);
* 对于CreateSchem/UpdateSchema/DropSchema等函数提供统一的工具类给开发人员使用
public static void PrepareSchema()
public static void DropSchema()
<project name="Database-trunk" webURL="http://192.168.1.44/ccnet/server/local/project/Database-trunk/ViewProjectReport.aspx" >
<workingDirectory>D:\GTCA\Database\trunk</workingDirectory>
<artifactDirectory>D:\GTCA\Database\trunk</artifactDirectory>
<category>GTCA</category>
<labeller type="taoLabeller">
<majorVersion>1</majorVersion>
<minorVersion>0</minorVersion>
</labeller>
<triggers/>
<sourcecontrol type="filtered">
<sourceControlProvider type="svn" autoGetSource="true" tagOnSuccess="true">
<trunkUrl>svn://192.168.1.4/Database/trunk</trunkUrl>
<workingDirectory>D:\GTCA\Database\trunk</workingDirectory>
<tagBaseUrl>svn://192.168.1.4/Database/tags</tagBaseUrl>
</sourceControlProvider>
<inclusionFilters>
<userFilter>
<names><name>zt</name></names>
</userFilter>
</inclusionFilters>
<exclusionFilters>
<pathFilter><pattern>/**/test/**</pattern></pathFilter>
<pathFilter><pattern>/**/document/**</pattern></pathFilter>
</exclusionFilters>
</sourcecontrol>
<prebuild>
<!--tag GTCA with CCNetLabel-->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:tag </buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</prebuild>
<tasks>
<!-- build source -->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk</workingDirectory>
<projectFile>Database.sln</projectFile>
<buildArgs>/noconsolelogger /t:rebuild /p:configuration=release /p:DefineConstants=CC_TRUNK</buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
<!-- deploy GTCA -->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:deploy </buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
<!-- test entities and DAL on GTCA -->
<nunit>
<path>D:\GTCA\reference\tools\nunit\nunit-console.exe</path>
<assemblies>
<assembly>D:\GTCA\Database\trunk\test\TestEntities\bin\Release\TestEntities.dll</assembly>
</assemblies>
</nunit>
<nunit>
<path>D:\GTCA\reference\tools\nunit\nunit-console.exe</path>
<assemblies>
<assembly>D:\GTCA\Database\trunk\test\TestDal\bin\Release\TestDal.dll</assembly>
</assemblies>
</nunit>
<!-- generate database document on GTCA-->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:doc /p:DocDir=D:\dbdoc</buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
<!--publish GTCA -->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:publish</buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</tasks>
<publishers>
<xmllogger />
<modificationHistory onlyLogWhenChangesFound="true" />
<!-- tagrollback on error( if CCNetIntegrationStatus isn't Success) -->
<msbuild>
<workingDirectory>D:\GTCA\Database\trunk\deploy</workingDirectory>
<projectFile>ci.proj</projectFile>
<buildArgs>/noconsolelogger /t:TagRollbackCC</buildArgs>
<logger>D:\GTCA\reference\libs\MSBuild\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</publishers>
<externalLinks>
<externalLink name="Database Document" url="http://192.168.1.44/dbdoc/" />
</externalLinks>
</project>
这个系列到此告一段落,回顾整个探索过程,曾经满世界的寻找数据库比较和同步的工具,自己也写过升级部署工具。直到liquibase进入视野,给了我足够的支撑,这才能够气定神闲的设计和丰满流程和方法,并将其转为实现。
衷心感谢liquibase的贡献者提供了如此出色的工具。
相关文章推荐
- 自动化持续集成编译 配置 CruiseControl.Net SVN
- 敏捷开发,持续集成 fxcop 在 CruiseControl.NET中的使用
- 自动化持续集成编译 配置 CruiseControl.Net SVN
- 持续集成工具CruiseControl.net对软件项目过程的改善
- 自动化持续集成编译 配置 CruiseControl.Net SVN
- asp.net开发web项目-vss集成环境配置
- 转载:CruiseControl.Net持续集成平台搭建总结
- 持续继承工具CruiseControl.net 配置攻略。
- asp.net开发web项目-vss集成环境配置
- 持续集成:CruiseControl.NET + VisualSVN.Server
- ASP.NET开发WEB项目-VSS集成环境配置
- 使用CruiseControl.Net全面实现持续集成
- 基于GO的windows环境下net项目的持续集成demo--安装、配置
- 使用SVN+CruiseControl+ANT实现持续集成之二----环境搭建和配置介绍
- asp.net开发web项目-vss集成环境配置
- .NET环境下每日集成(4):CruiseControl.Net配置注意事项
- 使用CruiseControl.Net全面实现持续集成
- 打算用CruiseControl.Net持续集成 WIX生成安装包
- CruiseControl.NET,Nant持续集成(1)
- CruiseControl.Net持续集成平台搭建总结