带有git构建的CruiseControl.Net在作为服务运行时失败

带有git构建的CruiseControl.Net在作为服务运行时失败,.net,git,cruisecontrol.net,.net,Git,Cruisecontrol.net,为了满足源代码控制的需要,我们最近转向了git。我们已经使用cruisecontrol.net一段时间了。我在cc.net配置文件中创建了新任务,并使用git源代码控制块设置了。我已经确保可以通过命令行通过ssh使用git。当我从控制台运行cruisecontrol.net时,它工作正常 但是,只要我将cruisecontrol.net作为服务运行,git获取(或克隆)就会超时。我尝试创建一个任务,以便在计算机启动时运行cc.exe进程,但结果与作为服务运行相同。我在cc.net文档中为使用gi

为了满足源代码控制的需要,我们最近转向了git。我们已经使用cruisecontrol.net一段时间了。我在cc.net配置文件中创建了新任务,并使用git源代码控制块设置了。我已经确保可以通过命令行通过ssh使用git。当我从控制台运行cruisecontrol.net时,它工作正常

但是,只要我将cruisecontrol.net作为服务运行,git获取(或克隆)就会超时。我尝试创建一个任务,以便在计算机启动时运行cc.exe进程,但结果与作为服务运行相同。我在cc.net文档中为使用git设置了环境变量,并为bitbucket设置了ssh和保存了主机等。该服务与我在控制台中运行的用户相同

有没有办法让git作为服务运行

示例构建脚本

<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>git@bitbucket.org:*******/*******-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>devserver@*******.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>

http://cc.*******two.co.uk/server/local/project/*******develope/ViewLatestBuildReport.aspx
D:\Integration\*******开发\工作目录
D:\Integration\*********develope\Artifacts
10
git@bitbucket.org:*********/******-2.git
发展
真的
C:\ProgramFiles\Git\cmd\Git.cmd
假的
假的
假的
*******构建服务器
devserver@*********.co.uk
D:\Integration\******Develop\WorkingDirectory
300000
e2prebuild.bat
D:\集成\******开发\脚本
30
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
D:\Integration\******Develop\WorkingDirectory
*********sln先生
/p:配置=发布/v:诊断
建造
900
D:\CruiseControl\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll
e2deploy.bat
D:\集成\******开发\脚本
900
ecrondeploy.bat
D:\集成\******开发\脚本
900
生成失败时从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>

从*******开发人员触发的生成(强制生成)
D:\Integration\*********develope\Artifacts
强制构建
2012-01-26
15:10:27
例外情况
3.
成功
D:\Integration\*********develope\Artifacts\*********develope_ListenFile.xml
3.
*********发展
http://cc.*********.co.uk/server/local/project/*******develope/ViewLatestBuildReport.aspx
*********发展
D:\Integration\*******开发\工作目录
成功
3.
25/01/2012 15:15:29

CruiseControl.net版本:1.5.7256.1

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

当我遇到这种情况时,是因为git在控制台提示输入。CCNet服务通常以更高的权限运行(比普通登录用户),因此请尝试以管理员身份运行Git Bash,执行
Git clone…
,并确保控制台上没有必须绕过的提示。另外,再次检查您是否真的以服务用户的身份运行;所有SSH密钥和已知主机都是按用户保存的。

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

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

"c:\program files\git\git.exe" --login -i "myshellscript.sh"
然后,shell脚本将执行一些逻辑来清理目录、签出指定的分支或散列键、推送注释等。这将在执行第一次获取后挂起,这是因为git bash中的$HOME目录在CC作为服务启动时和我使用远程桌面测试时是不同的。为了确认,我在“myshellscript.sh”中添加了一条语句

这返回的路径与我以桌面用户身份登录时不同,因此它找不到我的ssh密钥文件,这导致任何git获取挂起等待用户响应。我找到了设置便携式git的方法,其中包括手动指定您自己的主页配置文件的步骤。为此,请查找git的安装位置,并编辑etc\profile文件。更改行:

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


当我遇到这种情况时,是因为git在控制台提示输入。CCNet服务通常以更高的权限运行(比普通登录用户),因此请尝试以管理员身份运行Git Bash,执行
Git clone…
,并确保控制台上没有必须绕过的提示。另外,再次检查您是否真的以服务用户的身份运行;所有SSH密钥和已知主机都是按用户保存的。您好,您能否添加一个答案,以便我可以将其标记为这样。我将添加一个更详细的答案,但有管理员权限的用户作为不同的配置文件运行到同一个用户,而没有管理员权限,这才是真正的解决方案,因为我意识到这只是找到了正确的路径。
# normalize HOME to unix path
HOME="$(cd "$HOME" ; pwd)" 
# normalize HOME to unix path
HOME="/c/Build Server/MyProfile"
HOME="$(cd "$HOME" ; pwd)"