1

我计划在我们公司建立一个新的 Jenkins 服务器。出于多种原因(易于访问、访问控制等),我想将所有可部署的工件保留在 Jenkins 中。

如果这些可部署的工件保存在 NAS 上,公司会更愿意。这对我来说没问题。我可以将 Jenkins 设置为使用 NAS,并简单地将整个配置保留在那里。我担心某些项目可能会构建较慢,因为它是通过网络连接的远程驱动器。我想我可以将有问题的作业配置为使用本地工作目录来根据需要加快速度。

但是,如果有一种简单的方法来设置 Jenkins 以便工作目录自动在本地计算机上,而其他所有内容都可以在 NAS 上,那就太好了。这将需要更少的设置和我的工作。我不必记住在需要时设置本地工作目录,也不必跟踪哪些作业具有时髦的工作目录。

我看到有两种方法可以做到这一点:

  • 设置 Jenkins,以便将工作目录计算为特定的本地目录。例如,如果作业是 on /mnt/nas/jenkins/jobs/foo,则工作目录将是/opt/jenkins/jobs/foo/opt/local/jenkins/foo

  • 以某种方式配置整个系统,使某些目录在本地,而其他目录在 NAS 上。例如,除了本地存储之外,所有目录/opt/local/jenkins/jobs/foo都在 NAS 上。/opt/local/jenkins/jobs/foo/workdir

有没有办法将 Jenkins 配置为自动使用不同的目录作为工作目录,而不是workdir在作业目录下?或者有没有办法配置环境来做到这一点?

4

2 回答 2

1

我被告知有两种方法可以做到这一点:

  • 设置一个slave,一个slave可以和Jenkins服务器在同一台机器上,让slave做所有的构建。从站将在本地构建,然后将信息发送回将在 NAS 上的 Jenkins 服务器。工作目录是本地的,因为它是进行构建的从站,但工件将在 NAS 上,因为 Jenkins 将在那里存储它们。
  • Jenkins 在其常规配置中有两个新选项。我第一眼就错过了他们。它们位于配置屏幕的最顶部,您必须按“高级”按钮才能看到它们。一个允许您指定工作目录的位置,因此它位于$JENKINS_HOME. 我可以$JENKINS_HOME在 NAS 上进行设置,然后告诉 Jenkins 将本地目录放在本地驱动器上。另一个允许我指定放置构建记录的位置。我可以将构建记录保存在 NAS 上(包括存档的工件),并JENKINS_HOME在本地机器上进行设置。

这正是我一直在寻找的。显然,其他人也需要同样的东西。

于 2012-07-31T19:51:25.187 回答
0

我们在日常工作中通过对 $JENKINS_HOME 下的某些子目录使用符号链接来做到这一点。在我们的案例中,我们希望将所有作业配置、历史记录和已发布的工件存储在 SAN 卷上,并将其余的 Jenkins 文件保留在本地存储上。这只是创建一个从 $JENKINS_HOME/jobs 到 SAN 卷上的目录的符号链接的问题。

在您的情况下,您似乎希望将 $JENKINS_HOME 设置为指向 NAS 上的目录,但将构建的工作区目录驻留在本地存储上。这也很简单,因为每个构建的工作空间都保存在一个子目录中;我认为这是 $JENKINS_HOME/workspace,抱歉我无法确认,因为我们的设置使用单独的构建从属服务器并且没有在主服务器上设置任何执行程序。

使用 NAS 的一个警告;我们在切换到 SAN 之前为 Jenkins 使用了 NAS,发现由于 Jenkins 无法删除由 NAS 上的快照功能创建的临时文件,我们经常会在保存作业配置更改时出错。当我们关闭快照时,问题就消失了。

于 2012-07-30T18:04:12.407 回答