Esory ny sampana endri-javatra efa lany andro ao amin'ny cluster Kubernetes
Miarahaba! Sampana manasongadina (aka deploy preview, app review) - izany dia rehefa tsy ny sampana master ihany no apetraka, fa koa ny fangatahana misintona tsirairay mankany amin'ny URL tokana. Azonao atao ny manamarina raha miasa amin'ny tontolo famokarana ilay endri-javatra; Raha miasa amin'ny fangatahana fisintonana ianao, dia voafafa ny fandefasana vaovao rehetra amin'izao fotoana izao ho an'ny kaody taloha, ary ny fandefasana vaovao ho an'ny kaody vaovao dia mivoaka. Mety hipoitra ny fanontaniana rehefa natambatrao tao amin'ny sampana master ny fangatahana fisarihana. Tsy mila ny sampana endri-javatra intsony ianao, fa ny loharano Kubernetes dia mbola ao anaty cluster.
Bebe kokoa momba ny sampana endri-javatra
Fomba iray amin'ny fanaovana sampana manasongadina ao amin'ny Kubernetes dia ny fampiasana velarana anarana. Raha fintinina, ny firafitry ny famokarana dia toy izao:
Amin'ny ankapobeny, nanoratra aho Kubernetes Operator (fampiharana afaka miditra amin'ny loharanon-karena), rohy mankany amin'ny tetikasa ao amin'ny Github. Esoriny ny toeran'ny anarana izay an'ny sampana endri-javatra taloha. Ao amin'ny Kubernetes, raha mamafa toerana misy anarana ianao, dia ho voafafa ho azy koa ny loharano hafa ao amin'io habakabaka io.
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
Azonao atao ny mamaky momba ny fomba fametrahana sampana endri-javatra ao anaty cluster eto ΠΈ eto.
Eo amin'ny fananganana dia atao ny linters sy/na fitsapana.
Ny fanefena fangatahan'ny Kubernetes dia amboarina amin'ny sidina (ohatra, ampidirina ao anatin'ilay mΓ΄dely vita ny laharany).
Amin'ny fampiasana kubectl mihatra, ampidirina amin'ny cluster (deploy) ny fanamafisana.
Atambatra amin'ny sampana master ny fangatahana fisarihana.
Raha miasa amin'ny fangatahana fisintonana ianao, dia voafafa ny fandefasana vaovao rehetra amin'izao fotoana izao ho an'ny kaody taloha, ary ny fandefasana vaovao ho an'ny kaody vaovao dia mivoaka. Fa rehefa atambatra amin'ny sampana master ny fangatahana fisintonana dia ny sampana master ihany no hatsangana. Vokatr'izany dia hita fa efa hadinonay ny fangatahana fisintonana, ary ny loharanon-karena Kubernetes dia mbola ao anaty cluster.
Ahoana ny fampiasana
Apetraho ny tetikasa miaraka amin'ny baiko etsy ambany:
fikirana namespaceSubstring ilaina ny manivana ny espace names ho an'ny fangatahana misintona avy amin'ny namespaces hafa. Ohatra, raha manana ireto toerana ireto ny cluster: habr-back-end, habr-front-end, habr-back-end-pr-17, habr-back-end-pr-33, dia ho ny kandidΓ ho fafana habr-back-end-pr-17, habr-back-end-pr-33.
fikirana afterDaysWithoutDeploy ilaina hamafa ny namespaces taloha. Ohatra, raha noforonina ny namespace 3 Π΄Π½Ρ 1 ΡΠ°Ρ miverina, ary manondro ny parameter 3 Π΄Π½Ρ, ho voafafa ity espace name ity. Izy io koa dia miasa amin'ny lalana mifanohitra raha noforonina ny espace 2 Π΄Π½Ρ 23 ΡΠ°ΡΠ° miverina, ary manondro ny parameter 3 Π΄Π½Ρ, tsy ho voafafa ity espace name ity.
Misy paramΓ¨tre iray hafa, izy no tompon'andraikitra amin'ny impiry hanitsiana ny toerana misy anarana rehetra sy hanamarina andro tsy misy fametrahana - checkEveryMinutes. Amin'ny alΓ lan'ny default dia mitovy 30 ΠΌΠΈΠ½ΡΡΠ°ΠΌ.
Minikube hanangana vondrona Kubernetes eo an-toerana.
kubectl - interface tsara andalana ho an'ny fitantanana cluster.
Manangana cluster Kubernetes eto an-toerana izahay:
$ 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.
Manondro izahay kubectl ampiasao ny cluster eo an-toerana amin'ny alΓ lan'ny default:
$ kubectl config use-context minikube
Switched to context "minikube".
Koa satria ny fanamafisana ny famokarana dia namboarina mba hijerena ireo toerana misy anarana taloha, ary tsy manana azy ireo ny cluster vao natsangana, dia hosoloinay ny fari-piainan'ny tontolo iainana. IS_DEBUG amin'ny true. Miaraka amin'io sanda io ny parameter afterDaysWithoutDeploy dia tsy raisina an-tsaina ary tsy voamarika mandritra ny andro tsy misy fanaparitahana ny toerana misy anarana, raha tsy misy ny substring (-pr-).
Raha eo ianao Linux:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
Raha eo ianao 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
Raha mijery ny diariny ianao, dia vonona ny hikarakara loharanon-karena StaleFeatureBranch:
$ 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"}
hametraka fixtures, misy espace roa (project-pr-1, project-pr-2) ary izy ireo deployments, services, ingress, sy ny sisa:
$ 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
Hamarininay fa vita soa aman-tsara ny loharano rehetra etsy ambony:
$ 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
...
Satria nampidirinay debug, namespaces project-pr-1 ΠΈ project-pr-2, noho izany dia tsy maintsy hofafana avy hatrany ny loharanon-karena hafa rehetra tsy misy fiheverana ny parameter afterDaysWithoutDeploy. Izany dia azo jerena ao amin'ny logs operator:
$ 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"}
Raha manamarina ny fisian'ny loharanon-karena ianao dia ho eo amin'ny sata Terminating (fizotry ny famafana) na efa voafafa (foana ny vokatra baiko).
$ 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
...
Azonao atao ny mamerina ny dingana famoronana fixtures imbetsaka ary ataovy azo antoka fa esorina ao anatin'ny iray minitra izy ireo.
safidy
Inona no azo atao fa tsy mpandraharaha iray miasa ao anaty cluster? Misy fomba fiasa maromaro, tsy lavorary avokoa izy rehetra (ary ny lesoka dia subjective), ary ny tsirairay dia manapa-kevitra ho an'ny tenany izay tsara indrindra ho an'ny tetikasa manokana:
Fafao ny sampana endri-javatra mandritra ny fananganana tsy tapaka ny sampana master.
Mba hanaovana izany, mila mahafantatra ianao hoe inona ny fangatahana pull mifandraika amin'ny commit izay atsangana. Koa satria ny anaran'ny sampana endri-javatra dia misy ny famantarana fangatahana fisintonana - ny isany, na ny anaran'ny sampana, dia tsy maintsy apetraka ao amin'ny commit foana ny famantarana.
Tsy nahomby ny fananganana sampana master. Ohatra, manana ireto dingana manaraka ireto ianao: misintona ny tetikasa, manao fitsapana, manangana ny tetikasa, manaova famoahana, mandefa fampandrenesana, mamafa ny sampana manasongadina ny fangatahana farany. Raha tsy mahomby ny fananganana rehefa mandefa fampandrenesana dia tsy maintsy mamafa ny loharano rehetra ao amin'ny cluster ianao.
Raha tsy misy contexte sahaza, dia tsy miharihary ny famafana sampana endri-javatra ao amin'ny master build.
Mety tsy izany no fomba fanaonao. Ohatra, in Jenkins, karazana fantsona iray ihany no manohana ny fahafahana mitahiry ny fandrindrana azy ao amin'ny kaody loharano. Rehefa mampiasa webhooks ianao dia mila manoratra ny scripto manokana mba handaminana azy ireo. Ity script ity dia tsy maintsy apetraka ao amin'ny interface Jenkins, izay sarotra ny mitazona.