持续集成(CI)- TeamCity实战概览

简介: 之所以选择TeamCity,有以下几个原因: Ø 这个软件对于小团队可以免费使用 Ø 安装配置比较简单,系统的要求不是很高(相比VS 2010 TFS) Ø 使用和配置比Cc.net简单一些 Ø 包含了重复代码的检测和分析工具 一、SVN安装 SVN服务安装 http://www.

之所以选择TeamCity,有以下几个原因:

Ø 这个软件对于小团队可以免费使用

Ø 安装配置比较简单,系统的要求不是很高(相比VS 2010 TFS)

Ø 使用和配置比Cc.net简单一些

Ø 包含了重复代码的检测和分析工具

一、SVN安装

SVN服务安装 http://www.visualsvn.com/files/VisualSVN-Server-2.1.7.msi

clip_image002

SVN客户端

TortoiseSVN

VisualSVN-2.0.5.msi

clip_image004

二、TeamCity安装

http://www.jetbrains.com/teamcity/ 下载 TeamCity-6.0.3.exe

三、TeamCity实战

如下把涉及到的多个方面简要汇总一下,具体的内容可以试用一下,或者从参考中下载图书的代码内容分析。一般的项目也不会全部涉及,根据项目的情况和内容裁减即可。

1、建立CI项目

默认的ci管理网址在 http://localhost/

按照提示建立项目即可

成功后即可建立各种类型的Build

2、NUnit、覆盖率测试

TeamCity comes with built-in functionality for NCover and PartCover. To use PartCover, you have to set it up on the Build Configuration page.

First, enable NUnit Tests (mark the flag in New Unit Test Settings). Set it to run the tests from

%system.teamcity.build.workingDir%\CiDotNet.Calc.Test\bin\Release\CiDotNet.Calc.Test.dll.

Go to the .NET Coverage section, choose PartCover from the drop-down list, and provide the path to the executables in the lib directory

(%system.teamcity.build.workingDir%\lib\PartCover\PartCover.exe).

Report XSLT:

C:\Program Files (x86)\PartCover\PartCover .NET 4.0\xslt\Report By Assembly.xslt=> PartCover.Assembly.html

C:\Program Files (x86)\PartCover\PartCover .NET 4.0\xslt\ Report By Class.xslt=> PartCover.Class.html

PartCover在64位下执行的方法

CorFlags.exe PartCover.exe /32BIT+ /Force

3、MSTest测试MSBuild形式

<Project DefaultTargets="Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<PropertyGroup>

<!--Default Configuration-->

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

<!--Default Platform-->

<Platform Condition=" '$(Platform)' == '' ">"Any CPU"</Platform>

<!--Visual Studio path-->

<VSPath Condition=" '$(VSPath)' == '' ">%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE</VSPath>

<!--Asseblies to test-->

<TestAssemblies>CiDotNet.Calc.Test\bin\$(Configuration)\CiDotNet.Calc.Test.dll</TestAssemblies>

</PropertyGroup>

<Target Name="Build" >

<MSBuild Targets="Clean;Rebuild" Projects="CiDotNet.sln" ContinueOnError="false"/>

</Target>

<Target Name="Test" DependsOnTargets="Build">

<Delete Condition="Exists('MSTestReport.trx')" Files="MSTestReport.trx"></Delete>

<Exec Command="&quot;$(VSPath)\MSTest.exe&quot; /testcontainer:$(TestAssemblies) /resultsfile:MSTestReport.trx"/>

<Message Text="##teamcity[importData type='mstest' path='MSTestReport.trx']" ></Message>

</Target>

</Project>

clip_image006

clip_image008

clip_image010

4、MSTest

MSTest.exe 命令行选项

http://msdn.microsoft.com/zh-cn/library/ms182489.aspx

· Build Log

[16:26:40]: 测试设置: 本地

[16:26:42]: ##teamcity[importData id='mstest' file='D:\pm\TeamCity\buildAgent\work\eea58b62b6f4c74d\MSTestReportX.trx']

[16:26:42]: Importing data from 'D:\pm\TeamCity\buildAgent\work\eea58b62b6f4c74d\MSTestReportX.trx' with 'mstest' processor

[16:26:42]: MSTest

[16:26:42]: [MSTest] Found 1 test definitions.

[16:26:42]: [MSTest

找到MSTestReportX.trx文件,VS打开即可看到覆盖率

clip_image012

5、Integration tests

不像单元测试,尽量减少组件之间的关联,依赖的组件使用Mock框架进行模拟

此时引入相关的依赖组件,替换掉Mock

6、其他测试

参考中图书第7章的例子代码拿来用用

涉及:

White框架

CiDotNet.WinCalc.Test: WinForm的测试

CiDotNet.SilverlightCalc.Test: Silverlight的测试

Selenium框架 http://seleniumhq.org/

CiDotNet.WebCalc.Test

8、代码规范

这部分主要是修改项目文件,支持Build,然后提供信息反馈处,具体的设置参考如下

FxCop

使用Fxcop的项目进行集成, *.fxcop 是项目文件

<Target Name="Analyze">

<Delete Condition="Exists('FxCopReport.xml')" Files="FxCopReport.xml"></Delete>

<FileUpdate Files="CiDotNet.FxCop" Regex="bin/Debug" ReplacementText="bin/$(Configuration)" />

<Exec Command="tools\FxCop\FxCopCmd.exe /project:CiDotNet.FxCop /out:FxCopReport.html /axsl"/>

<Error Condition="Exists('FxCopReport.xml')" Text="FxCop found some broken rules!" />

define a new artifact FxCopReport.html and a new tab server configuration.

StyleCop

<Project DefaultTargets="Analyze" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<UsingTask AssemblyFile="tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll" TaskName="MSBuild.Community.Tasks.FileUpdate"></UsingTask>

<UsingTask AssemblyFile="tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll" TaskName="MSBuild.Community.Tasks.Xslt"></UsingTask>

<UsingTask AssemblyFile="tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll" TaskName="MSBuild.Community.Tasks.XmlRead"></UsingTask>

<UsingTask AssemblyFile="tools\StyleCop\Microsoft.StyleCop.dll" TaskName="StyleCopTask"/>

<CreateItem Include="CiDotNet.Calc\**\*.cs">

<Output TaskParameter="Include" ItemName="StyleCopFiles"/>

</CreateItem>

<StyleCopTask

ProjectFullPath="$(MSBuildProjectFile)"

SourceFiles="@(StyleCopFiles)"

ForceFullAnalysis="true"

TreatErrorsAsWarnings="true"

OutputFile="StyleCopReport.xml"

CacheResults="true"

AdditionalAddinPaths="tools\"

/>

<Xslt Inputs="StyleCopReport.xml"

RootTag="StyleCopViolations"

Xsl="tools\StyleCop\StyleCopReport.xsl"

Output="StyleCopReport.html" />

<XmlRead XPath="count(//Violation)"

XmlFileName="StyleCopReport.xml">

<Output TaskParameter="Value" PropertyName="StyleCopViolations" />

</XmlRead>

<Error Condition="$(StyleCopViolations) > 0" Text="StyleCop found some broken rules!" />

add the artifact file, and a new tab appears in the build report page

代码重复

Its purpose is to find the places in your code where your team has duplicated the code.

The Duplicates Finder is a separate build runner in TeamCity.

clip_image014

9、文档

基于Sandcastle 的形式

<Target Name="Document" >

<MSBuild Projects="CiDotNet.shfbproj"/>

</Target>

TeamCity project’s General Settings, and set the Artifacts path to

Help/**/* => Help

This causes all the Help folder content from the current build to be copied to the Help artifacts folder. To make the documentation visible on the build-report page,add a new tab in the server configuration, pointing to /Help/Index.html.

10、安装和部署

WIX安装

ClickOnce部署

MS Deploy部署

<Target Name="Setup" >

<Exec

Command="&quot;$(VSPath)\devenv.exe&quot; CiDotNet.sln /build &quot;$(Configuration)&quot; /project CiDotNet.WinCalc.Setup\CiDotNet.WinCalc.Setup.vdproj"

ContinueOnError="false" IgnoreExitCode="true"

/>

<MSBuild Projects="CiDotNet.WinCalc.Wix\CiDotNet.WinCalc.Wix.wixproj" Properties="WixTargetsPath=$(MSBuildProjectDirectory)\tools\Wix\Wix2010.targets;"/>

</Target>

<Target Name="Publish" >

<MSBuild Targets="Publish" Projects="CiDotNet.sln" ContinueOnError="false" Properties="ApplicationVersion=$(Major).$(Minor).$(Build).$(Revision)"/>

</Target>

<Target Name="WebPublish" >

<MSBuild Targets="Package" Projects="CiDotNet.WebCalc\CiDotNet.WebCalc.csproj" ContinueOnError="false" Properties="PackageLocation=WebPublication\Package.zip;MSBuildExtensionsPath32=..\tools"/>

<Exec

Command="CiDotNet.WebCalc\WebPublication\Package.deploy.cmd /Y /m:ci1 /u:administrator /p:Marcinq1p0w2"

ContinueOnError="false" IgnoreExitCode="true"

/>

</Target>

11、数据库集成

这个主要使用VS的数据库项目可以完成

<MSBuild

Projects = "$(SolutionRoot)\NWSandbox.dbproj"

Properties = "Configuration=Debug; TargetDatabase=NewDBName"

Targets = "Deploy"/>

四、参考

图书Continuous Integration in .NET http://www.manning.com/kawalerowicz/ 下载CIi.N_SourceCode.zip

其中包括VS的Build脚本等,在TFS的持续集成中可以参考

http://www.cnblogs.com/2018/category/300477.html

相关文章
|
12月前
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
222 2
|
14天前
|
人工智能 自然语言处理 API
快速集成GPT-4o:下一代多模态AI实战指南
快速集成GPT-4o:下一代多模态AI实战指南
206 101
|
4月前
|
缓存 监控 安全
通义大模型与现有企业系统集成实战《CRM案例分析与安全最佳实践》
本文档详细介绍了基于通义大模型的CRM系统集成架构设计与优化实践。涵盖混合部署架构演进(新增向量缓存、双通道同步)、性能基准测试对比、客户意图分析模块、商机预测系统等核心功能实现。同时,深入探讨了安全防护体系、三级缓存架构、请求批处理优化及故障处理机制,并展示了实时客户画像生成和动态提示词工程。通过实施,显著提升客服响应速度(425%)、商机识别准确率(37%)及客户满意度(15%)。最后,规划了技术演进路线图,从单点集成迈向自主优化阶段,推动业务效率与价值持续增长。
156 7
|
11天前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
137 12
|
3月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
114 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
8月前
|
人工智能 Kubernetes jenkins
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
|
2月前
|
人工智能 自然语言处理 分布式计算
AI 驱动传统 Java 应用集成的关键技术与实战应用指南
本文探讨了如何将AI技术与传统Java应用集成,助力企业实现数字化转型。内容涵盖DJL、Deeplearning4j等主流AI框架选择,技术融合方案,模型部署策略,以及智能客服、财务审核、设备诊断等实战应用案例,全面解析Java系统如何通过AI实现智能化升级与效率提升。
215 0
|
5月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
331 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
11月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
709 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
5月前
|
JSON JavaScript API
MCP 实战:用配置与真实代码玩转 GitHub 集成
MCP 实战:用配置与真实代码玩转 GitHub 集成
1220 4

热门文章

最新文章