Sannu! Reshen fasali (aka tura samfoti, aikace-aikacen bita) - wannan shine lokacin da ba kawai babban reshe aka tura ba, har ma kowane jan buƙatun zuwa URL na musamman. Kuna iya bincika ko lambar tana aiki a cikin yanayin samarwa; ana iya nuna fasalin ga wasu masu shirye-shirye ko ƙwararrun samfur. Yayin da kuke aiki a cikin buƙatun ja, kowane sabon ƙaddamarwa na yanzu don tsohuwar lambar ana share shi, kuma ana fitar da sabon aikin sabon lambar. Tambayoyi na iya tasowa lokacin da kuka haɗa buƙatun ja zuwa babban reshen. Ba kwa buƙatar reshen fasalin, amma albarkatun Kubernetes har yanzu suna cikin gungu.
Ƙari game da rassan fasali
Hanya ɗaya don yin rassan fasali a Kubernetes shine amfani da wuraren suna. A takaice, tsarin samarwa yayi kama da haka:
Gabaɗaya, na rubuta Kubernetes Operator ( aikace-aikacen da ke da damar yin amfani da albarkatu cluster ), hanyar haɗi zuwa aikin akan Github. Yana cire wuraren suna waɗanda ke cikin tsoffin rassan fasali. A cikin Kubernetes, idan kun share sarari suna, sauran albarkatun da ke cikin wannan filin suna kuma ana share su ta atomatik.
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
Kuna iya karanta game da yadda ake aiwatar da rassan fasali cikin tari a nan и a nan.
Motsawa
Bari mu kalli tsarin buƙatun rayuwa na yau da kullun tare da ci gaba da haɗawa (continuous integration):
Muna tura sabon alkawari zuwa reshe.
A kan ginin, ana gudanar da linters da/ko gwaje-gwaje.
Ana haifar da saitin buƙatun Kubernetes akan tashi (misali, an saka lambar sa cikin samfurin da aka gama).
Yin amfani da kubectl, ana ƙara jeri zuwa gungu (aikewa).
An haɗa buƙatar ja zuwa cikin babban reshe.
Yayin da kuke aiki a cikin buƙatun ja, kowane sabon ƙaddamarwa na yanzu don tsohuwar lambar ana share shi, kuma ana fitar da sabon aikin sabon lambar. Amma idan aka haɗa buƙatun ja zuwa babban reshe, babban reshe ne kawai za a gina. A sakamakon haka, ya zama cewa mun riga mun manta game da buƙatar ja, kuma albarkatun Kubernetes har yanzu suna cikin gungu.
Alamar sunan sarari Substring da ake buƙata don tace wuraren suna don buƙatun ja daga wasu wuraren suna. Misali, idan tarin yana da sunayen sunaye masu zuwa: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, sannan 'yan takarar sharewa za su kasance habr-back-end-pr-17, habr-back-end-pr-33.
Alamar bayan KwanakiBa tare da Aiwatar da su ba da ake buƙata don share tsoffin wuraren suna. Misali, idan an ƙirƙiri sararin suna 3 дня 1 час baya, kuma siga ya nuna 3 дня, za a share wannan filin suna. Hakanan yana aiki a cikin kishiyar shugabanci idan an ƙirƙiri filin suna 2 дня 23 часа baya, kuma siga ya nuna 3 дня, wannan filin suna ba za a share shi ba.
Akwai ƙarin siga guda ɗaya, yana da alhakin sau nawa don bincika duk wuraren suna kuma bincika kwanaki ba tare da turawa ba - duba Kowane Minti. Ta hanyar tsoho daidai yake 30 минутам.
$ 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.
Mun nuna kubectl yi amfani da gungu na gida ta tsohuwa:
$ kubectl config use-context minikube
Switched to context "minikube".
Tun da an saita saitunan samarwa don bincika tsoffin wuraren suna, kuma sabon rukunin mu da aka ɗaga ba shi da su, za mu maye gurbin canjin yanayi. IS_DEBUG a kan true. Da wannan darajar siga afterDaysWithoutDeploy ba a la'akari da wuraren suna ba a bincika kwanaki ba tare da turawa ba, kawai don abin da ya faru na substring (-pr-).
Idan kun kunna Linux:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
Idan kun kunna 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
Idan ka duba rajistan ayyukansa, yana shirye don aiwatar da albarkatun StaleFeatureBranch:
Mai aiki ya amsa kuma a shirye yake ya duba wuraren suna:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Stale feature branch is being processing.","namespaceSubstring":"-pr-","afterDaysWithoutDeploy":1,"checkEveryMinutes":1,"isDebug":"true"}
Shigar fixtures, mai dauke da wuraren suna guda biyu (project-pr-1, project-pr-2) da su deployments, services, ingress, da sauransu:
$ 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
Muna duba cewa duk albarkatun da ke sama an yi nasarar ƙirƙira su cikin nasara:
$ 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
...
Tunda muka hada debug, wuraren suna project-pr-1 и project-pr-2, don haka duk sauran albarkatun dole ne a share su nan da nan ba tare da la'akari da ma'auni ba afterDaysWithoutDeploy. Ana iya ganin wannan a cikin rajistan ayyukan aiki:
$ 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"}
Idan ka duba wadatar albarkatun, za su kasance cikin matsayi Terminating (tsarin sharewa) ko an riga an goge (fitarwa umarni fanko ne).
$ 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
...
Kuna iya maimaita tsarin halitta fixtures sau da yawa kuma a tabbata an cire su a cikin minti daya.
Sauran hanyoyin
Menene za a iya yi maimakon ma'aikacin da ke aiki a cikin gungu? Akwai hanyoyi da yawa, dukansu ajizai ne (kuma gazawar su na al'ada ne), kuma kowa ya yanke shawara da kansa abin da ya fi dacewa ga wani aikin:
Share reshe na fasali yayin ci gaba da haɓaka ginin babban reshe.
Don yin wannan, kuna buƙatar sanin wace buƙatun ja ya shafi ƙaddamarwa da ake ginawa. Tun da fasalin sunan reshe ya ƙunshi mai gano buƙatun ja - lambarsa, ko sunan reshe, koyaushe dole ne a ƙayyade mai ganowa a cikin ƙaddamarwa.
Babban ginin reshe yana kasawa. Misali, kuna da matakai masu zuwa: zazzage aikin, gudanar da gwaje-gwaje, gina aikin, yin saki, aika sanarwa, share fasalin fasalin buƙatun ja na ƙarshe. Idan ginin ya gaza lokacin aika sanarwa, dole ne ku share duk albarkatun da ke cikin gungu da hannu.
Ba tare da mahallin da ya dace ba, share rassan sifofi a cikin babban ginin ba a bayyane yake ba.
Wataƙila wannan ba shine tsarin ku ba. Misali, in Jenkins, nau'in bututun guda ɗaya ne kawai ke goyan bayan ikon adana saitunan sa a cikin lambar tushe. Lokacin amfani da ƙugiya na gidan yanar gizo, kuna buƙatar rubuta rubutun ku don sarrafa su. Dole ne a sanya wannan rubutun a cikin ƙirar Jenkins, wanda ke da wahalar kiyayewa.