Search code examples
shelljenkinskubernetesjenkins-pipeline

Error in writing script in Jenkins as a Job


I am writing a script to run in Jenkins as a job - which deletes kubernetes pvc's:

node('example') {
    docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-creds') {
         docker.image('example').inside() {
            sh "kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Mounted By:.*$" | grep -B 2 "<none>" | grep -E "^Name:.*$|^Namespace:.*$" | cut -f2 -d: | paste -d " " - - | xargs -n2 bash -c 'kubectl -n ${1} delete pvc ${0}'"
         }
    }
}

Now when I add this in the Jenkins item configure script area... it is giving me this error:

enter image description here

  • error comes on line 4 which is the .. "sh "kubectl describe -A pvc ...." line

  • what do I need to do to fix this?


Solution

  • I think the easiest way is to surround your command using ''' (3 x single quotation mark).
    I've created example to illustrate you how it may work.

    First I created two PVCs (block-pvc,block-pvc2) that should be removed by the script.

    # kubectl get pvc -A
    NAMESPACE   NAME         STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    default     block-pvc    Pending                                                     9m45s
    test        block-pvc2   Pending                                                     9m42s
    

    Then I added command to my pipeline:

    sh '''
        ./kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Used By:.*$" | grep -B 2 "<none>" | grep -E "^Name:.*$|^Namespace:.*$" | cut -f2 -d: | paste -d " " - - | xargs -n2 bash -c './kubectl -n ${1} delete pvc ${0}'
    '''
    

    As a result in the Console Output of this build we can see that it works as expected:

    persistentvolumeclaim "block-pvc" deleted
    persistentvolumeclaim "block-pvc2" deleted