Yunus King
Yunus King

Reputation: 1271

Cannot conditionally remove a directory inside the workspace using basic Jenkins pipeline steps

I am trying to remove the directory junit located in the workspace of my Jenkins job using scripted Pipeline which looks somewhat like this:

node {
        stage('Build') {

            checkout scm
            app = docker.build("...")
        }

        stage('Test') {


                app.withRun("--name = ${CONTAINER_ID} ...") {

                    // sh "mkdir -p junit"
                    // sh "rm -rf junit/"
                    dir "junit" {
                        deleteDir
                    }


                    sh "docker exec ${CONTAINER_ID} /bin/bash -c 'source venv/bin/activate && python run.py test -x junit'"

                    sh "docker cp ${CONTAINER_ID}:/home/foo/junit junit"
                }
        }

        junit 'junit/*.xml'
}

However I am getting the following (red haring?) error, e.g.

java.lang.ClassCastException: hudson.tasks.junit.pipeline.JUnitResultsStep.testResults expects class java.lang.String but received class org.jenkinsci.plugins.workflow.cps.CpsClosure2

However when I am using the shell steps:

sh "mkdir -p junit"
sh "rm -rf junit/"

It works as expected. What am I doing wrong?

Upvotes: 0

Views: 689

Answers (1)

Alexey Prudnikov
Alexey Prudnikov

Reputation: 1123

Try to use parentheses:

dir ("junit") {
    deleteDir()
}

Upvotes: 1

Related Questions