我们使用TeamCity的命令行构建运行器来调用bat文件.bat文件通过调用Visual Studio 2008的"devenv.exe"构建我们的解决方案,然后执行单元测试并创建正确的文件夹结构.
如果对devenv的调用失败并使TeamCity意识到构建失败,我们想要做的是停止执行bat文件.我们可以通过检查ErrorLevel(如果构建失败时为1)来捕获失败的devenv调用,并且我们可以在那时退出我们的bat文件.但是我们怎么能告诉TeamCity构建失败了呢?
这是我们尝试过的:
call "build.bat"
IF ERRORLEVEL 1 EXIT /B 1
Run Code Online (Sandbox Code Playgroud)
但是TeamCity无法识别我们的退出代码.相反,构建日志如下所示:
[08:52:12]: ========== Build: 28 succeeded or up-to-date, 1 failed, 0 skipped ==========
[08:52:13]: C:\_work\BuildAgent\work\bcd14331c8d63b39\Build>IF ERRORLEVEL 1 EXIT /B 1
[08:52:13]: Process exited with code 0
[08:52:13]: Publishing artifacts
[08:52:13]: [Publishing artifacts] Paths to publish: [build/install, teamcity-info.xml]
[08:52:13]: [Publishing artifacts] Artifacts path build/install not found
[08:52:13]: [Publishing artifacts] Publishing files
[08:52:13]: Build finished
Run Code Online (Sandbox Code Playgroud)
因此,TeamCity将报告构建成功.我们该如何解决这个问题?
解:
TeamCity提供了一种称为服务消息的机制,可用于处理这种情况.我已将构建脚本更新为如下所示:
IF %ERRORLEVEL% == 0 GOTO …
Run Code Online (Sandbox Code Playgroud) 我已成功设法让我们的TeamCity Server上的每个构建都运行MSTests.
我有几个使用NUnit的项目,所以希望让TeamCity运行NUnit测试就像运行MSTests一样简单:
因此,当我尝试为我的NUnit测试做同样的事情时,测试选项卡在Build完成时不显示,所以我猜它没有运行我的测试.
有谁知道我做错了什么?
不确定这是否有帮助,但这是来自构建日志:
[Project "AssemblyName.proj.teamcity.patch.tcprojx" (Build;TeamCity_Generated_NUnitTests target(s)):] C:\Program Files\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher.exe "@@" "C:\Program Files\TeamCity\buildAgent\temp\buildTmp\tmp2867.tmp"
[13:22:57]: Start TeamCity NUnit Test Runner
[13:22:59]: Build finished
Run Code Online (Sandbox Code Playgroud)
这就像它启动nunit build runner,然后停止?
谢谢
戴夫
我正准备第一次自己设置teamcity.我不得不说,在很多方面非常好看和简单.但是,我有一个问题,我无法解决并找到任何相关信息.
当我想发布我的工件时,我想要排除一些文件类型.
例:
%system.agent.work.dir%\trunk\Source\Projects\Webproject.Web/Controllers => Webproject.Web/Controllers
Run Code Online (Sandbox Code Playgroud)
但是,我不想复制文件夹中的所有.cs文件.我只需要文件夹.是否可以只复制文件夹而不是内容,然后复制我需要的内容?或者,如果我复制目录,我可以排除文件吗?
我有一个TeamCity构建,可以捕获单元测试的代码覆盖率.我还为构建成功的最小代码覆盖定义了一个环境变量,该工作正常,但我不想手动维护此阈值.我的问题是,是否存在一种方法(在TeamCity之外的某个地方发布代码覆盖率统计数据,然后读取上次成功构建的结果),以便在代码覆盖率提高时自动调整阈值,以确保在不允许的情况下实现稳定的改进倒退:)?
例如,假设当前代码覆盖率为20%(遗留应用程序),并且在编写新的单元测试时,代码覆盖率提高到25%.然后,有人检查新代码而不进行单元测试,代码覆盖率降至24%.我希望TeamCity失败,因为代码覆盖率从25%下降到24%.
首先,这不是家庭作业,我迫切需要一个脚本来完成以下工作,我的问题是,我以前从来没有处理过python所以我几乎不知道如何使用它 - 我需要它通过命令行构建运行器在TeamCity中启动单元测试
我需要的是:
一个将运行脚本的*.bat文件
一个python脚本将:
最好的祝福
我有一个项目,目前使用VS 2010(可能使用MSBUILD v4.0)在我的开发机器上愉快编译,但它在Team City中的MSBUILD v3.5下运行(在基于Win 2003服务器w/.NET 2的VM上运行) ,3.5和4安装).该项目新升级到2010年,现在CI构建失败了.我用Google搜索了这一切并尝试了一切显而易见的事情(加上一些没有意义的事情)并且没有任何影响结果.
该项目失败,出现一系列错误,如下所示:
error CS0234: The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)
Run Code Online (Sandbox Code Playgroud)
解决方案中有许多其他项目使用System.Core,System.Data.Linq和System.Xml.Linq,它们似乎都没有问题地编译.有问题的项目是一个Web应用程序,它的配置/ system.web/compilation/assemblies部分中包含以下设置:
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
Run Code Online (Sandbox Code Playgroud)
在同一个文件中加上以下内容:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
Run Code Online (Sandbox Code Playgroud)
有问题的项目是IIRC,我解决方案中唯一一个既是WebApplication也正在由PostSharp(v1.5)进行后期处理的项目.PostSharp在.csproj中配置如下:
<PropertyGroup>
<DontImportPostSharp>True</DontImportPostSharp>
<PostSharpUseCommandLine>True</PostSharpUseCommandLine>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" …
Run Code Online (Sandbox Code Playgroud)