Jenkins 管道中的 deleteDir、cleanWs 和 'WsCleanup' 有什么区别?

What is the difference between deleteDir, cleanWs, and 'WsCleanup' in Jenkins pipeline?

Jenkinsfile中清理工作区时都提到了这些(例如)。但是,好像有些已经过时或功能略有不同,我想了解使用哪个。

其中,deleteDir 是最常提到的,显然其他的只是调用 Jenkins 工作区清理插件的不同语法。

功能上有什么区别?推荐哪个?

deleteDir()
cleanWs()
step([$class: 'WsCleanup'])

来自官方文档:

deleteDir: Recursively delete the current directory from the workspace. Recursively deletes the current directory and its contents. Symbolic links and junctions will not be followed but will be removed. To delete a specific directory of a workspace wrap the deleteDir step in a dir step.

因此,deleteDirWorkflow Basic Steps 插件(管道插件的一个组件)的方法。

cleanWs: Delete workspace when build is done.

似乎 cleanWs() 只是 Workspace Cleanup Pluginstep([$class: 'WsCleanup']) 的新版本。

据我了解,deleteDircleanWs 之间略有不同:cleanWs 有更多选项(如 cleanWhenAbortedcleanWhenFailure 等。 ) 并且使用起来更加灵活,但是建议只在构建完成时使用(不确定我们是否可以在构建执行开始时使用它)。另一方面,我们可以使用 deleteDir 步骤在构建执行之前擦除工作空间。

更新 1:
post 构建 cleanWs 步骤也可以考虑构建状态,这就是为什么它应该只在构建执行后使用。
但是,在 ws-cleanup 插件下也有 preBuildCleanup 步骤。您可以在 the plugin page.

上使用 preBuildCleanupcleanWs 检查示例 (DSL)

更新 2:
@aaron-d-marasco 指出最好不要在 docker 图像中使用 deleteDir。 您可以在 this open bug.

中查看详细信息