2012-01-27 51 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)" 
相關問題