如何移动Jenkins构建记录根目录
我对如何移动“构建记录根目录”感到困惑。现在这是我的配置: 因此,在磁盘上,对于多分支管线,它如下所示: 工作空间: 工作: 因此,对于我的作业“WindToolsService”,配置如何移动Jenkins构建记录根目录,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我对如何移动“构建记录根目录”感到困惑。现在这是我的配置: 因此,在磁盘上,对于多分支管线,它如下所示: 工作空间: 工作: 因此,对于我的作业“WindToolsService”,配置${ITEM_ROOTDIR}/builds将产生以下路径: C:\Jenkins\jobs\WindToolsService\branches\develop\builds 现在我想将整个C:\Jenkins\jobs目录移动到一个新磁盘上,正确的设置是什么 我们尝试了以下操作,但没有成功,在我尝试生成
${ITEM_ROOTDIR}/builds
将产生以下路径:
C:\Jenkins\jobs\WindToolsService\branches\develop\builds
现在我想将整个C:\Jenkins\jobs目录移动到一个新磁盘上,正确的设置是什么
我们尝试了以下操作,但没有成功,在我尝试生成作业时,重新创建了C:\Jenkins\jobs文件夹
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安装会更容易我明白了,当你有多个分支作业、组织文件夹或常规文件夹时,文件夹结构在这两个变量之间变化,这是非常糟糕的!从好的方面来说,应该可以创建一个使用正确的文件夹结构进行迁移的脚本,我将尝试创建一个!