2012-01-27 2 views
4

Мы недавно переключились на git для наших нужд управления источником. Мы использовали cruisecontrol.net в течение некоторого времени. Я создал новые задачи в файле конфигурации cc.net и установил с помощью блока управления источником git. Я убедился, что могу использовать git над ssh через командную строку. У меня есть cruisecontrol.net, который отлично работает, когда я запускаю его с консоли.CruiseControl.Net с сбоем git не работает при запуске службы

Однако, как только я запускаю cruisecontrol.net как услугу, git fetch (или clone) истекает. Я попытался создать задачу для запуска процесса cc.exe при запуске компьютера, но результаты совпадают с результатами работы службы. Я установил переменные среды в документации cc.net для использования git, и я установил ssh и сохранил хост и т. Д. Для bitbucket. Служба работает как тот же пользователь, которого я запускаю в консоли.

Любые идеи, как заставить 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>[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

Когда я испытал это, это было потому, что мерзавец кофе- для ввода в консоли. Служба 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

Я столкнулся с подобной проблемой, используя Cruise Control, но для меня я запускал пакетный файл для выполнения всех моих команд git, которые были отключены, но только при срабатывании от Cruise Control. Вход в систему как пользователь и выполнение командного файла вручную без проблем. В моем пакетном файле был запущен скрипт сборки, который включал шаги для запуска некоторых скриптов оболочки git bash для выполнения моих команд git.

Например, мой процесс сборки будет выполнять это заявление:

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

Сценарий оболочки затем выполнить некоторую логику для очистки каталогов, проверка указанного филиала или хэш-ключ, нажмите ноты и т.д. Это зависает после выполнения первой выборки, и это связано с тем, что каталог $ HOME в git bash отличался между тем, когда CC запускается как служба и с того момента, когда я буду тестировать с помощью удаленного рабочего стола. Для того, чтобы подтвердить, я добавил заявление «myshellscript.sh»

echo $HOME 

Это возвращает другой путь, чем когда я вошел, как пользователь настольного, так что он не находил мой SSH ключевых файлов, которые причиняли любого git fetch для зависания ожидания ответа пользователя. Я нашел this guide для настройки портативного git, и он включает в себя шаги для указания собственного профиля дома вручную. Чтобы сделать это, найдите, где была установлена ​​git, и отредактируйте файл etc \ profile.Изменение строки:

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

To:

# normalize HOME to unix path 
HOME="/c/Build Server/MyProfile" 
HOME="$(cd "$HOME" ; pwd)" 
Смежные вопросы