Как быстро удалить много старых сборок Pipeline Job на сервере Jenkins? - PullRequest
2 голосов
/ 17 апреля 2020

У меня есть сервер Jenkins, на котором, похоже, много места занято без всякой причины. Покопавшись, я заметил, что старые сборки не отбрасывались для веток, которые хранятся (например, master). Я могу исправить все проекты, добавив параметр «keep x builds», но у меня есть много проектов, и мне нужно сразу же почистить диск.

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

Как быстро очистить кучу проектов, пока еще оставьте, скажем, 5 сборок на ветку в проекте Pipeline?

1 Ответ

3 голосов
/ 17 апреля 2020

У меня хорошие новости - я нашел страницу, описывающую очистку сборки в Jenkins wiki , но она не охватывает работы с конвейерами. Кроме того, время ожидания истекает, если у вас много проектов.

Мне удалось создать новый скрипт на основе старого, который обрабатывает тайм-аут (но вам, вероятно, придется запускать его несколько раз).

Вставьте это в Script Console в Manage Jenkins, найденном в разделе Tools and Actions:

// Inspired by https://wiki.jenkins.io/display/JENKINS/Manually+run+log+rotation+on+all+jobs
// Check out these files for more info on LogRotator and WorkflowJob
// https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/tasks/LogRotator.java
// https://github.com/jenkinsci/workflow-job-plugin/blob/master/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java
import hudson.tasks.*;
import org.jenkinsci.plugins.workflow.job.*;

def jobs = Jenkins.instance.getAllItems(WorkflowJob.class);
def numJobsToKeep = 5;
def rotator = new LogRotator(-1, numJobsToKeep);

def startTime = System.currentTimeMillis();

for (WorkflowJob job : jobs) {
    if (System.currentTimeMillis() - startTime > 20000) {
        // Bail out if it takes too long, just run the script again until it feels "instant"
        break;
    }
    rotator.perform(job);
}

Это освободило более 50 ГБ памяти на моей машине!

Я бы также порекомендовал установить какой-то глобальный дискондер сборки, чтобы избежать повторения. CloudBees имеет хорошее руководство .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...