Частое IOException с Jenkins с использованием плагина StarTeam
У нас есть сервер Jenkins CI (и несколько подчиненных), работающий на машинах Windows. Наш репозиторий кода находится в StarTeam (отдельный сервер StarTeam), который мы часто опрашиваем. Обычно это работает хорошо!
Тем не менее, время от времени мы видим IOException - удаленная операция не удалась (см. Ниже), которая приводит к сбою сборки и перебивает историю регистрации, что делает невозможным определение того, кто что зарегистрировал во время последующей сборки. Мне нужна помощь в выяснении, почему мы продолжаем видеть эти ошибки:
Ниже приведен пример ошибки, когда сборка выполняется на подчиненном узле:
Fjernbygger имя машины (...) в рабочей области... java.io.IOException: ошибка удаленной операции с файлом: (имя рабочей области) по адресу hudson.remoting.Channel@849755: имя машины по адресу hudson.FilePath.act(FilePath.java:916) в hudson.FilePath.act(FilePath.java:893) в hudson.plugins.starteam.StarTeamSCM.checkout(StarTeamSCM.java:131) в hudson.model.AbstractProject.checkout(AbstractProject.java:1251) в hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:604) в jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86) в hudson.model.AbstractBuild $ AbstractBuildExecution.mojj.jun.jpg.execute(Run.java:1706) в hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) в hudson.model.ResourceController.execute(ResourceController.java:88) в hudson.model.Executor.run(Исполнитель.java:231) Причина: java.io.IOException: удаленный вызов на имя машины не удалось в hudson.remoting.Channel.call(Channel.java:748) в hudson.FilePath.act(FilePath.java:909) ... еще 10 причин: java.lang.NoClassDefFoundError: Не удалось инициализировать класс com.borland.starteam.impl.util.Platform на com.borland.starteam.impl.ClientContext.(неизвестный источник) на com.borland.starteam.impl.Server.(Неизвестный источник) на com.starbase.starteam.Server.(Неизвестный источник) на hudson.plugins.starteam.StarTeamConnection.initialize(StarTeamConnection.java:196) на hudson.plugins. starteam..perform(UserRequest.java:118) в hudson.remoting.UserRequest.perform(UserRequest.java:48) в hudson.remoting.Request$2.run(Request.java:326) в hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72) на java.util.concurrent.FutureTask.run(неизвестный источник) на java.util.concurrent.ThreadPoolExecutor.runWorker(неизвестный Источник) в java.util.concurrent.ThreadPoolExecutor$Worker.run(неизвестный источник) в hudson.remoting.Engine$1$1.run(Engine.java:58) в java.lang.Thread.run(неизвестный источник)
Связано ли это с тем, что Дженкинс не может опрашивать сервер Starteam? Связано ли это с неправильной настройкой плагина starteam на ведомом устройстве? Клиент Starteam (2008 R2, я полагаю?) Установлен на главном и подчиненных узлах. Кроме того, я также следовал инструкциям в этом посте относительно копирования файлов в папку web-inf на главном узле.
Мне нужны указатели относительно того, где я должен начать искать ответы, которые, надеюсь, пролили бы больше информации. Дайте мне знать, если есть важные детали, которые мне нужно предоставить, чтобы прояснить вопрос.
РЕДАКТИРОВАТЬ
Это и это выглядит несколько взаимосвязанным. Моя проблема также решена путем перезагрузки ведомого / перезапуска службы Jenkins, работающей на них. Так это проблема, потому что я запускаю Jenkins как сервис на подчиненных узлах? Служба работает с теми же учетными данными пользователя на ведомых устройствах, что и на главном узле. Или это связано с различными средами JRE на машинах?
1 ответ
NoClassDefFoundError
говорит нам, что проблема в том, что делать с банками starteam на вашем пути к классам. Проблема будет либо в расположении / существовании банок, либо в их версии.
Проверьте, у вас есть оба starteam
а также starteam-bridge
фляги (если у вас есть фляга моста вообще) в вашем web-inf/lib
папку и что у вас нет нескольких копий / версий банку, разбросанных по пути вашего класса.
Другим решением может быть использование более новой версии банок Starteam. Я не видел, чтобы jenkins работал против starteam 2008R2, поэтому для плагина jenkins может потребоваться более новая фляга (более новая фляга будет обратно совместима с вашим сервером).