如何在作业开始前清除Jenkins管道中的工作区

如何在作业开始前清除Jenkins管道中的工作区,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我需要在构建开始之前清除工作区。我尝试在阶段中使用cleanDir(),但在声明性管道中,签出首先发生,当运行cleadDir阶段时,签出的代码也会被清除,这是不需要的。在声明性管道中签出之前,如何清除工作区?类似的操作应该可以: env.WORKSPACE = pwd() sh "rm ${env.WORKSPACE}/* -fr" 一种稍有不同的方法是先使用来隐藏代码: stash includes: 'src/**', name: 'sou

我需要在构建开始之前清除工作区。我尝试在阶段中使用
cleanDir()
,但在声明性管道中,签出首先发生,当运行
cleadDir
阶段时,签出的代码也会被清除,这是不需要的。在声明性管道中签出之前,如何清除工作区?

类似的操作应该可以:

            env.WORKSPACE = pwd()
            sh "rm ${env.WORKSPACE}/* -fr"

一种稍有不同的方法是先使用来隐藏代码:

stash includes: 'src/**', name: 'source-code'
之后,您可以删除当前工作区中的所有内容。在以后的阶段中,您可以再次简单地修改源代码:

unstash 'source-code'

隐藏/取消存储的另一个优点是,您可以使用它在多个jenkins节点之间共享文件。

使用VCS的方式,使用Git run

git clean -fdx

事实上,我必须根据管道插件的最新变化修改我的答案,例如GitHub Branch Source Plugin 2.2.0 with

除了可以配置的不同分支发现行为外,现在还可以定义要采取的其他步骤,包括签出前清理(以及签出后清理):

然后,管道执行中的结果输出将

因此,非常接近于自己调用的
git clean

stage('Git') {
            steps {
                step([$class: 'WsCleanup'])
                checkout scm
            }
        }

WsCleanup在SCM配置的其他行为中执行添加清除存储库和强制克隆的技巧,如下图所示:


当从步骤调用时,这也会删除签出代码。这会按照您的要求删除整个工作区。我得到一份工作,在签出代码之前我会这样做,所以这对我来说有点意义。当你说在签出代码之前,你会在管道的下一步签出代码吗?看起来@StephenKing answer是最简单的方法。一次成功,投入实际项目并检查影响。同意
gitclean
是一个非常好的解决方案。我认为隐藏/取消隐藏的方法无论如何都值得分享,因为它在多从节点环境中运行时非常方便。@StephenKing-Hmm我的vcs中很少有GIG的代码。在这种情况下,在詹金斯结账无论如何都是痛苦的。。此外,还有什么更有效的选项可以在节点之间共享代码?我在更新后注意到了这个选项。如果我们有一个多管道作业,并且可能不必删除所有分支。在这种情况下,git clean使它变得更容易。如果有办法删除这里的.git文件夹,我会很高兴的。它有点被破坏了,而且在git上很难重置here@MartinKosicky只需添加一个步骤
sh('rm-rf.git/')
?我指的是管道拉动阶段。不执行管道这比我见过的所有其他解决方案都简单,它还显示在输出中清除的文件。这将从此目录中删除工作区目录,并可能导致检索当前目录时出现
错误:getcwd:无法访问父目录:没有此类文件或目录
。在分配工作空间后,最好将
sh'rm-rf*'
作为第一阶段的第一步。
stage('Git') {
            steps {
                step([$class: 'WsCleanup'])
                checkout scm
            }
        }