jenkins - dsl 插件删除作业时删除工作区

标签 jenkins jenkins-job-dsl

我正在使用 jenkins dsl 插件为项目的所有分支生成 jenkins 作业。删除分支时,dsl 插件也会删除相应的 jenkins 作业。

然而,问题是工作区不会与作业一起删除,因此它们最终会弄乱我的磁盘。我发现的一种解决方案是定期列出所有工作区并检查是否存在同名的 jenkins 作业。

我想知道是否有更优雅的解决方案来自动删除刚刚被 dsl 插件删除的 jenkins 作业的过时工作区。

最佳答案

我对此的解决方案是添加另一个运行 Groovy 系统脚本的作业,该脚本清除不再存在或已禁用的作业的所有工作区,并在 DLS 作业之后触发。

  • 安装 Jenkins Groovy plugin
  • 创建自由式工作
  • 勾选构建触发器“在构建其他项目后构建”,并将您的 DSL 作业设置为“要监视的项目”
  • 添加“执行 Groovy 系统脚本”构建步骤,将 Groovy 脚本作为“Groovy 命令”。

  • 我使用以下脚本,基于 this one来自 this answer :
    import hudson.FilePath
    import jenkins.model.Jenkins
    import hudson.model.Job
    
    def deleteUnusedWorkspace(FilePath root, String path) {
      root.list().sort{child->child.name}.each { child ->
        String fullName = path + child.name
    
        def item = Jenkins.instance.getItemByFullName(fullName);
    
        if (item.class.canonicalName == 'com.cloudbees.hudson.plugins.folder.Folder') {
          deleteUnusedWorkspace(root.child(child.name), "$fullName/")
        } else if (item == null) {
          println "Deleting (no such job): '$fullName'"
          child.deleteRecursive()
        } else if (item instanceof Job && !item.isBuildable()) {
          println "Deleting (job disabled): '$fullName'"
          child.deleteRecursive()
        } else {
          println "Leaving: '$fullName'"
        }
      }
    }
    
    for (node in Jenkins.instance.nodes) {
      println "Processing $node.displayName"
      def workspaceRoot = node.rootPath.child("workspace");
      deleteUnusedWorkspace(workspaceRoot, "")
    }
    

    这确实假设您不使用自定义工作区。

    关于jenkins - dsl 插件删除作业时删除工作区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32519829/

    相关文章:

    jenkins - 在项目主页上显示 Jenkins 图

    docker - 如何在不同的代理上运行 Jenkins 并行 cypress?

    jenkins - 如何在 Jenkins Job DSL 中设置构建名称?

    jenkins - 作业 DSL 插件与管道插件

    jenkins - 作业 DSL 管道配置触发器

    windows - Tomcat/Windows下Jenkins中无法删除pom.xml

    android - docker 是否支持容器内数据的所有类型

    jenkins - 如何欺骗 Jenkins 认为所有分支都已经在多分支管道中运行?

    ios - Jenkins 无法在工作区中创建测试报告文件夹

    jenkins - 使用Job DSL读取目录中的文件(类似于readFilesFromDirectory)