如何移动Jenkins构建记录根目录

如何移动Jenkins构建记录根目录,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我对如何移动“构建记录根目录”感到困惑。现在这是我的配置: 因此,在磁盘上,对于多分支管线,它如下所示: 工作空间: 工作: 因此,对于我的作业“WindToolsService”,配置${ITEM_ROOTDIR}/builds将产生以下路径: C:\Jenkins\jobs\WindToolsService\branches\develop\builds 现在我想将整个C:\Jenkins\jobs目录移动到一个新磁盘上,正确的设置是什么 我们尝试了以下操作,但没有成功,在我尝试生成

我对如何移动“构建记录根目录”感到困惑。现在这是我的配置:

因此,在磁盘上,对于多分支管线,它如下所示: 工作空间:

工作:

因此,对于我的作业“WindToolsService”,配置
${ITEM_ROOTDIR}/builds
将产生以下路径:

C:\Jenkins\jobs\WindToolsService\branches\develop\builds
现在我想将整个C:\Jenkins\jobs目录移动到一个新磁盘上,正确的设置是什么

我们尝试了以下操作,但没有成功,在我尝试生成作业时,重新创建了C:\Jenkins\jobs文件夹

  • 将“C:\Jenkins\jobs”的内容复制到“E:\builds”
  • 将“C:\Jenkins\jobs”重命名为“C:\Jenkins\jobs\u temp”,以确保新设置有效
  • 重新启动詹金斯
  • 我错过了什么

    使现代化 好的-这是不可能的,至少我想这样做

    原始路径结构是:
    C:\Jenkins\jobs\JOBNAME\BRANCHNAME\builds
    ,但新路径是
    E:\builds\JOBNAME\BRANCHNAME\builds
    。这意味着我不能只是改变设置,剪切和粘贴作业文件夹的内容,目录结构是不同的。此外,“作业”文件夹还包含除生成记录之外的其他作业信息。
    只需移动整个jenkins安装,我就会更干净、更容易。

    除了构建历史记录之外,jobs文件夹还包含一些其他信息,例如,它包含实际的作业定义()。此外,选项
    生成记录根目录
    仅影响位于作业文件夹中的生成。因此,您需要保留作业文件夹和作业的所有子文件夹(但不是所有作业文件夹中的builds文件夹)

    显然,詹金斯对变量
    ITEM\u FULL\u NAME
    ITEM\u ROOTDIR
    进行了不同的扩展。这意味着将作业文件夹复制到新位置并不是一件简单的事情,特别是当您使用多分支管道、矩阵作业、组织文件夹或普通文件夹时。有关更多信息,请参阅评论中的讨论

    无论如何,记住这一点,这里有一个更新的答案(下面是旧答案):

    由于它不是直接复制文件夹,因此需要转换文件夹结构,这意味着最好让Jenkins进行移动。下面的groovy脚本将通过展开不同的宏将构建文件夹移动到正确的位置。脚本在
    脚本控制台
    管理Jenkins
    ->
    脚本控制台
    )中执行。将
    newRootBuildsFolder
    更改为需要移动到的位置

    newRootBuildsFolder = new File("E:\builds")
    
    def visitJob(job) {
      if (job instanceof Job) {
        def oldBuildsFolder = job.getBuildDir()
        def newBuildsFolder = new File(newRootBuildsFolder, Jenkins.expandVariablesForDirectory('${ITEM_FULL_NAME}', job.getFullName(), job.getRootDir().getPath()))
        new FilePath(oldBuildsFolder).copyRecursiveTo("**", new FilePath(newBuildsFolder))
      }
    
      if (job instanceof ItemGroup) {
        for (item in job.getItems()) {
          visitJob(item)
        }
      }
    }
    
    visitJob(Jenkins.instance)
    println "Done"
    
    请注意,如果实例很大,并且有构建历史记录,这可能需要几分钟或几个小时。您可以通过文件系统监视脚本的进度,即转到new builds文件夹并检查哪些作业已移动

    执行此脚本后,需要在Jenkins配置中更新builds文件夹

  • 转到
    Manage Jenkins
    ->
    Configure System
    并将
    Build记录根目录更改为
    E:\builds\${ITEM\u FULL\NAME}\builds
  • 重新启动詹金斯
  • 旧答案:

    现在,考虑到这一点,以下措施应该起作用:

  • 等待直到没有生成正在进行,并防止在这些过程的其余部分启动新的生成
  • C:\jenkins\jobs
    的内容复制到
    E:\builds
  • 转到
    Manage Jenkins
    ->
    Configure System
    并将
    Build记录根目录更改为
    E:\builds\${ITEM\u FULL\NAME}\builds
  • 重新启动詹金斯
  • 启动新生成并确保新生成信息写入
    E:\builds\
    下的文件夹。例如,如果我们有作业
    X
    ,以前的版本是123,那么当我们为
    X
    启动新的版本时,应该创建文件夹
    E:\builds\X\builds\124
    ,并且应该创建文件夹
    C:\jenkins\jobs\X\builds\124

  • 稍后,当您看到所有功能都正常工作时,您可以删除
    C:\jenkins\jobs\**\

    下的旧版本文件夹,您是只想移动版本文件夹,还是想移动整个jenkins安装?只需“build record”文件夹,即“C:\jenkins\jobs”的内容我们尝试了这个方法,但是“C:\jenkins\jobs\X\builds\124如果你在
    C:\jenkins\config.xml
    中查找标签
    buildsDir
    ,它读什么?好的,我的设置是错误的,但它仍然不起作用,因为我不能直接复制构建记录。这就是为什么原来的路径结构是:
    C:\Jenkins\jobs\JOBNAME\branchs\BRANCHNAME\builds
    ,但新路径是
    E:\builds\JOBNAME\BRANCHNAME\builds
    。我认为移动整个jenkins安装会更容易我明白了,当你有多个分支作业、组织文件夹或常规文件夹时,文件夹结构在这两个变量之间变化,这是非常糟糕的!从好的方面来说,应该可以创建一个使用正确的文件夹结构进行迁移的脚本,我将尝试创建一个!