Чи є спосіб очищення робочої області Jenkins?


101

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

Я створював freestyleпроекти в Дженкінсі.

Відповіді:


91

У Дженкінсі є спосіб очищення робочого простору. Ви можете очистити робочу область перед збіркою або після збірки.

Спочатку встановіть плагін для очищення робочої області .

Щоб очистити робочу область перед збіркою: У розділі Навколишнє середовище встановіть прапорець Видалити робочу область перед початком збірки.

Для того, щоб очистити робочий простір після складання: Під заголовком після складання Дії виберіть Видалити робочий простір , коли збірка проводиться з Add після складання Дії меню, що випадає.


Велике спасибі Нагендрі. Я можу виправити цю проблему за допомогою плагіна очищення робочої області.
Картик

що станеться, якщо я не очищу робочу область? це отримання змін із віддаленої URL-адреси чи просто надбудова над одним і тим же знову і знову?
alphaguy

@alphaguy Jenkins створює нову робочу область для кожної запущеної вами збірки, тож якщо ви не видалите робочі області, то зрештою на вашому вузлі не вистачить місця.
Майлз Вінтер,

Чи можемо ми повторно використовувати робочу область .. в даний час, коли я натискаю код, він клонується з сервера git, тоді починаю збирання. Це вимагає тривалого процесу, додаючи додатковий процес для збирання! ми можемо просто вибрати останній коміт? @MilesWinther
alphaguy

@alphaguy Ви можете використовувати довідкове репо, дивіться відповідь тут: stackoverflow.com/a/9932036/6221831
Miles Winther

53

Якщо ви хочете очистити його вручну, для мене з моєю версією jenkins (здавалося, не потрібен додатковий плагін, але хто знає), у лівій колонці є посилання "робоча область", натисніть на ваш проект, потім на "робочій області", тоді під лівою стовпцем під ним відображається посилання "Стерти поточну робочу область". скріншот


4
Я не бачу цього, на жаль. Звичайно, це не плагін?
Йоахім Брайтнер,

2
Хм, здається, що "Плагін очищення робочої області" - це справді один із плагінів, який встановлений "за замовчуванням". Однак після його видалення у мене все ще є це посилання, і воно, здається, все ще функціонує. Тож ... не впевнений, звідки це береться. V2.121.3
rogerdpack

2
Це спрацювало, але мені довелося двічі клацнути посилання робочої області: перший перейшов на сторінку «робоча область», другий раз фактично показав посилання «Стерти поточну робочу область». Думаю, це інформація, яку ви можете включити у відповідь.
Gnafu

Яка це версія Дженкінса? Тому що мій не відображає цю опцію (можливо, моя занадто стара).
Педро Трухільо

V2.121.3 не впевнений в інших версіях
rogerdpack

31

Окрім вищезазначених рішень, є і більш "ЗВИЧАЙНИЙ" спосіб - безпосереднє видалення найбільшого споживача простору з машини Linux. Ви можете виконати наступні кроки:

  1. Увійдіть до машини Дженкінса (шпаклівка) введіть тут опис зображення
  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
Не знаю, чому проголосували проти. Це звучить як хороший варіант для адміністраторів Дженкінса. Погодьтеся, не для користувачів, що мають лише читання.
Сайкат

1. Це насправді не відповідає на поставлене запитання і 2. мій сервер Jenkins працює в Windows.
mjaggard

10
@mjaggard Питання поставив хтось інший, і він не згадав, чи стосується це лише Windows. Також він запитав, як очистити робочу область (не обмежуючись інтерфейсом / клієнтом). Я пропускаю тут щось очевидне?
Сайкат

4
Я повністю погоджуюсь з @takias, це видається вірною відповіддю на питання. І хороший, якщо у вас є достатній дозвіл на це.
PhoneixS

1
Це відповідь на "як відновити місце на машині GNU / Linux", не конкретно про jenkins.
Феліпе Альварес

20

Плагін очищення робочої області

У файл Дженкінса додати

cleanWs()

Це видалить робочу область після завершення збірки


3
Я дуже ціную цю відповідь, тому що у мене був встановлений плагін з інших відповідей, але саме це змусило його працювати для мого налаштування. Додавши до цього, я перейшов за посиланнями на той самий плагін в інших відповідях, але cleanWs()не був присутній на цільовій сторінці плагіна як синтаксис для додавання до мого Jenkinsfile.
Артур Веборг,

20

ВАЖЛИВО: Безпечно видалити робочу область для заданої роботи Дженкінса до тих пір, поки робота зараз не працює!

Примітка: Я припускаю , що ваш $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 та сортування для перерахування робочих областей у порядку від найбільшого до найменшого. Потім він використовує голову, щоб захопити перші 10:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

2
Це небезпечно, оскільки робочі місця можуть використовувати ці робочі області.
алеб,

13

Ви можете запустити наведений нижче сценарій в Manage 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")
  }
}

це не працює для мене, воно показує java.lang.NullPointerException: Не вдається отримати властивості 'items' для нульового об'єкта.
Вінсент Герріс

3

Якщо припустити питання про очищення робочої області поточної роботи, ви можете запустити:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*

2

не дозволяється коментувати, отже:

Відповідь від Upen працює чудово, але ні, якщо у вас є робота Дженкінса в трубопроводі, змішана з роботою у вільному стилі. Не існує такого методу, як 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
Цей додаток більше не містить інформації, яку ця відповідь ще не охопила. Насправді це додає набагато менше
Ліам

0

Якщо ви хочете просто видалити один dir (або файл), ви можете скористатися Groovy і Manage Jenkins → Scripts Console, запустивши сценарій, який видаляє його.

Наприклад, ви можете переглянути файли за допомогою:

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

А потім, коли у вас є папка, яку ви хочете видалити dh, ви можете просто додати наступний код:

dh.deleteDir()

І його буде видалено.

Примітка: Шлях, показаний у прикладі, стосується інсталяції Bitnami Jenkins, ваш може бути іншим.


0

Є варіант зробити це. Налаштування -> Дії після збірки
Опція за замовчуванням принаймні у версії Jenkins 2.236

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.