عام طور تي، مون لکيو ڪبرنيٽس آپريٽر (هڪ ايپليڪيشن جيڪا ڪلسٽر وسيلن تائين رسائي آهي) Github تي منصوبي سان ڳنڍيو. اهو نالو اسپيس کي هٽائي ٿو جيڪي پراڻي خصوصيت شاخن سان تعلق رکن ٿيون. Kubernetes ۾، جيڪڏهن توهان هڪ نالي جي جڳهه کي حذف ڪيو، ان نالي جي جڳهه ۾ ٻيا وسيلا پڻ خودڪار طريقي سان ڊهي ويندا آهن.
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
توهان پڙهي سگهو ٿا ته ڪيئن لاڳو ڪجي فيچر شاخن کي ڪلستر ۾ هتي и هتي.
حرڪت
اچو ته ڏسون هڪ عام پل جي درخواست لائف سائيڪل کي مسلسل انضمام سان (continuous integration):
اسان برانچ ڏانهن هڪ نئين عزم کي ڌڪايو.
تعمير تي، لينٽر ۽ / يا ٽيسٽ هلائي رهيا آهن.
Kubernetes پل جي درخواست جي ترتيب کي اڏام تي ٺاهيا ويا آهن (مثال طور، ان جو نمبر مڪمل ٿيل ٽيمپليٽ ۾ داخل ڪيو ويو آهي).
kubectl لاڳو ڪرڻ سان، ترتيبن کي ڪلستر ۾ شامل ڪيو ويو آھي (تعمير).
پل جي درخواست ماسٽر برانچ ۾ ملائي وئي آهي.
جڏهن توهان هڪ پل جي درخواست ۾ ڪم ڪري رهيا آهيو، هر نئين وابستگي جي موجوده مقرري کي پراڻي ڪوڊ لاء ختم ڪيو ويو آهي، ۽ نئين ڪوڊ لاء نئين ترتيب کي ختم ڪيو ويو آهي. پر جڏهن هڪ پل جي درخواست ماسٽر برانچ ۾ ملائي ويندي آهي، صرف ماسٽر برانچ ٺاهي ويندي. نتيجي طور، اهو ظاهر ٿئي ٿو ته اسان اڳ ۾ ئي پل جي درخواست بابت وساري چڪا آهيون، ۽ ان جي ڪبرنيٽس وسيلن اڃا تائين ڪلستر ۾ آهن.
$ minikube start --vm-driver=docker
minikube v1.11.0 on Darwin 10.15.5
Using the docker driver based on existing profile.
Starting control plane node minikube in cluster minikube.
ظاهر ڪيو kubectl ڊفالٽ طور مقامي ڪلستر استعمال ڪريو:
$ kubectl config use-context minikube
Switched to context "minikube".
جيئن ته پيداوار جون ترتيبون پراڻين نالن جي جڳهن کي چيڪ ڪرڻ لاءِ ترتيب ڏنيون ويون آهن، ۽ اسان جي نئين بلند ڪيل ڪلستر وٽ اهي نه آهن، ان ڪري اسان ماحوليات جي متغير کي تبديل ڪنداسين. IS_DEBUG تي true. ھن قدر سان پيٽرول afterDaysWithoutDeploy اڪائونٽ ۾ نه ورتو ويو آهي ۽ نالا اسپيس کي بغير ڪنهن ڏينهن تائين چڪاس نه ڪيو ويو آهي، صرف سب اسٽرينگ جي موجودگي لاء (-pr-).
جيڪڏهن توهان تي آهيو Linux:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
جيڪڏهن توهان تي آهيو macOS:
$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml
$ kubectl get pods --namespace stale-feature-branch-operator
NAME ... STATUS ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s
جيڪڏهن توهان ان جي لاگن کي ڏسو، اهو وسيلن کي پروسيس ڪرڻ لاء تيار آهي StaleFeatureBranch:
$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/first-feature-branch.yml -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/second-feature-branch.yml
...
namespace/project-pr-1 created
deployment.apps/project-pr-1 created
service/project-pr-1 created
horizontalpodautoscaler.autoscaling/project-pr-1 created
secret/project-pr-1 created
configmap/project-pr-1 created
ingress.extensions/project-pr-1 created
namespace/project-pr-2 created
deployment.apps/project-pr-2 created
service/project-pr-2 created
horizontalpodautoscaler.autoscaling/project-pr-2 created
secret/project-pr-2 created
configmap/project-pr-2 created
ingress.extensions/project-pr-2 created
$ kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-1 && kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-2
...
NAME ... READY ... STATUS ... AGE
pod/project-pr-1-848d5fdff6-rpmzw ... 1/1 ... Running ... 67s
NAME ... READY ... AVAILABLE ... AGE
deployment.apps/project-pr-1 ... 1/1 ... 1 ... 67s
...
جتان اسان شامل ڪيو debug, namespaces project-pr-1 и project-pr-2تنهن ڪري، ٻين سڀني وسيلن کي فوري طور تي هٽائڻو پوندو بغير حساب ۾ پيٽرولر وٺڻ جي afterDaysWithoutDeploy. اهو ڏسي سگھجي ٿو آپريٽر لاگز ۾:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Namespace should be deleted due to debug mode is enabled.","namespaceName":"project-pr-1"}
... "msg":"Namespace is being processing.","namespaceName":"project-pr-1","namespaceCreationTimestamp":"2020-06-16 18:43:58 +0300 EEST"}
... "msg":"Namespace has been deleted.","namespaceName":"project-pr-1"}
... "msg":"Namespace should be deleted due to debug mode is enabled.","namespaceName":"project-pr-2"}
... "msg":"Namespace is being processing.","namespaceName":"project-pr-2","namespaceCreationTimestamp":"2020-06-16 18:43:58 +0300 EEST"}
... "msg":"Namespace has been deleted.","namespaceName":"project-pr-2"}
جيڪڏهن توهان وسيلن جي دستيابي کي چيڪ ڪريو، اهي حالت ۾ هوندا Terminating (حذف ڪرڻ واري عمل) يا اڳ ۾ ئي ختم ٿيل (ڪمانڊ آئوٽ خالي آهي).
$ kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-1 && kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-2
...
توھان تخليق جي عمل کي ورجائي سگھو ٿا fixtures ڪيترائي ڀيرا ۽ پڪ ڪريو ته اهي هڪ منٽ اندر ختم ٿي ويا آهن.
ماسٽر برانچ جي مسلسل انضمام جي تعمير دوران خصوصيت شاخ کي ختم ڪريو.
هن کي ڪرڻ لاءِ، توهان کي ڄاڻڻ جي ضرورت آهي ته ڪهڙي پل جي درخواست ان ڪمٽمينٽ سان لاڳاپيل آهي جيڪا تعمير ڪئي پئي وڃي. جيئن ته خصوصيت شاخ جي نالي جي جاء تي شامل آهي پل درخواست جي سڃاڻپ ڪندڙ - ان جو نمبر، يا شاخ جو نالو، سڃاڻپ ڪندڙ کي هميشه ڪمٽ ۾ بيان ڪرڻو پوندو.
ماسٽر برانچ تعميرات ناڪام ٿي رهيا آهن. مثال طور، توھان وٽ ھيٺيون مرحلا آھن: پروجيڪٽ ڊائون لوڊ ڪريو، ٽيسٽ ھلايو، پروجيڪٽ ٺاھيو، رليز ڪريو، نوٽيفڪيشن موڪليو، آخري پل جي درخواست جي خصوصيت شاخ کي صاف ڪريو. جيڪڏهن نوٽيفڪيشن موڪلڻ وقت تعمير ناڪام ٿئي ٿي، توهان کي دستي طور ڪلستر ۾ سڀني وسيلن کي حذف ڪرڻو پوندو.
اهو شايد توهان جو طريقو نه آهي. مثال طور، ۾ جينکنصرف هڪ قسم جي پائيپ لائين ان جي ترتيبن کي ماخذ ڪوڊ ۾ محفوظ ڪرڻ جي صلاحيت جي حمايت ڪري ٿي. جڏهن ويب هوڪس استعمال ڪندي، توهان کي انهن کي پروسيس ڪرڻ لاءِ پنهنجو اسڪرپٽ لکڻو پوندو. هن اسڪرپٽ کي جينڪنز انٽرفيس ۾ رکڻو پوندو، جيڪو برقرار رکڻ ڏکيو آهي.