rashidcmb
rashidcmb

Reputation: 743

How to clear workspace in Jenkins pipeline before job starts

I need to clear workspace before build starts. I tried using cleanDir() in stages, but in the declarative pipeline, check out happens first and when stage with cleadDir runs, checked out code also gets cleared which is not desired. How can we clear the workspace before check out in the declarative pipeline?

Upvotes: 20

Views: 57117

Answers (6)

Oleksandr S.
Oleksandr S.

Reputation: 2024

Add Wipe out repository & force clone in Additional Behaviours of SCM configuration as on picture below:

enter image description here

Upvotes: 3

Mor Lajb
Mor Lajb

Reputation: 2636

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

the WsCleanup does the trick

Upvotes: 15

StephenKing
StephenKing

Reputation: 37610

Actually, I have to revise my answer based on recent changes to the pipeline plugins, e.g. GitHub Branch Source Plugin 2.2.0 with JENKINS-43507.

Besides the different branch discovery behaviours, which can be configured, one can now define additional steps to take, including Clean before checkout (and Clean after checkout):

enter image description here

The resulting output in the pipeline execution will then be

Cleaning workspace
  > git rev-parse --verify HEAD # timeout=10
Resetting working tree
 > git reset --hard # timeout=10
 > git clean -fdx # timeout=10

so, pretty close to the calling git clean yourself.

Upvotes: 20

StephenKing
StephenKing

Reputation: 37610

Use the means of your VCS, with Git run

git clean -fdx

Upvotes: 9

fishi0x01
fishi0x01

Reputation: 3759

A slightly different approach would be to use the stash step to stash your code first:

stash includes: 'src/**', name: 'source-code'

After that you can delete everything in your current Workspace. In a later stage you can simply unstash the source code again:

unstash 'source-code'

Another advantage of stash/unstash is that you can use it to share files between multiple jenkins nodes.

Upvotes: 0

Frankenstein
Frankenstein

Reputation: 693

Something like this should work:

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

Upvotes: 0

Related Questions