在构建开始之前,我需要清空工作区。我尝试在stages中使用cleanDir()
,但是在声明性管道中,检出会首先发生,当带有cleadDir
的阶段运行时,检出的代码也会被清除,这不是所期望的。如何在声明性管道中在检出之前清空工作区?
在构建开始之前,我需要清空工作区。我尝试在stages中使用cleanDir()
,但是在声明性管道中,检出会首先发生,当带有cleadDir
的阶段运行时,检出的代码也会被清除,这不是所期望的。如何在声明性管道中在检出之前清空工作区?
实际上,根据管道插件的最新更改(例如具有JENKINS-43507的GitHub分支源插件2.2.0),我必须修改我的答案。
除了可以配置的不同分支发现行为外,现在还可以定义其他要执行的步骤,包括检出前清理(以及检出后清理):
在管道执行中产生的输出将会是:Cleaning workspace > git rev-parse --verify HEAD # timeout=10 Resetting working tree > git reset --hard # timeout=10 > git clean -fdx # timeout=10
因此,与自己调用git clean
非常接近。
stage('Git') {
steps {
step([$class: 'WsCleanup'])
checkout scm
}
}
WsCleanup可以解决这个问题。
sh 'rm -rf *'
。 - scrutarish 'rm -rf *'
非常危险,因为你可能不在你认为的目录中 - 如果你在 /
目录下,你很可能刚刚删除了你的操作系统。 - NoobSkywalkergit clean -fdx
类似这样的代码应该可以正常工作:
env.WORKSPACE = pwd()
sh "rm ${env.WORKSPACE}/* -fr"
stash includes: 'src/**', name: 'source-code'
之后,您可以删除当前工作区中的所有内容。在稍后的阶段,您可以简单地unstash源代码:
unstash 'source-code'
stash/unstash 的另一个优点是可以在多个 Jenkins 节点之间共享文件。
git clean
是解决这个问题的一个非常好的方法。不过,无论如何,值得分享的是存储/恢复方法,在多个从节点环境下运行时非常方便。 - fishi0x01
sh('rm -rf .git/')
? - StephenKing