我目前为 Jenkins 设置了许多作业,但事实证明很难备份,因为工件存储在作业目录中。我想分别备份作业配置和工件。我确定我记得在某处读到詹金斯现在可以选择将它们存储在工作之外,但我找不到这个。
是否有任何配置选项可以做到这一点,同时仍然使工件在 Jenkins 界面上的作业中可见?(即,而不仅仅是将工件复制到其他地方的加载项)
转到您的詹金斯配置页面,例如
http://mybuildserver.acme.com/configure
在配置页面的顶部有一个“主目录”设置。单击其下方的“高级...”按钮。
现在将“工作区根目录”设置为e:\jenkins-workspaces\${ITEM_FULL_NAME}
,并将“构建记录根目录”设置为e:\jenkins-builds\${ITEM_FULL_NAME}
或类似的东西。
警告:我运行 Jenkins 2.7.2 并注意到某些功能在像这样配置 Jenkins 后无法正常工作。我看到了文件夹问题和多分支项目插件问题。如果您依赖这些功能,请检查这些问题的状态。
正如您在此处看到的,有许多插件可以在您想要/需要的任何地方部署工件,在 FTP、CIFS、Confluence、Artifactory 上......尤其是ArtifactsDeployer,它允许您在 Jenkins Home 中制作工件的副本。
谢谢你山姆,你的帖子,它引导我找到正确的方向来解决我的问题。一直在寻找一种方法,如何为多分支项目的构建工作存档建立符号链接。到目前为止,我们过去常常在文件系统中手动搜索正确的文件夹 basename,并将其添加到 Jenkinsfile 中。现在,我可以简单地使用
jobOutputFolder = currentBuild.rawBuild.artifactsDir.path
并在我的脚本中使用它。如果安全是一个问题,我可以另外将其实现为共享库。
尝试Use Custom Workspace
构建选项。从 Jenkins 弹出帮助:
对于 Jenkins 上的每个作业,Jenkins 都会分配一个唯一的“工作区目录”。这是检出代码并进行构建的目录。通常您应该让 Jenkins 分配和清理工作区目录,但在某些情况下这是有问题的,在这种情况下,此选项允许您手动指定工作区位置。
此选项在多配置项目构建的高级项目属性下也可用。
“为运行准备环境”下的 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 作业可以稍后删除新的作业存档目录
复制工件插件( https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin ) 添加了一个构建步骤,用于从另一个项目的工作区检索文件到当前并从那里工作。