Как я могу очистить рабочее пространство в Jenkins? Я использую AccuRev
как инструмент контроля версий.
Создавал freestyle
проекты в Jenkins.
Ответы:
В Jenkins есть способ очистить рабочее пространство. Вы можете очистить рабочее пространство перед сборкой или после нее.
Сначала установите плагин очистки рабочей области .
Чтобы очистить рабочее пространство перед сборкой: В разделе « Среда сборки» установите флажок « Удалить рабочее пространство перед запуском сборки».
Чтобы очистить рабочую область после сборки: Под заголовком Действия после сборки выберите Удалить рабочую область после завершения сборки в раскрывающемся меню « Добавить действия после сборки» .
Если вы хотите очистить его вручную, для меня с моей версией jenkins (похоже, не нужно было устанавливать дополнительный плагин, но кто знает), в левом столбце есть ссылка «рабочая область», нажмите на свой проект, затем в «рабочем пространстве», под ним в левом столбце появится ссылка «Удалить текущее рабочее пространство».
Помимо вышеперечисленных решений, есть более «ОБЩИЙ» способ - напрямую удалить самого большого потребителя пространства с машины Linux. Вы можете выполнить следующие шаги:
Используя ls -lart для вывода списка скрытых папок, обычно установка jenkin помещается в папку .jenkins /
[xxxxx ~]$ ls -lart drwxrwxr-x 12 xxxx 4096 Feb 8 02:08 .jenkins/
Use df -h
показать дисковое пространство на высоком уровне
du -sh ./*/
для вывода общего объема памяти для каждой подпапки в текущем пути.
du -a /etc/ | sort -n -r | head -n 10
перечислит 10 лучших каталогов, занимающих дисковое пространство, в / etc /
Обычно папка ./job/ или ./workspace/ может быть самой большой папкой. Пожалуйста, зайдите внутрь и удалите необходимую вам базу (НЕ удаляйте всю папку).
rm -rf theFolderToDelete
Плагин очистки рабочей области
В файле Jenkins добавьте
cleanWs()
Это приведет к удалению рабочей области после завершения сборки.
cleanWs()
не присутствовал на целевой странице плагина в качестве синтаксиса для добавления в мой Jenkinsfile
.
ВАЖНО: можно безопасно удалить рабочую область для данного задания 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/{}
Здесь используются du и sort для перечисления рабочих пространств в порядке от наибольшего к наименьшему. Затем он использует голову, чтобы захватить первые 10:
du -d 1 /var/jenkins_home/workspace \
| sort -n -r \
| head -n 10 \
| xargs -I {} rm -rf /var/jenkins_home/workspace/{}
Вы можете запустить приведенный ниже скрипт в консоли управления Jenkins → Scripts 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 работает отлично, но не в том случае, если у вас есть задания 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")
Вам нужно будет установить этот плагин, прежде чем появятся указанные выше параметры.
Плагин очистки рабочей области
Этот плагин добавляет флажок во все конфигурации заданий, чтобы вы могли удалить всю рабочую область перед запуском каких-либо шагов (включая систему управления версиями).
Это полезно, чтобы убедиться, что вы всегда начинаете с известной точки, чтобы гарантировать, как ваша сборка будет работать.
Есть возможность это сделать. Настроить -> Действия после сборки.
Эта опция по умолчанию присутствует как минимум в Jenkins версии 2.236.
Если вы хотите просто удалить один каталог (или файл), вы можете использовать Groovy и Manage Jenkins → Scripts Console запустить скрипт, который его удаляет.
Например, вы можете просмотреть файлы с помощью:
dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
println(it)
}
А затем, когда у вас есть папка, которую вы хотите удалить dh
, вы можете просто добавить следующий код:
dh.deleteDir()
И он будет удален.
Примечание. Путь, показанный в примере, предназначен для установки Bitnami Jenkins, ваш путь может быть другим.