2012-01-27 55 views
4

我们最近切换到git以满足我们的源代码控制需求。我们一直在使用cruisecontrol.net。我已经在cc.net配置文件中创建了新任务,并使用git源代码控制块进行设置。我已经确定我可以通过命令行使用ssh over ssh。当我从控制台运行它时,我的cruisecontrol.net工作正常。以git构建CruiseControl.Net作为服务运行时失败

但是当我运行cruisecontrol.net作为服务git的提取(或克隆)超时。我试图创建一个任务来在计算机启动时运行cc.exe进程,但结果与作为服务运行的结果相同。我已经在cc.net文档中设置了使用git的环境变量,并且我设置了ssh并保存了bitbucket的主机等。该服务以我在控制台中运行的同一用户身份运行。

任何想法如何获得混帐作为服务运行?

例构建脚本

<project name="******* Develop" queue="Q1" queuePriority="1"> 
    <webURL>http://cc.*******two.co.uk/server/local/project/*******Develop/ViewLatestBuildReport.aspx</webURL> 
    <workingDirectory>D:\Integration\********* Develop\WorkingDirectory</workingDirectory> 
    <artifactDirectory>D:\Integration\********* Develop\Artifacts</artifactDirectory> 
    <modificationDelaySeconds>10</modificationDelaySeconds> 
    <triggers> 
     <intervalTrigger seconds="600" name="continuous" /> 
    </triggers> 
    <sourcecontrol type="git"> 
     <repository>[email protected]:*******/*******-2.git</repository> 
     <branch>develop</branch> 
     <autoGetSource>true</autoGetSource> 
     <executable>C:\Program Files\Git\cmd\git.cmd</executable> 
     <tagOnSuccess>false</tagOnSuccess> 
     <commitBuildModifications>false</commitBuildModifications> 
     <commitUntrackedFiles>false</commitUntrackedFiles> 
     <committerName>*******BuildServer</committerName> 
     <committerEMail>[email protected]*******.co.uk</committerEMail> 
     <workingDirectory>D:\Integration\*******Develop\WorkingDirectory</workingDirectory> 
     <timeout>300000</timeout> 
    </sourcecontrol> 
    <tasks> 
     <exec> 
      <executable>e2prebuild.bat</executable> 
      <baseDirectory>D:\Integration\*******Develop\Scripts</baseDirectory> 
      <buildTimeoutSeconds>30</buildTimeoutSeconds> 
     </exec> 
     <msbuild> 
      <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> 
      <workingDirectory>D:\Integration\*******Develop\WorkingDirectory</workingDirectory> 
      <projectFile>*********.sln</projectFile> 
      <buildArgs>/p:Configuration=Release /v:diag</buildArgs> 
      <targets>Build</targets> 
      <timeout>900</timeout> 
      <logger>D:\CruiseControl\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger> 
     </msbuild> 
     <exec> 
      <executable>e2deploy.bat</executable> 
      <baseDirectory>D:\Integration\*******Develop\Scripts</baseDirectory> 
      <buildTimeoutSeconds>900</buildTimeoutSeconds> 
     </exec> 
     <exec> 
      <executable>ecrondeploy.bat</executable> 
      <baseDirectory>D:\Integration\*******Develop\Scripts</baseDirectory> 
      <buildTimeoutSeconds>900</buildTimeoutSeconds> 
     </exec> 
    </tasks> 
    </project> 

记录从CC.Net上构建失败

<cruisecontrol project="********* Develop"> 
    <request source="*********DEV" buildCondition="ForceBuild">Build (ForceBuild) triggered from *********DEV</request> 
    <parameters> 
    <parameter name="$CCNetArtifactDirectory" value="D:\Integration\********* Develop\Artifacts" /> 
    <parameter name="$CCNetBuildCondition" value="ForceBuild" /> 
    <parameter name="$CCNetBuildDate" value="2012-01-26" /> 
    <parameter name="$CCNetBuildTime" value="15:10:27" /> 
    <parameter name="$CCNetFailureUsers" value="System.Collections.ArrayList" /> 
    <parameter name="$CCNetIntegrationStatus" value="Unknown" /> 
    <parameter name="$CCNetLabel" value="3" /> 
    <parameter name="$CCNetLastIntegrationStatus" value="Success" /> 
    <parameter name="$CCNetListenerFile" value="D:\Integration\********* Develop\Artifacts\********* Develop_ListenFile.xml" /> 
    <parameter name="$CCNetModifyingUsers" value="System.Collections.ArrayList" /> 
    <parameter name="$CCNetNumericLabel" value="3" /> 
    <parameter name="$CCNetProject" value="********* Develop" /> 
    <parameter name="$CCNetProjectUrl" value="http://cc.*********.co.uk/server/local/project/*********Develop/ViewLatestBuildReport.aspx" /> 
    <parameter name="$CCNetRequestSource" value="*********DEV" /> 
    <parameter name="$CCNetUser" value="" /> 
    <parameter name="$CCNetWorkingDirectory" value="D:\Integration\********* Develop\WorkingDirectory" /> 
    </parameters> 
    <modifications /> 
    <integrationProperties> 
    <CCNetArtifactDirectory>D:\Integration\********* Develop\Artifacts</CCNetArtifactDirectory> 
    <CCNetBuildCondition>ForceBuild</CCNetBuildCondition> 
    <CCNetBuildDate>2012-01-26</CCNetBuildDate> 
    <CCNetBuildTime>15:10:27</CCNetBuildTime> 
    <CCNetFailureUsers /> 
    <CCNetIntegrationStatus>Exception</CCNetIntegrationStatus> 
    <CCNetLabel>3</CCNetLabel> 
    <CCNetLastIntegrationStatus>Success</CCNetLastIntegrationStatus> 
    <CCNetListenerFile>D:\Integration\********* Develop\Artifacts\********* Develop_ListenFile.xml</CCNetListenerFile> 
    <CCNetModifyingUsers /> 
    <CCNetNumericLabel>3</CCNetNumericLabel> 
    <CCNetProject>********* Develop</CCNetProject> 
    <CCNetProjectUrl>http://cc.*********.co.uk/server/local/project/*********Develop/ViewLatestBuildReport.aspx</CCNetProjectUrl> 
    <CCNetRequestSource>*********DEV</CCNetRequestSource> 
    <CCNetWorkingDirectory>D:\Integration\********* Develop\WorkingDirectory</CCNetWorkingDirectory> 
    <LastIntegrationStatus>Success</LastIntegrationStatus> 
    <LastSuccessfulIntegrationLabel>3</LastSuccessfulIntegrationLabel> 
    <LastModificationDate>25/01/2012 15:15:29</LastModificationDate> 
    </integrationProperties> 
    <build date="2012-01-26 15:10:27" buildtime="00:05:01" buildcondition="ForceBuild" /> 
    <exception><![CDATA[ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation has timed out. 
    at ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.Execute(ProcessInfo processInfo) 
    at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.GitFetch(IIntegrationResult result) 
    at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.CreateUpateLocalRepository(IIntegrationResult result) 
    at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.GetModifications(IIntegrationResult from, IIntegrationResult to) 
    at ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModifications(ISourceControl sourceControl, IIntegrationResult lastBuild, IIntegrationResult thisBuild) 
    at ThoughtWorks.CruiseControl.Core.IntegrationRunner.GetModifications(IIntegrationResult from, IIntegrationResult to) 
    at ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request)]]></exception> 
</cruisecontrol> 

CruiseControl.net版本:1.5.7256.1

+1

当我已经经历了这一点,就已经因为Git是提示在控制台输入。 CCNet服务通常以更高的权限运行(比普通的登录用户),所以尝试以管理员身份运行Git Bash,执行'git clone ...',并确保在控制台上没有任何提示。另外,请仔细检查您是否真的以服务用户身份运行;所有SSH密钥和已知主机都是按用户保存的。 – 2012-01-27 16:00:29

+0

嗨,你可以添加一个答案,所以我可以标记为这样。要添加一个更详细的答案,但是具有管理员权限的用户作为不同配置文件向同一用户运行而不是真正的解决方案,一旦我意识到它只是找到正确的路径。 – ClearCarbon 2012-01-30 14:50:57

回答

3

当我已经经历了这一点,就已经因为Git是提示在控制台输入。 CCNet服务通常以更高的权限(比普通的登录用户)运行,因此请尝试以管理员身份运行Git Bash,执行git clone ...,并确保没有任何提示必须在控制台绕过。另外,请仔细检查您是否真的以服务用户身份运行;所有SSH密钥和已知主机都是按用户保存的。

0

好与布拉德利的帮助下,我意识到,尽管用户名相同,我的服务仍以不同的配置文件运行。以管理员身份运行git bash(但仍然是同一个用户)显示我的〜/文件夹位于windows \ system32 \ systemprofile。我刚刚将之前创建的.ssh配置文件文件夹复制到该文件夹​​中,现在似乎工作正常。

1

我跑进使用巡航控制系统类似的问题,但对我来说,我运行一个批处理文件来执行所有的git的声明,这是超时,但是从巡航控制系统触发只有当。以用户身份登录并手动执行批处理文件无任何问题。我的批处理文件正在运行构建脚本,其中包括启动一些git bash shell脚本来执行我的git命令的步骤。

例如,我的构建过程将执行该语句:

"c:\program files\git\git.exe" --login -i "myshellscript.sh" 

shell脚本会再进行一些逻辑来清理目录,结账指定的分支或哈希键,推票据等这在完成第一次提取后挂起,这是因为git bash中的$ HOME目录在CC作为服务启动时以及从使用远程桌面进行测试时不同。为了证实,我添加了一个声明为“myshellscript.sh”

echo $HOME 

这回比我登录的桌面用户不同的路径,所以它并没有发现我的SSH密钥的文件,这是造成任何git fetch挂起等待用户响应。我发现this guide用于设置便携式git,它包括手动指定您自己的家庭配置文件的步骤。要做到这一点,找到安装到哪里,并编辑etc \ profile文件。更改线路:

# normalize HOME to unix path 
HOME="$(cd "$HOME" ; pwd)" 

要:

# normalize HOME to unix path 
HOME="/c/Build Server/MyProfile" 
HOME="$(cd "$HOME" ; pwd)" 
相关问题