Aħna ta 'True Engineering waqqafna proċess għall-kunsinna kontinwa ta' aġġornamenti lis-servers tal-klijenti u rridu naqsmu din l-esperjenza.
Biex nibdew, żviluppajna sistema onlajn għall-klijent u skjerajnaha fil-grupp Kubernetes tagħna stess. Issa s-soluzzjoni ta 'tagħbija għolja tagħna mxiet għall-pjattaforma tal-klijent, li għaliha waqqafna proċess ta' Skjerament Kontinwu kompletament awtomatiku. Grazzi għal dan, aħna aċċelleraw iż-żmien tas-suq - it-twassil ta 'bidliet fl-ambjent tal-prodott.
F'dan l-artikolu ser nitkellmu dwar l-istadji kollha tal-proċess ta' Skjerament Kontinwu (CD) jew il-kunsinna ta' aġġornamenti lill-pjattaforma tal-klijent:
- Kif jibda dan il-proċess?
- sinkronizzazzjoni mar-repożitorju Git tal-klijent,
- assemblaġġ ta 'backend u frontend,
- skjerament awtomatiku ta' applikazzjoni f'ambjent tat-test,
- skjerament awtomatiku għal Prod.
Aħna ser naqsmu d-dettalji tas-setup tul it-triq.
1. Ibda CD
L-Iskjerament Kontinwu jibda bl-iżviluppatur li jimbotta bidliet fil-fergħa tar-rilaxx tar-repożitorju Git tagħna.
L-applikazzjoni tagħna taħdem fuq arkitettura ta’ mikroservizzi u l-komponenti kollha tagħha huma maħżuna f’repożitorju wieħed. Grazzi għal dan, il-mikroservizzi kollha jinġabru u jiġu installati, anki jekk wieħed minnhom inbidel.
Aħna organizzajna xogħol permezz ta' repożitorju wieħed għal diversi raġunijiet:
- Faċilità ta 'żvilupp - l-applikazzjoni qed tiżviluppa b'mod attiv, sabiex tkun tista' taħdem mal-kodiċi kollu f'daqqa.
- Pipeline CI/CD wieħed li jiggarantixxi li l-applikazzjoni bħala sistema waħda tgħaddi mit-testijiet kollha u titwassal lill-ambjent tal-produzzjoni tal-klijent.
- Aħna neliminaw il-konfużjoni fil-verżjonijiet - m'għandniex għalfejn naħżnu mappa tal-verżjonijiet tal-mikroservizz u niddeskrivu l-konfigurazzjoni tagħha għal kull mikroservizz fi skripts Helm.
2. Sinkronizzazzjoni mar-repożitorju Git tal-kodiċi tas-sors tal-klijent
Il-bidliet li jsiru huma awtomatikament sinkronizzati mar-repożitorju Git tal-klijent. Hemm l-assemblaġġ ta 'applikazzjoni huwa kkonfigurat, li titnieda wara l-aġġornament tal-fergħa, u l-iskjerament għall-kontinwazzjoni. Iż-żewġ proċessi joriġinaw fl-ambjent tagħhom minn repożitorju Git.
Ma nistgħux naħdmu mar-repożitorju tal-klijent direttament għaliex għandna bżonn l-ambjenti tagħna stess għall-iżvilupp u l-ittestjar. Aħna nużaw ir-repożitorju Git tagħna għal dawn l-għanijiet - huwa sinkronizzat mar-repożitorju Git tagħhom. Hekk kif żviluppatur ipoġġi bidliet fil-fergħa xierqa tar-repożitorju tagħna, GitLab immedjatament jimbotta dawn il-bidliet lill-klijent.
Wara dan għandek bżonn tagħmel l-assemblaġġ. Tikkonsisti f'diversi stadji: assemblaġġ backend u frontend, ittestjar u kunsinna għall-produzzjoni.
3. L-assemblaġġ tal-backend u l-frontend
Il-bini tal-backend u l-frontend huma żewġ kompiti paralleli li jsiru fis-sistema GitLab Runner. Il-konfigurazzjoni oriġinali tal-assemblaġġ tagħha tinsab fl-istess repożitorju.
GitLab Runner jieħu l-kodiċi mir-repożitorju meħtieġ, jiġborha mal-kmand tal-bini tal-applikazzjoni Java u jibgħatha lir-reġistru Docker. Hawnhekk niġbru l-backend u l-frontend, niksbu immaġini Docker, li npoġġu f'repożitorju fuq in-naħa tal-klijent. Biex timmaniġġja l-immaġini Docker nużaw
Aħna nissinkronizzaw il-verżjonijiet tal-immaġini tagħna mal-verżjoni tar-rilaxx li se tiġi ppubblikata f'Docker. Għal tħaddim bla xkiel għamilna diversi aġġustamenti:
1. Il-kontenituri ma jerġgħux jinbnew bejn l-ambjent tat-test u l-ambjent tal-produzzjoni. Għamilna parametrizzazzjonijiet sabiex l-istess kontenitur ikun jista 'jaħdem mas-settings, il-varjabbli ambjentali u s-servizzi kollha kemm fl-ambjent tat-test kif ukoll fil-produzzjoni mingħajr bini mill-ġdid.
2. Biex taġġorna applikazzjoni permezz ta' Helm, trid tispeċifika l-verżjoni tagħha. Nibnu l-backend, il-frontend u naġġornaw l-applikazzjoni - dawn huma tliet kompiti differenti, għalhekk huwa importanti li tuża l-istess verżjoni tal-applikazzjoni kullimkien. Għal dan il-kompitu, nużaw dejta mill-istorja Git, peress li l-konfigurazzjoni u l-applikazzjonijiet tal-cluster K8S tagħna huma fl-istess repożitorju Git.
Aħna nġibu l-verżjoni tal-applikazzjoni mir-riżultati tal-eżekuzzjoni tal-kmand
git describe --tags --abbrev=7
.
4. Skjerament awtomatiku tal-bidliet kollha fl-ambjent tat-test (UAT)
Il-pass li jmiss f'dan l-iskritt tal-bini huwa li taġġorna awtomatikament il-cluster K8S. Dan iseħħ sakemm l-applikazzjoni kollha tkun inbniet u l-artifacts kollha jkunu ġew ippubblikati fir-Reġistru Docker. Wara dan, jibda l-aġġornament tal-ambjent tat-test.
L-aġġornament tal-cluster huwa beda juża
Aħna nipprovdu l-konfigurazzjoni tal-cluster K8S flimkien mal-assemblaġġ. Għalhekk, il-pass li jmiss huwa li taġġornaha: configMaps, skjeramenti, servizzi, sigrieti u kwalunkwe konfigurazzjoni K8S oħra li nbiddlu.
Helm imbagħad imexxi aġġornament RollOut tal-applikazzjoni nnifisha fl-ambjent tat-test. Qabel ma l-applikazzjoni tiġi skjerata għall-produzzjoni. Dan isir sabiex l-utenti jkunu jistgħu jittestjaw manwalment il-karatteristiċi tan-negozju li npoġġu fl-ambjent tat-test.
5. Skjerament awtomatiku tal-bidliet kollha għall-Prod
Biex tiskjera aġġornament għall-ambjent tal-produzzjoni, trid biss tikklikkja buttuna waħda f'GitLab - u l-kontenituri jitwasslu immedjatament fl-ambjent tal-produzzjoni.
L-istess applikazzjoni tista 'taħdem f'ambjenti differenti—test u produzzjoni—mingħajr bini mill-ġdid. Aħna nużaw l-istess artifacts mingħajr ma nibdlu xejn fl-applikazzjoni, u nissettjaw il-parametri esternament.
Il-parametrizzazzjoni flessibbli tas-settings tal-applikazzjoni tiddependi fuq l-ambjent li fih se tiġi eżegwita l-applikazzjoni. Imċaqlaqna s-settings ambjentali kollha esternament: kollox huwa parametrizzat permezz tal-konfigurazzjoni K8S u l-parametri Helm. Meta Helm juża assemblaġġ fl-ambjent tat-test, is-settings tat-test jiġu applikati għalih, u s-settings tal-prodott jiġu applikati għall-ambjent tal-produzzjoni.
L-iktar ħaġa diffiċli kienet li jiġu parametrizzati s-servizzi u l-varjabbli kollha użati li jiddependu fuq l-ambjent, u jittraduċuhom f'varjabbli ambjentali u deskrizzjoni-konfigurazzjonijiet ta 'parametri ambjentali għal Helm.
Is-settings tal-applikazzjoni jużaw varjabbli tal-ambjent. Il-valuri tagħhom huma stabbiliti f'kontenituri bl-użu tal-konfigurazzjoni K8S, li hija mudellata bl-użu ta 'mudelli Go. Pereżempju, l-issettjar ta’ varjabbli ambjentali għall-isem tad-dominju jista’ jsir hekk:
APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}
.Valuri.global.env – din il-varjabbli taħżen l-isem tal-ambjent (prod, stage, UAT).
.Valuri.app.properties.app_dominju_estern – f'din il-varjabbli nissettjaw id-dominju mixtieq fil-fajl .Values.yaml
Meta jaġġorna applikazzjoni, Helm joħloq fajl configmap.yaml minn mudelli u jimla l-valur APP_EXTERNAL_DOMAIN bil-valur mixtieq skont l-ambjent li fih jibda l-aġġornament tal-applikazzjoni. Din il-varjabbli hija diġà stabbilita fil-kontenitur. Jista 'jkun aċċessat mill-applikazzjoni, għalhekk kull ambjent ta' applikazzjoni se jkollu valur differenti għal din il-varjabbli.
Relattivament reċentement, l-appoġġ K8S deher fi Spring Cloud, inkluż ix-xogħol ma 'configMaps:
B'kollox
Allura, Skjerament Kontinwu huwa kkonfigurat u jaħdem. L-aġġornamenti kollha jseħħu b'keystroke waħda. Il-kunsinna ta 'bidliet fl-ambjent tal-prodott hija awtomatika. U, importanti, l-aġġornamenti ma jwaqqfux is-sistema.
Pjanijiet futuri: migrazzjoni awtomatika tad-database
Ħsibna dwar l-aġġornament tad-database u l-possibbiltà li jerġgħu lura dawn il-bidliet. Wara kollox, żewġ verżjonijiet differenti tal-applikazzjoni qed jaħdmu fl-istess ħin: il-qadima qed taħdem, u l-ġdida qed taħdem. U se nitfi l-qadima biss meta nkunu ċerti li l-verżjoni l-ġdida taħdem. Il-migrazzjoni tad-database għandha tippermettilek taħdem maż-żewġ verżjonijiet tal-applikazzjoni.
Għalhekk, ma nistgħux sempliċement nibdlu l-isem tal-kolonna jew dejta oħra. Iżda nistgħu noħolqu kolonna ġdida, nikkopja dejta mill-kolonna l-antika fiha u niktbu triggers li, meta taġġorna d-dejta, simultanjament se tikkopjaha u taġġornaha f'kolonna oħra. U wara l-iskjerament b'suċċess tal-verżjoni l-ġdida tal-applikazzjoni, wara l-perjodu ta 'appoġġ ta' wara t-tnedija, inkunu nistgħu nħassru l-kolonna l-qadima u l-grillu li sar bla bżonn.
Jekk il-verżjoni l-ġdida tal-applikazzjoni ma taħdimx b'mod korrett, nistgħu nerġgħu lura għall-verżjoni preċedenti, inkluża l-verżjoni preċedenti tad-database. Fil-qosor, il-bidliet tagħna se jippermettulek taħdem simultanjament ma 'diversi verżjonijiet tal-applikazzjoni.
Qed nippjanaw li nawtomatizzaw il-migrazzjoni tad-database permezz tax-xogħol K8S, billi nintegrawha fil-proċess tas-CD. U żgur li se naqsmu din l-esperjenza fuq Habré.
Sors: www.habr.com