非常抱歉之前的回答没有考虑到您需要保留withCredentials块的情况。请使用以下修改后的代码,以确保withCredentials块在脚本中保留,并且仍然可以正确执行Shell脚本:
pipeline {
agent any
stages {
stage('Execute Script') {
steps {
withCredentials {
sh '''
rm -f /tmp/images_being_used.txt /tmp/images_being_used_sorted.txt
gcloud compute instances list --format="value[](name,zone)" | while IFS=$'\t' read gceName zone ;
do
gcloud compute disks describe ${gceName} --zone ${zone} | grep sourceImage | grep -v sourceImageId | awk -F '/' '{print $NF}' >> /tmp/images_being_used.txt
done
gcloud compute images list --filter="family = ${imageFamily}" --format="value[](name)" > /tmp/all_images_created.txt
cat /tmp/images_being_used.txt | sort -r | uniq > /tmp/images_being_used_sorted.txt
cat /tmp/all_images_created.txt | sort -r | uniq > /tmp/all_images_created_sorted.txt
for imageName in $(grep -Fxv -f /tmp/images_being_used_sorted.txt /tmp/all_images_created_sorted.txt | tail -n +${keepingCopies});
do
gcloud compute images delete ${imageName} --quiet
echo "deleted compute image: ${imageName}"
done
'''
}
}
}
}
}
在这个修改后的脚本中,withCredentials块被保留在sh命令内部,并且仍然可以使用凭证来执行Shell脚本。