【发布时间】:2018-10-25 06:05:21
【问题描述】:
在 Jenkins 管道中,当在特定节点上运行构建时,会在该代理上分配一个工作区。我们不设置工作区路径,所以它是自动确定的。我了解,当同一个作业在同一个代理上同时运行时,工作区必须包含执行程序编号以隔离构建。
但是...工作区路径究竟是如何构建的?
我们的构建被分配给一个特定的节点(有 4 个执行器)并且被配置为不允许并发构建。通常是这样分配的:
EXECUTOR_NUMBER=1
WORKSPACE=xxx\yyy\jobname
在某个时候,构建开始在执行程序 2 上运行,但仍使用与以前相同的工作空间。
稍后,构建再次在执行器 1 上运行,但现在使用
WORKSPACE=xxx\yyy\jobname@2
它破坏了构建,因为它无法处理路径中的“@”符号。从那时起,构建继续使用该工作区,即使在构建机器上的执行器数量设置为 1、手动删除代理的工作区目录等之后。
所以我的问题是:
- 工作区路径究竟是如何确定的?为什么会突然加@2 后缀?
- Jenkins 是否会重新使用以前的工作区,而不管执行者编号是多少?
- 如果是这样,这些信息存储在哪里?我在作业配置中找不到与上次使用的工作区路径相关的任何内容...
感谢您的任何见解!
我们正在使用 Jenkins LTS 2.107.2 和最新的 Pipeline 插件(我不知道哪个版本特别感兴趣)。
【问题讨论】: