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:
error comes on line 4 which is the .. "sh "kubectl describe -A pvc ...." line
what do I need to do to fix this?
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