Jenkins 系列: (六) Jenkins 构建workspace

时间:2023-01-24 15:11:09


有同学反映Jenkins工作区磁盘满的问题,今天我们谈一下Jenkins构建的workspace相关话题,涉及Jenkins 核心的概念 Job,build 以及slave等概念。


构建工作区(workspace)


Jenkins 支持分布式构建,用户可以使用Master 和Slave 进行构建,无论构建运行在哪里,每一个构建(build)都需要一个workspace 目录作为构建的工作区,执行job配置中指定的任务。


使用master进行构建


除了一些Jenkins相关的维护Jobs外,我们不推荐使用master运行常规编译等构建任务。


如果使用了master运行构建,默认构建的工作区 <Jenkins home>/jobs/<job name>/workspace,当然这个工作区会占用master 上的磁盘空间大小,一会影响Jenkins home的大小,数据备份的时候 workspace 可以不用备份。


使用slave进行构建

使用slave进行构建,构建的工作区会创建在slave上,具体的默认路径是  <Slave remote root directory>/workspace/<job name> , 当然这个工作区会占用slave的磁盘空间,slave磁盘空间满会造成构建失败。


并发构建

每一个构建build都需要一个独立的workpsace运行任务,当job支持并发构建的时候,也就是说同一个job同时有2个以上的build在运行,会使用同一个workspace 进行构建吗?  当然不会,否则多个构建搅在一起,构建结果就没有任何可信度了。


默认情况下,Jenkins 会创建单独的workspace目录,为并发的构建创建 <Slave remote root directory>/workspace/<job name>_n  作为工作区, 比如job test 同时运行2个构建,第一个构建使用 <Slave remote root directory>/workspace/test 作为工作区,第二个构建使用 <Slave remote root directory>/workspace/test_2 作为工作区。


关于构建工作区的清理


默认情况下,构建工作区workspace是不会自动清理的,也就是说每一个job的build结束后,workspace被遗留在master或者slave对应的工作区目录下,Jenkins的本意是为下次构建复用工作区目录,这样一些代码下载,编译等可以加速。


但是,也带来了一些问题,就是遗留工作区对磁盘空间的浪费,尤其当磁盘空间满时,就会造成master宕机,slave上构建失败等问题。因此,及时清理构建工作区很有必要。


构建工作区清理,可以使用插件  https://wiki.jenkins.io/display/JENKINS/Workspace+Cleanup+Plugin


可以选择构建前,构建后清理工作区。


Jenkins 系列: (六) Jenkins 构建workspace