多个工作共用同一工作空间

80

我有一份名为“开发”的工作和另一个名为“代码分析”的项目。目前,我们有两个不同的工作和工作空间,但是使用相同的代码; 有没有办法可以将同一工作空间用于多个工作呢?
我检查了Jenkins中可用的插件,但没有找到合适的插件。


3
你可以使用自定义工作空间。https://dev59.com/KWIj5IYBdhLWcg3wMiYu - KeepCalmAndCarryOn
4
如果您使用相同的工作区,您需要确保没有并发,并且可以正确地跟踪两者之间的版本修订。如果正在分析代码时开发作业开始检查代码,则可能会发生并发。此网站上有关于如何防止此类问题的插件(和答案)。 (完全透明化披露:我们尝试过共享工作区,但最终决定使用克隆工作区插件和单独的工作区效果更好。) - jwernerny
1
为了轻松实现并发,可以从开发任务中触发分析任务,并在分析任务上检查高级项目选项“当上游项目正在构建时阻止构建”。 - Paul Hicks
4个回答

89
假设你的“开发”Jenkins工作区是/var/workspace/job1。在“代码分析”作业的配置页面中,在标签常规下点击高级...,选择选项使用自定义工作区并将与你的“开发”作业相同的工作区/var/workspace/job1输入即可。

25
这是一条不错的路线...但我会更进一步,使用https://wiki.jenkins-ci.org/display/JENKINS/inheritance-plugin来继承${WORKSPACE},这样它就不必硬编码在所有工作中了——这将更容易维护。 - thekbb
5
@thekbb,这可能是一个选择,但与JobConfigHistory插件一起使用时会出现Stack Overflow问题。在维护者纠正这个问题之前,对于任何需要JobConfigHistory插件但使用继承的作业的人来说,它都是无用的。 - Jon L.
工作区目录在主节点(job/<jobname>/workspace)和从节点(workspace/<jobname>)之间不同。因此,硬编码涉及脚本和插件。 - rickfoosusa
根据 https://wiki.jenkins-ci.org/display/JENKINS/inheritance-plugin 的说法,stackoverflow 仍然是一个问题。 - Rob Kielty
1
请注意,在Jenkins 2.147版本中设置自定义工作区,请转到您的项目的“常规”选项卡,然后单击“高级...”按钮,您将看到“使用自定义工作区”复选框。 - Lyserty

8

如果您找不到使用自定义工作区,请在项目的配置>常规>高级>使用自定义工作区下查找。


6

有一个Jenkins插件,可以让你创建共享工作空间,并将其设置在需要从该特定仓库中读取文件的每个作业上。

用例:

与您所需的类似,首先从同一Git存储库中创建两个作业,然后转到“管理Jenkins”,并创建一个共享工作空间。并指向它,在您需要从这些文件中读取的每个作业上。

Jenkins插件

https://wiki.jenkins-ci.org/display/JENKINS/Shared+workspace+plugin#


附注:您应该查看“已知问题”可能会影响您的需求。

有时,在刚复制的作业上,共享空间URL参数不会在第一次“保存”时保存到配置中,您需要保存两次才能确保保存成功。

^^ 这个问题仍未解决,我尝试过,仍然会发生。经过多次保存(只是为了确定),作业可以正常运行。


2
我尝试了继承插件,哇!当我只有一个小钉子时,那个插件就像一把大锤子。
我最终添加了一个“触发其他项目的参数化构建”后置操作,其中包括“在同一节点上构建”和一个“预定义参数”。下游作业需要定义相同名称的参数(WORKSPACE_PARENT),但可以将其留空。然后,在“常规”>“高级”下定义具有自定义工作区的下游作业。
我选择了后置操作,因为构建作业的实际成功与下游构建的结果无关(目前如此)。如果您想将下游作业的结果提升到父作业,则需要将其添加为构建任务,而不是后置操作。
对于我所需的内容,它非常有效。
父级的后置构建任务: Parent's post-build task 子级的自定义工作区: Child's custom workspace

简单而优雅的解决方案!其他人请注意:此解决方案需要您安装Parameterized Trigger插件https://plugins.jenkins.io/parameterized-trigger/。 - Perspectivus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接