【发布时间】:2012-03-17 23:52:30
【问题描述】:
我目前为 Jenkins 设置了许多作业,但事实证明很难备份,因为工件存储在作业目录中。我想分别备份作业配置和工件。我确定我记得在某处读到 Jenkins 现在可以选择将它们存储在工作之外,但我找不到这个。
是否有任何配置选项可以做到这一点,同时仍然使工件在 Jenkins 界面上的作业中可见? (即不仅仅是一个将工件复制到其他地方的加载项)
【问题讨论】:
我目前为 Jenkins 设置了许多作业,但事实证明很难备份,因为工件存储在作业目录中。我想分别备份作业配置和工件。我确定我记得在某处读到 Jenkins 现在可以选择将它们存储在工作之外,但我找不到这个。
是否有任何配置选项可以做到这一点,同时仍然使工件在 Jenkins 界面上的作业中可见? (即不仅仅是一个将工件复制到其他地方的加载项)
【问题讨论】:
正如您可以see here 一样,有许多插件可以在您想要/需要的任何地方部署工件,在 FTP、CIFS、Confluence、Artifactory 上......尤其是ArtifactsDeployer,它可以让您复制Jenkins Home 中的工件。
【讨论】:
尝试Use Custom Workspace 构建选项。来自 Jenkins 弹出帮助:
对于 Jenkins 上的每项工作,Jenkins 都会分配一个独特的“工作区” 目录。” 这是代码签出的目录, 构建发生。通常你应该让詹金斯分配和清理 工作区目录,但在某些情况下这是有问题的, 在这种情况下,此选项可让您指定工作区位置 手动。
此选项在多配置项目构建的高级项目属性下也可用。
【讨论】:
Copy Artifact Plugin (https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin) 添加了一个构建步骤,用于将文件从另一个项目的工作区检索到当前并从那里开始工作。
【讨论】:
转到您的 jenkins 配置页面,例如
http://mybuildserver.acme.com/configure
在配置页面的顶部有一个“主目录”设置。点击下方的“高级...”按钮。
现在将“工作区根目录”设置为e:\jenkins-workspaces\${ITEM_FULL_NAME},将“构建记录根目录”设置为e:\jenkins-builds\${ITEM_FULL_NAME} 或类似的东西。
警告:我运行 Jenkins 2.7.2 并注意到某些功能在像这样配置 Jenkins 后无法正常工作。我看到了problems with folders 和problems with the multi-branch project plugin。如果您依赖这些功能,请检查这些问题的状态。
【讨论】:
“为运行准备环境”下的 groovy 脚本将始终在 master 上运行,并且此 groovy 脚本可以创建一个符号链接,指向您真正希望将工件归档到 archive_to 的位置,其中应该包括作业名称和内部版本号:
if (! Files.createSymbolicLink(Paths.get(currentBuild.artifactsDir.path),
Paths.get(archive_to.getCanonicalPath()))) {
throw new RuntimeException("Can't create symlink to archive dir")
}
当然(可悲)当 Jenkins 清除旧版本时,旧工件会留下,因为 jenkins 在清除时不会遵循符号链接,即使 jenkins 拥有符号链接和目标(耻辱)。
我的解决方法可能是从新的存档目录指向一个符号链接,然后,当 jenkins 清除它的存档目录时,新的符号链接将悬空,然后一个 cron 作业可以稍后删除新的作业存档目录
【讨论】:
感谢 Sam,您的帖子为我指明了解决问题的正确方向。 一直在寻找一种方法,如何为多分支项目的构建工作存档建立符号链接。到目前为止,我们过去常常在文件系统中手动搜索正确的文件夹 basename,并将其添加到 Jenkinsfile 中。 现在,我可以简单地使用
jobOutputFolder = currentBuild.rawBuild.artifactsDir.path
并在我的脚本中使用它。 如果安全是一个问题,我可以另外将其作为共享库来实现。
【讨论】: