Дженкинс: Есть ли способ очистить рабочее пространство Дженкинса?

104

Как я могу очистить рабочее пространство в Jenkins? Я использую AccuRevкак инструмент контроля версий.

Создавал freestyleпроекты в Jenkins.

Картик
источник

Ответы:

95

В Jenkins есть способ очистить рабочее пространство. Вы можете очистить рабочее пространство перед сборкой или после нее.

Сначала установите плагин очистки рабочей области .

Чтобы очистить рабочее пространство перед сборкой: В разделе « Среда сборки» установите флажок « Удалить рабочее пространство перед запуском сборки».

Чтобы очистить рабочую область после сборки: Под заголовком Действия после сборки выберите Удалить рабочую область после завершения сборки в раскрывающемся меню « Добавить действия после сборки» .

Нагендра Сингх
источник
Большое спасибо, Нагендра. Я могу решить эту проблему с помощью плагина очистки рабочей области.
Karthik
что будет, если я не уберу рабочее пространство? извлекает ли он изменения с удаленного URL-адреса или просто строит одно и то же снова и снова?
alphaguy
@alphaguy Jenkins создает новое рабочее пространство для каждой запускаемой вами сборки, поэтому, если вы не удалите рабочие пространства, в конечном итоге на вашем узле закончится свободное место.
Майлз Винтер,
Можем ли мы повторно использовать рабочую область ... в настоящее время, когда я нажимаю код, который он клонирует с сервера git, затем запускаю сборку. Это требует длительного процесса добавления дополнительных компонентов в процесс сборки! мы можем просто выбрать последний коммит? @MilesWinther
alphaguy
@alphaguy Вы можете использовать эталонное репо, см. ответ здесь: stackoverflow.com/a/9932036/6221831
Майлз Винтер
53

Если вы хотите очистить его вручную, для меня с моей версией jenkins (похоже, не нужно было устанавливать дополнительный плагин, но кто знает), в левом столбце есть ссылка «рабочая область», нажмите на свой проект, затем в «рабочем пространстве», под ним в левом столбце появится ссылка «Удалить текущее рабочее пространство». Скриншот

Роджердпак
источник
5
К сожалению, я этого не вижу. Уверены, что это не плагин?
Йоахим Брайтнер
2
Хм, похоже, что «Плагин очистки рабочей области» действительно является одним из плагинов, который устанавливается «по умолчанию». Однако после его удаления у меня все еще есть эта ссылка, и, похоже, она все еще работает. Итак ... не знаю, откуда это. V2.121.3
rogerdpack
2
Это сработало, но мне пришлось дважды щелкнуть ссылку рабочей области: первый раз перейти на страницу «рабочая область», второй раз действительно показать ссылку «Удалить текущую рабочую область». Думаю, это информация, которую вы можете включить в ответ.
Gnafu
Какая это версия Дженкинса? Потому что мой не показывает эту опцию (вероятно, мой слишком старый).
Педро Трухильо
V2.121.3 не уверен в других версиях
rogerdpack
32

Помимо вышеперечисленных решений, есть более «ОБЩИЙ» способ - напрямую удалить самого большого потребителя пространства с машины Linux. Вы можете выполнить следующие шаги:

  1. Войдите в машину Jenkins (Putty) введите описание изображения здесь
  2. cd к пути установки Jenkins

Используя ls -lart для вывода списка скрытых папок, обычно установка jenkin помещается в папку .jenkins /

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. перечислить места для папок

Use df -h показать дисковое пространство на высоком уровне

du -sh ./*/ для вывода общего объема памяти для каждой подпапки в текущем пути.

du -a /etc/ | sort -n -r | head -n 10 перечислит 10 лучших каталогов, занимающих дисковое пространство, в / etc /

  1. Удалить старую сборку или другую папку большого размера

Обычно папка ./job/ или ./workspace/ может быть самой большой папкой. Пожалуйста, зайдите внутрь и удалите необходимую вам базу (НЕ удаляйте всю папку).

rm -rf theFolderToDelete

введите описание изображения здесь

Кевин Ли
источник
3
Не уверен, почему проголосовал против. Звучит как хороший вариант для администраторов Jenkins. Согласитесь, не для пользователей "только для чтения".
Saikat
1. Это не совсем ответ на заданный вопрос и 2. мой сервер Jenkins работает в Windows.
mjaggard 07
10
@mjaggard Вопрос был задан кем-то другим, и он не упомянул, только ли это для Windows. Также он спросил, как очистить рабочее пространство (не ограничиваясь интерфейсом / клиентом). Я упускаю здесь что-нибудь очевидное?
Saikat
4
Я полностью согласен с @takias, это кажется правильным ответом на вопрос. И хороший, если у вас есть на это разрешение.
PhoneixS
1
Это ответ на вопрос «как мне освободить место на машине GNU / Linux», а не конкретно для Дженкинса.
Фелипе Альварес
21

Плагин очистки рабочей области

В файле Jenkins добавьте

cleanWs()

Это приведет к удалению рабочей области после завершения сборки.

Waranlogesh
источник
4
Я очень ценю этот ответ, потому что у меня был установлен плагин из других ответов, но это то, что заставило его работать для моей настройки. В дополнение к этому я следил за ссылками на тот же плагин в других ответах, но cleanWs()не присутствовал на целевой странице плагина в качестве синтаксиса для добавления в мой Jenkinsfile.
Артур Уэборг
21

ВАЖНО: можно безопасно удалить рабочую область для данного задания Jenkins, если задание в данный момент не выполняется!

Примечание: Я предполагаю , что ваш $JENKINS_HOMEустановлен по умолчанию: /var/jenkins_home.

Очистите одно рабочее место

rm -rf /var/jenkins_home/workspaces/<workspace>

Очистите все рабочие места

rm -rf /var/jenkins_home/workspaces/*

Очистите все рабочие места, за некоторыми исключениями

Этот использует grep для создания белого списка:

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

Очистите 10 самых больших рабочих мест

Здесь используются du и sort для перечисления рабочих пространств в порядке от наибольшего к наименьшему. Затем он использует голову, чтобы захватить первые 10:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}
Шервуд Каллауэй
источник
2
Это опасно, поскольку рабочие места могут использовать эти рабочие области.
алеб
13

Вы можете запустить приведенный ниже скрипт в консоли управления JenkinsScripts Console, чтобы удалить рабочие области всех заданий за один раз. Мы сделали это, чтобы освободить место в файловой системе.

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}
Upen
источник
это не работает для меня, это показывает java.lang.NullPointerException: Невозможно получить "элементы" свойства для нулевого объекта.
Винсент
3

Предполагая, что вопрос касается очистки рабочей области текущего задания, вы можете запустить:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*
алеб
источник
2

не разрешено комментировать, поэтому:

Ответ от Upen работает отлично, но не в том случае, если у вас есть задания Jenkins Pipeline Jobs, смешанные с Freestyle Jobs. Нет такого метода, как DoWipeWorkspace для конвейерных заданий. Поэтому я изменил сценарий, чтобы пропустить их:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding() && !(item instanceof WorkflowJob))
  {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

при необходимости вы также можете фильтровать по именам вакансий: item.getDisplayName().toLowerCase().contains("release")

Ахшнейд
источник
1

Вам нужно будет установить этот плагин, прежде чем появятся указанные выше параметры.

Плагин очистки рабочей области

Этот плагин добавляет флажок во все конфигурации заданий, чтобы вы могли удалить всю рабочую область перед запуском каких-либо шагов (включая систему управления версиями).

Это полезно, чтобы убедиться, что вы всегда начинаете с известной точки, чтобы гарантировать, как ваша сборка будет работать.

Кейр
источник
3
Пожалуйста, добавьте информацию, которую содержит ваша ссылка. Ответ только по ссылке - это не то, что мы ищем в SO! :)
Chilion
2
В этом добавлении нет дополнительной информации, которую еще не охватил этот ответ . На самом деле
Лиам
1

Есть возможность это сделать. Настроить -> Действия после сборки.
Эта опция по умолчанию присутствует как минимум в Jenkins версии 2.236.

францискод
источник
0

Если вы хотите просто удалить один каталог (или файл), вы можете использовать Groovy и Manage Jenkins → Scripts Console запустить скрипт, который его удаляет.

Например, вы можете просмотреть файлы с помощью:

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

А затем, когда у вас есть папка, которую вы хотите удалить dh, вы можете просто добавить следующий код:

dh.deleteDir()

И он будет удален.

Примечание. Путь, показанный в примере, предназначен для установки Bitnami Jenkins, ваш путь может быть другим.

PhoneixS
источник