簡體   English   中英

主 Jenkins 是否會跟蹤在從節點上創建的動態作業?

[英]Does a master Jenkins keep track of a dynamic job created on a slave node?

在 Jenkins 作業構建中,使用 Groovy 腳本,我們可以動態創建新作業。 更多關於這一點

我們有一個主節點和從節點的架構。


我們創建任何 Jenkins 作業(比如some-pipeline-job ),這些some-pipeline-job顯然在主 Jenkins 上配置。

在觸發此作業的構建( some-pipeline-job )時,構建可以在任何從節點上運行。


結果:

1)此作業( some-pipeline-job )構建為每個構建創建了一個工作空間,該工作空間可以在任何從節點上運行

2) 這個作業 ( some-pipeline-job ) 有 Groovy 代碼在運行時創建一個新的動態作業 (比如job23 ),在它的構建中


目標:

跨從屬節點構建的任何作業的工作區的磁盤管理,使用此過程中提到的第二步,基於一些標准,如 numberOfDaysOld 構建等...


1)

cloudbees-support 中提到的第二步能否為跨多個從屬 Jenkins 節點運行的特定作業( some-pipeline-job )的所有構建清理工作空間?

2)

詹金斯大師是否有關於在運行時由some-pipeline-job創建的這個動態作業( job23 )的信息? 如何確保在主 Jenkins 中跟蹤(配置)動態作業?

3)

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

有幾種清潔工作區的策略。 最簡單的方法是在結帳步驟中使用 WipeWorkspace 擴展。

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

你似乎需要更復雜的東西。 您可以使用hudson.model.Hudson.instance.slaves列出 jenkins 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 {} \;"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM