2012-01-27 8 views
4

私たちは最近、私たちのソース管理の必要性のためにgitに切り替えました。私たちはしばらくの間、cruisecontrol.netを使用してきました。私はcc.net設定ファイル内に新しいタスクを作成し、gitソースコントロールブロックを使って設定しました。私はコマンドラインでsshを使ってgitを使うことができるようにしました。私はcruisecontrol.netがうまく動作しているときにコンソールから実行します。CruiseControl.Net with git buildがサービスとして実行されているときに失敗する

しかし、サービスとしてcruisecontrol.netを実行すると、git fetch(またはclone)がタイムアウトします。私は、コンピュータの起動時にcc.exeプロセスを実行するタスクを作成しようとしましたが、結果はサービスとして実行されているのと同じです。私はgitを使うためにcc.netのドキュメントに環境変数を設定しました。私はsshをセットアップし、ホストなどをbitbucketに保存しました。サービスは、コンソールで実行しているのと同じユーザーとして実行されています。

gitをサービスとして実行する方法はありますか?

例が失敗したビルドにCC.Netからスクリプト

<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> 

ログを構築

<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キーと既知のホストはユーザーごとに保存されます。 –

+0

こんにちは、私はそのようにマークすることができますので、あなたは答えを追加できますか?もう少し詳細な答えを追加するつもりだが、管理者権限を持つユーザーが同じユーザーとは別のプロファイルとして実行されるというアイデアは本当の解決策でした。 – ClearCarbon

答えて

3

これは私が経験したとき、gitがコンソールで入力を促しているためです。 CCNetサービスは通常、(通常のログオンユーザよりも)高い権限で実行されるので、Git Bashを管理者として実行し、git clone ...を実行して、コンソールでバイパスする必要がないことを確認してください。また、実際にサービスユーザーとして実行していることを再度確認してください。すべてのSSHキーと既知のホストはユーザーごとに保存されます。

0

[OK]を私はそれを実現しましたユーザー名が同じであっても、私のサービスは別のプロファイルで実行されていました。 git bashを管理者として実行しても(同じユーザでも)私の〜/フォルダがwindows \ system32 \ systemprofileにあることがわかりました。私はちょうどそのフォルダに以前作成した.sshプロファイルフォルダをコピーした、今は正常に動作しているようだ。

1

クルーズコントロールを使用して同様の問題に遭遇しましたが、私にとってはバッチファイルを実行していたので、すべてのgitステートメントを実行していました。ユーザーとしてログインし、問題なく手動でバッチファイルを実行しました。私のバッチファイルはビルドスクリプトを実行していました。これには、gitコマンドを実行するためのgit bashシェルスクリプトをいくつか起動するステップが含まれていました。など、メモを押して、指定された枝やハッシュキーをチェックアウト、シェルスクリプトは、その後、ディレクトリをきれいにするいくつかのロジックを実行することになり

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

これはです:

例えば、私のビルドプロセスがこの文を実行でしょうCCがサービスとして起動するときとリモートデスクトップを使ってテストするときとで、git bashの$ HOMEディレクトリが異なっていたためです。確認のために、私は「myshellscript.sh」

echo $HOME 

これは私がデスクトップユーザーとしてログインしたときよりも別のパスを返していましたので、それがいずれかを引き起こしていた私のsshキーファイルを、見つけることはなかったにステートメントを追加しましたgit fetchを実行して、ユーザーの応答を待機します。ポータブルgitを設定するための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)" 
関連する問題