我有一个简单的NAnt构建文件,它试图从指定目录上的subversion执行更新。测试构建文件内容的示例是:
<?xml version="1.0" ?>
<project name="Project_name" default="update">
<property name="root" value="C:\Subversion\UpdateDir" overwrite="false"/>
<property name="build.repos" value="http:/server/svnrepos" overwrite="false"/>
<property name="build.user" value="user" overwrite="false"/>
<property name="build.pwd" value="userpw" overwrite="false"/>
<target name="update">
<!-- Update all files to latest (head) revision from the repository -->
<svn-update destination="${root}" uri="${build.repos}" username="${build.user}" password="${build.pwd}" commandline="-r HEAD -q --no-auth-cache"/>
</target>
</project>
在TeamCity中运行构建(已配置为执行测试构建文件)时,构建失败,并从Collabnet subversion客户端的svn.exe文件返回错误1。
令人讨厌的是,NAnt GUI可以毫无错误地运行构建文件,因此我不明白为什么TeamCity会失败,因为我相信它使用的是与NAnt GUI相同的subversion客户端和相同的MS .net框架版也是。
错误日志详细信息如下,错误与NAnt Contrib任务'svn-update'有关:
[16:01:56]: svn-update
[16:01:56]: [svn-update] svn: Working copy '.' locked
[16:01:56]: [svn-update] svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)
[16:01:56]: C:\Subversion\ProjectBuilds\BuildFiles\Update0412.build(9,10): External Program Failed: C:\Program Files\CollabNet Subversion\svn.exe (return code was 1)
[16:01:56]: NAnt output: "C:\Program Files\NAnt-Gui\bin\NAnt.exe" -buildfile:C:\Subversion\ProjectBuilds\BuildFiles\Update0412.build -extension:C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NAntLoggers.dll -listener:JetBrains.BuildServer.NAntLoggers.NAntListener -D:teamcity.buildConfName=0412 -D:DotNetFramework1.1_Path=C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 -D:agent.home.dir=C:\BuildAgent "-D:agent.name=TeamCity Build Agent" -D:build.number=0.0.33 -D:teamcity.dotnet.nunitlauncher2.0=C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher2.0.exe -D:teamcity.dotnet.platform=C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.TeamCity.PlatformProcessRunner.1.1.exe -D:DotNetFramework1.1= -D:build.number.format=0.0.{0} -D:user.language=en -D:user.country=GB -D:os.version=5.1 -D:user.timezone=Europe/London -D:file.encoding=Cp1252 -D:file.separator=\ -D:agent.work.dir=C:\BuildAgent\work "-D:teamcity.projectName=Project 0412" -D:teamcity.dotnet.nunitlauncher2.0.vsts=C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher2.0.VSTS.exe -D:os.arch=x86 -D:DotNetFramework1.1_x86_Path=C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 -D:DotNetFramework1.1_x86= -D:teamcity.build.tempDir=C:\BuildAgent\temp\buildTmp -D:teamcity.dotnet.coveragelauncher=C:\BuildAgent\plugins\dotnetPlugin\bin\TeamCityRunners\JetBrains.dotTrace.TeamCity.CoverageRunner.exe -D:build.vcs.number=5758 -D:teamcity.dotnet.nunitlauncher=C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher.exe -D:build.vcs.number.1=5758 -D:user.name=SYSTEM "-D:os.name=Windows XP" -D:build.vcs.number.0412=5758 "-D:teamcity.version=4.0 (build 8080)" -D:teamcity.dotnet.nunitaddin=C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.TeamCity.NUnitAddin-NUnit -D:teamcity.auth.password=YVscypn9BG9okr0ojOES7LgevrD8Wpfp -D:idea.build.agent.port=9092 -D:teamcity.build.checkoutDir=C:\Subversion\ProjectBuilds\0412 -D:teamcity.buildType.id=bt2 -D:teamcity.auth.userId=TeamCityBuildId=36 -D:teamcity.dotnet.nunitlauncher1.1=C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher1.1.exe -D:user.variant= -D:teamcity.agent.cpuBenchmark=107 -D:teamcity.dotnet.nunitlauncher.msbuild.task=C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.MSBuildLoggers.dll -D:user.home=C:\ -D:idea.build.server.build.id=36 -D:path.separator=; -D:teamcity.build.workingDir=C:\Subversion\ProjectBuilds -D:teamcity.build.properties.file=C:\BuildAgent\temp\agentTmp\teamcity.build31597.properties update NAnt 0.85 (Build 0.85.2478.0; release; 14/10/2006) Copyright (C) 2001-2006 Gerry Shaw http://nant.sourceforge.net Buildfile: file:///C:/Subversion/ProjectBuilds/BuildFiles/Update0412.build Target framework: Microsoft .NET Framework 1.1 Target(s) specified: update update: [svn-update] svn: Working copy '.' locked [svn-update] svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details) BUILD FAILED - 0 non-fatal error(s), 2 warning(s) C:\Subversion\ProjectBuilds\BuildFiles\Update0412.build(9,10): External Program Failed: C:\Program Files\CollabNet Subversion\svn.exe (return code was 1) Total time: 0.4 seconds.
[16:01:56]: Process exit code: 1
编辑:问题确实与SVN结帐处于某种状态有关。我通过允许TeamCity进行自己的结账来解决这个问题(我也可能在此期间进行了清理)。看起来James Gregory和Ruben Bartelink都是正确的!
答案 0 :(得分:4)
TeamCity在运行构建的代理中拥有自己的结帐位置。错误消息指向那个工作副本已经弄糊涂了;如果构建失败并且处于更新中,有时会发生这种情况。我建议尝试在特定代理的工作副本中执行svn cleanup
。
答案 1 :(得分:1)
此外,如果您转到项目页面并从操作菜单中选择“强制清除结账”(或在项目设置中永久强制它),它可能会让您完成此操作(即强制它获得干净的副本对比只是获得增量的正常[更快]方法。
你也可以吹掉工作目录,看看它是否能治愈它。
答案 2 :(得分:1)
TeamCity支持代理上的svn checkout。它可以在构建结帐目录中自动调用svn update。请在构建配置设置/ 2.版本控制下选择代理商上的结帐。
请查看文档页面 http://www.jetbrains.net/confluence/display/TCD4/Build+Checkout+Directory