У нашего сервера Jenkins есть работа, которая работает три дня, но ничего не делает. Нажатие на маленький крестик в углу ничего не дает, и журнал вывода консоли тоже ничего не показывает. Я проверил наши серверы сборки, и на самом деле эта работа, похоже, вообще не выполняется.
Есть ли способ сказать Дженкинсу, что работа «выполнена», отредактировав какой-то файл или блокировку или что-то еще? Поскольку у нас много рабочих мест, мы не хотим перезагружать сервер.
Ответы:
Перейдите в «Управление Jenkins»> «Консоль скриптов», чтобы запустить скрипт на вашем сервере, чтобы прервать зависание потока.
Вы можете получить все живые темы
Thread.getAllStackTraces()
и прервать ту, которая висит.ОБНОВИТЬ:
Приведенное выше решение с использованием потоков может не работать на более поздних версиях Jenkins. Чтобы прервать замороженные конвейеры, вместо этого обратитесь к этому решению (от alexandru-bantiuc ) и выполните:
источник
t -> println(t.getName());
t.getName()=="SOME NAME"
?t.stop
вместо этого позвонить :Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
У меня тоже была такая же проблема и я ее исправил через консоль Jenkins.
Перейдите в «Управление Jenkins»> «Консоль скрипта» и запустите скрипт:
Вам нужно просто указать свои JobName и JobNumber.
источник
Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();
после выполнения этого и еще одного перезапуска jenkins сборка зомби наконец исчезла.finish
AbstractBuild нет ни метода, ни FreeSyleBuild, ни MavenModulesetBuildgroovy.lang.MissingMethodException: No signature of method: hudson.model.FreeStyleBuild.finish() is applicable for argument types: (hudson.model.Result, java.io.IOException) values: [ABORTED, java.io.IOException: Aborting build] Possible solutions: find(), findAll(), find(groovy.lang.Closure) at
Если у вас есть Multibranch Pipeline -job (и вы являетесь администратором Jenkins), используйте в консоли сценариев Jenkins этот скрипт:
С https://issues.jenkins-ci.org/browse/JENKINS-43020
Если вы не уверены, какое полное имя (путь) задания, вы можете использовать следующий фрагмент, чтобы вывести полное имя всех элементов:
С https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs
источник
Я использую плагин мониторинга для этой задачи. После установки плагина
Поиск по названию работы, которая висит
Название темы начнется так
Executor #2 for master : executing <your-job-name> #<build-number>
Нажмите красную круглую кнопку в правой части таблицы желаемой работы
источник
Однажды я столкнулся со сборкой, которую не удалось остановить с помощью «Консоли сценариев». Наконец я решил проблему с этими шагами:
источник
Первое предлагаемое решение довольно близко. Если вы используете stop () вместо interrupt (), это даже убивает сбегающие потоки, которые бесконечно выполняются в отличном системном скрипте. Это убьет любую сборку, которая работает для работы. Вот код:
источник
contains
здесь некорректно и опасно - если ваше задание называется «Выполнить тесты», оно также уничтожит все задания с именами «Выполнить тесты - Интеграция», «Выполнить тесты - Модуль» и т. Д. Любой, кто использует это, должен быть осторожен, чтобы не неожиданно прекратить работу, не связанную с этимБез того , чтобы использовать консоль сценария или дополнительные плагины, вы можете просто прервать сборки , введя
/stop
,/term
или/kill
после URL сборки в вашем браузере.Дословная цитата из приведенной выше ссылки:
источник
Если у вас есть неудержимая работа конвейера, попробуйте следующее:
Дженкинс поймет, что работа должна быть прекращена и остановит сборку
источник
Плагин Build-Timeout может пригодиться для таких случаев. Это убьет работу автоматически, если это займет слишком много времени.
источник
Я думаю, что уже слишком поздно, чтобы ответить, но моя помощь некоторым людям.
У меня недостаточно репутации, чтобы публиковать изображения извините.
Надеюсь, что это может помочь
источник
Главный ответ почти сработал для меня, но у меня была одна большая проблема: у меня было очень большое количество (~ 100) заданий по зомби из-за особенно неудачного перезапуска Jenkins, поэтому вручную находили имя задания и номер сборки каждого и каждая работа зомби, а затем их ручное убийство были невозможны. Вот как я автоматически нашел и убил работу зомби:
Этот скрипт перебирает все сборки всех заданий и использует,
getResult().equals(null)
чтобы определить, завершено ли задание или нет. Сборка, которая находится в очереди, но еще не запущена, не будет повторяться (так как эта сборка не будетjob.builds
), а уже завершенная сборка будет возвращать что-то другое, чемnull
дляbuild.getResult()
. Законно запущенное задание также будет иметь результат сборкиnull
, поэтому убедитесь, что у вас нет запущенных заданий, которые вы не хотите уничтожать, прежде чем запускать это.Многократные вложенные циклы в основном необходимы для обнаружения каждой ветви / PR для каждого репозитория в проекте Multichranch Pipeline; если вы не используете многоотраслевые конвейеры, вы можете просто перебрать все ваши задания напрямую, например
Jenkins.instance.getItems().each
.источник
runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
Я посмотрел на источник Jenkins, и кажется, что то, что я пытаюсь сделать, невозможно, потому что кажется, что остановка работы выполняется через прерывание Thread. Я понятия не имею, почему работа висит, хотя ..
Редактировать:
Возможные причины неудержимой работы:
источник
Я обычно использую jenkins-cli в таких случаях. Вы можете скачать банку со страницы
http://your-jenkins-host:PORT/cli
. Тогда бегиВспомогательная информация:
Вы также можете передать ряд сборок, как
350:400
. Общая помощь доступна при запускеКоманда помощи Контекстное
delete-builds
поисточник
Ответ Александру Бантука помог мне остановить сборку, но мои исполнители все еще были заняты. Я смог очистить статус занятого исполнителя, используя следующие
источник
Была такая же проблема, но не было потока стека. Мы удалили задание, используя этот фрагмент в консоли Jenkins. Замените имя и номер здания на свое.
источник
Недавно я наткнулся на узел / агент, у которого один исполнитель занимал несколько дней сборкой «X» конвейерного задания, хотя на этой странице заданий утверждалось, что сборка «X» больше не существует (отбрасывается после 10 последующих сборок (!), Так как настроено в конвейере работы). Проверено, что на диске: сборка "X" действительно пропала.
Решение: это был агент / узел, который ошибочно сообщил, что занятый исполнитель был занят сборкой "X". Прерывание потока этого исполнителя немедленно освободило его.
Другие ответы рассмотрены:
Thread.getAllStackTraces()
: нет подходящей темы.getBuildByNumber()
: неприменимо, так как сборки больше не было!Обновление:
я снова столкнулся с подобной ситуацией, когда Исполнитель был занят в течение нескольких дней (все еще существующей) законченной сборкой конвейера. Этот фрагмент кода был единственным рабочим решением.
источник
У меня была та же проблема в последние полчаса ...
Не удалось удалить сборку зомби, запущенную в моем многоотраслевом конвейере. Даже перезапуск сервера с помощью пользовательского интерфейса или даже из командной строки через
sudo service jenkins restart
блокировал выполнение ... Сборка не была остановлена ... Она всегда появлялась заново.Я был очень раздражен, но ... при просмотре журнала сборки я нашел что-то интересное в конце журнала:
Части, помеченные красным цветом, являются «расстраивающими частями» ... Как вы можете видеть, я всегда хотел прервать сборку из пользовательского интерфейса, но она не работала ...
Но есть гиперссылка с текстом
Click here to forcibly terminate running steps
... (первая зеленая) Теперь я нажал на ссылку ...) После выполнения ссылки появилось сообщение оStill paused
другой ссылкеClick here to forcibily kill entire build
(вторая зеленая) После нажатия на эту ссылку сборка, наконец, тоже была тяжелой убит ...Так что, похоже, это работает без каких-либо специальных плагинов (за исключением самого сборочного модуля многоотраслевого конвейера).
источник
tail
или просмотра журнала, чтобы получить ссылку?<a href="#" onclick="new Ajax.Request('[server]/jenkins/job/[pipeline_name]/[job_number]/kill'); return false">Click here to forcibly kill entire build</a>
У меня было много заданий по зомби, поэтому я использовал следующий скрипт:
источник
Это работает для меня каждый раз:
Благодаря funql.org
источник
Если бы одна и та же проблема случилась со мной дважды, единственным исправлением было перезапустить сервер Tomcat и перезапустить сборку.
источник
Утилита, которую я написал под названием jkillthread, может использоваться для остановки любого потока в любом Java-процессе, при условии, что вы можете войти на компьютер, на котором запущена служба, под той же учетной записью.
источник
ОЧЕНЬ ПРОСТОЕ РЕШЕНИЕ
Причиной, по которой я видел эту проблему, была неправильная
http
ссылка на странице вместо тогоhttps
, чтобы остановить работу. Все, что вам нужно сделать, это отредактироватьonclick
атрибут на html странице, выполнивonclick
атрибуту, чтобы изменить его значениеs
чтобыhttp
иметьhttps
Используйте скриншот для справки
источник
Использование консоли Script на https: // my-jenkins / script
источник
Ни одно из этих решений не помогло мне. Мне пришлось перезагрузить машину, на которой был установлен сервер. Неубиваемая работа теперь ушла.
источник
Вы можете просто скопировать работу и удалить старую. Если не имеет значения, что вы потеряли старые журналы сборки.
источник
Вот как я исправил эту проблему в версии
2.100
с Blue Oceanssh
в мою коробку Дженкинсcd ~/.jenkins
(где я держу Дженкинс)cd job/<job_name>/branches/<problem_branch_name>/builds
rm -rf <build_number>
После этого вы можете при желании изменить число в
nextBuildNumber
(я сделал это).Наконец, я перезапустил jenkins (
brew services restart jenkins
). Этот шаг, очевидно, будет отличаться в зависимости от того, как вы управляете и устанавливаете Jenkins.источник
Войдите в интерфейс с синим океаном. Попробуйте остановить работу оттуда.
источник