0

在 Jenkins 作业构建中,使用 Groovy 脚本,我们可以动态创建新作业。更多关于这个

我们有一个主节点和从节点的架构。


我们创建任何some-pipeline-job在主 Jenkins 上配置的Jenkins作业(例如) 。

在触发此作业的构建 ( some-pipeline-job) 时,构建可以在任何从节点上运行。


结果:

1)此作业(some-pipeline-job)构建为每个构建创建一个工作区,可以在任何从节点上运行

2) 这个作业some-pipeline-jobjob23


目标:

使用此过程中提到的第二步,基于 numberOfDaysOld 构建等一些标准,跨从节点构建任何作业的工作空间的磁盘管理...


1)

cloudbees-support中提到的第二步能否为some-pipeline-job跨多个从属 Jenkins 节点运行的特定作业()的所有构建清理工作区?

2)

主 Jenkins 是否有关于job23由 , 在运行时创建的动态作业 ( ) 的信息some-pipeline-job?如何确保在主 Jenkins 中跟踪(配置)动态作业?

3)

如果是, cloudbees-support中提到的第二步是否可以负责清理job23构建的工作区?

4

1 回答 1

1

有几种清洁工作空间的策略。最简单的方法是在结帐步骤中使用 WipeWorkspace 扩展。

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

你似乎需要更详细的东西。你可以列出詹金斯奴隶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
        }
    }
}

并执行类似 find 的 sh 命令来删除旧文件夹。

script {
    def numberOfDaysOld = 10
    shAllSlaves "find /path/to/base/dir/* -type d -ctime +${numberOfDaysOld } -exec rm -rf {} \;"
}
于 2020-01-17T18:40:48.717 回答