Как я могу получить список всех элементов, присутствующих в определенном узле? - PullRequest
0 голосов
/ 21 октября 2019

Я хочу удалить несколько определенных рабочих пространств заданий, присутствующих в подчиненном узле. Для этого я хотел бы получить все элементы, присутствующие в этом конкретном ведомом устройстве, а затем удалить рабочее пространство элемента, соответствующего конкретной работе.

Для этого я знаю,

Jenkins.instance.items дает мне список всех элементов, присутствующих в этом экземпляре Jenkins (в моем случае это будет главный узел).

, тогда как

Jenkins.items дает мне список всех предметов, присутствующих в Jenkins.

Мне нужно что-то вроде

node.items , который даст мне список всех элементов, присутствующих в этом конкретном узле,

, где узел будет одним из Jenkins.instance.nodes

Мой код в настоящее времявыглядит как

for (node in Jenkins.instance.nodes) {
    println("node: " + node.getDisplayName())

    if (node.getDisplayName() == 'abc' || node.getDisplayName() == 'def') {
        performCleanup(node, node.items)
    }
}

def performCleanup(def node, def items) {

    for (item in items) {
            workspacePath = node.getWorkspaceFor(item)
            if (workspacePath == null) {
                println(".... could not get workspace path")
                continue
            }

            pathAsString = workspacePath.getRemote()
            if (workspacePath.exists()) {
                workspacePath.deleteRecursive()
                println(".... deleted from location " + pathAsString)
            } else {
                println(".... nothing to delete at " + pathAsString)
            }        
       }
}

1 Ответ

0 голосов
/ 21 октября 2019

Я полагаю, что узлы jenkins не обладают элементами как таковыми - все «элементы», которые в вашем случае я считаю hudson.model.TopLevelItem, существуют на главном экземпляре, поэтому узлы не содержат информацию о том, что они имеют,Более того, после изучения https://javadoc.jenkins.io/hudson/model/Node.html#getWorkspaceFor-hudson.model.TopLevelItem- исходного кода, похоже, что этот метод вам тоже не поможет - как будто не будет найдено ни одного рабочего пространства, он создаст его, поэтому вместо удаления вы будете рассылать десятки спама. подробнее.

В вашем случае есть еще одна легкая задача: если у вас есть определенные задания, которые вы хотите очистить от определенных узлов - просто итерируйте по каждому дочернему узлу корневого узла - https://javadoc.jenkins.io/hudson/model/Node.html#getRootPath-- и проверьте,папка с именем работы существует - тогда чистая. То есть все рабочие пространства должны быть под корнем, поэтому просто ищите по имени каталога.

...