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

时间:2018-02-27 15:18:43

标签: jenkins jenkins-pipeline

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

所以在磁盘上,对于多分支pipline,它看起来像这样: 工作区: Workspace

工作: jobs

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

C:\Jenkins\jobs\WindToolsService\branches\develop\builds

现在我想将整个C:\ Jenkins \ jobs目录移动到新磁盘,使用的正确设置是什么?

我们尝试过以下操作,但它没有用,我尝试构建作业时重新创建了C:\ Jenkins \ jobs文件夹。

  1. 将“C:\ Jenkins \ jobs”的内容复制到“E:\ builds”
  2. 将“C:\ Jenkins \ jobs”重命名为“C:\ Jenkins \ jobs_temp”以确保新设置正常工作
  3. 重新启动Jenkins
  4. 我在这里缺少什么?

    更新

    好的 - 这真的不可能,至少我想这样做。

    原始路径结构为:C:\Jenkins\jobs\JOBNAME\branches\BRANCHNAME\builds,但新路径为E:\builds\JOBNAME\BRANCHNAME\builds。这意味着我无法更改设置并剪切和粘贴jobs文件夹的内容,目录结构不同。 job文件夹还包含除构建记录之外的其他作业信息。 移动整个jenkins装置我会更干净,更容易

1 个答案:

答案 0 :(得分:3)

jobs文件夹包含构建历史之外的一些其他信息,例如它包含实际的作业定义(more info here)。此外,选项Build Record Root Directory仅影响位于作业文件夹中的构建。因此,您需要保留作业文件夹和作业的所有子文件夹(但不是所有作业文件夹中的builds文件夹)。

显然Jenkins以不同方式扩展变量ITEM_FULL_NAMEITEM_ROOTDIR。这意味着将jobs文件夹复制到新位置并不是一件简单的事情,尤其是在使用多分支管道,矩阵作业,组织文件夹或普通文件夹时。有关详细信息,请参阅评论中的讨论

无论如何,考虑到这一点,这里有一个更新的答案(旧的答案如下):

由于复制文件夹并不简单,因此需要对文件夹结构进行转换,这意味着最好让Jenkins进行移动。以下groovy脚本将通过展开不同的宏将构建文件夹移动到正确的位置。该脚本在Script ConsoleManage Jenkins - > Script Console)中执行。将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"

请注意,如果实例很大且包含构建历史记录的负载,则可能需要几分钟或几小时。您可以通过文件系统监视脚本的进度,即转到新的构建文件夹并检查已移动的作业。

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

  1. 转到Manage Jenkins - > Configure System并将Build Record Root Directory更改为E:\builds\${ITEM_FULL_NAME}\builds
  2. 重新启动Jenkins
  3. OLD ANSWER:

    现在,考虑到这一点,以下内容应该有效:

    1. 等到没有正在进行的构建,并阻止在这些过程的其余部分中启动新构建。
    2. C:\jenkins\jobs的内容复制到E:\builds
    3. 转到Manage Jenkins - > Configure System并将Build Record Root Directory更改为E:\builds\${ITEM_FULL_NAME}\builds
    4. 重新启动Jenkins
    5. 启动新版本并确保将新版本信息写入E:\builds\下的文件夹。例如。如果我们有作业X且之前的版本是123,那么当我们为X开始构建124的新版本时,应创建文件夹E:\builds\X\builds\124,并创建文件夹{{ 1}}应该
    6. 稍后,当您看到所有内容都正常工作时,您可以删除C:\jenkins\jobs\X\builds\124下的旧版本文件夹。