Ведущий Дженкинс отслеживает динамическое задание c, созданное на подчиненном узле? - PullRequest
0 голосов
/ 17 января 2020

В рамках сборки заданий Jenkins, используя сценарий Groovy, мы можем динамически создавать новые задания. Подробнее о this .

У нас есть архитектура с одним главным и n-подчиненными узлами.


Мы создаем любое задание Jenkins (скажем, some-pipeline-job) который настраивается на главном Jenkins очевидно .

При запуске сборки этого задания (some-pipeline-job) сборка может выполняться на любом подчиненном узле.


Последствия:

1) Эта сборка задания (some-pipeline-job) создает рабочее пространство для каждой сборки, которая может выполняться на любом подчиненном узле

2) Это задание (some-pipeline-job) имеет код Groovy для создания нового динамического задания c (скажем, job23) во время выполнения в среде его сборки


Цель:

Управление дисками рабочих пространств любой сборки задания на подчиненных узлах с использованием второго шага, упомянутого в этой процедуре , на основе некоторых критериев, таких как сборки numberOfDaysOld, et c ...


1)

Может ли второй шаг, упомянутый в cloudbees-support , позаботиться об очистке рабочих пространств для всех сборок заданного c задания (some-pipeline-job) работать на нескольких подчиненных узлах Jenkins?

2)

Есть ли у главного Jenkins информация об этом динамическом c задании (job23), созданном some-pipeline-job, во время выполнения? Как я могу убедиться, что задание Dynami c отслеживается (настраивается) в главном Jenkins?

3)

Если да, может ли этот второй шаг, упомянутый в cloudbees-support? позаботиться об очистке рабочего пространства job23 build?

1 Ответ

1 голос
/ 17 января 2020

Существует несколько стратегий очистки рабочих пространств. Проще всего было бы использовать расширение WipeWorkspace для этапа оформления заказа.

checkout([
   $class: 'GitSCM',
   branches: scm.branches,
   extensions: scm.extensions + [[$class: 'WipeWorkspace']],
   userRemoteConfigs: scm.userRemoteConfigs
])

Вам, кажется, нужно что-то более сложное. Вы можете перечислить подчиненных jenkins с помощью hudson.model.Hudson.instance.slaves

. Я бы запланировал конвейерное задание, добавил к нему следующие функции

@NonCPS
def onlineSlaves() {
    def slaves = []
    hudson.model.Hudson.instance.slaves.each {
        try {
            def computer = it.computer
            if (!computer.isOffline()) {
                slaves << it.name
            }
        } catch (error) {
            println error
        }
    }
    return slaves
}

// Run a command on each slave in series
def shAllSlaves(unixCmdLine) {
    onlineSlaves().each {
        try {
            node(it) {
                if (isUnix()) {
                    sh "${unixCmdLine}"
                }
            }
        } catch (error) {
            println error
        }
    }
}

и выполнил команду sh, такую ​​как find to удалить старые папки.

script {
    def numberOfDaysOld = 10
    shAllSlaves "find /path/to/base/dir/* -type d -ctime +${numberOfDaysOld } -exec rm -rf {} \;"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...