Meie pideva juurutamise rakendus kliendi platvormile

Meie True Engineeringus oleme seadistanud pideva vÀrskenduste kohaletoimetamise protsessi kliendi serveritesse ja soovime seda kogemust jagada.

Esiteks lĂ”ime veebipĂ”hise sĂŒsteemi kliendi jaoks ja paigaldasime selle oma Kubernetes klastrisse. NĂŒĂŒd on meie kĂ”rge koormusega lahendus kolinud kliendi platvormile, mille jaoks oleme seadistanud tĂ€ielikult automatiseeritud pideva kohaletoimetamise protsessi. Selle tĂ”ttu oleme kiirendanud toote keskkonda toimetamise aega.

Selles artiklis rÀÀgime kÔigist pideva kohaletoimetamise (CD) protsessi etappidest vÔi vÀrskenduste kohaletoimetamisest kliendi platvormile:

  1. kuidas see protsess algab,
  2. sĂŒnkroonimine kliendi Git-reposiidiga,
  3. tagaplaadi ja esiplaadi ehitamine,
  4. rakenduse automaatne edasiviimine testkeskkonda,
  5. rakenduse automaatne edasiviimine tootmisvÔrku.

Protsessi kÀigus jagame seadistamise detaile.

Meie pideva juurutamise rakendus kliendi platvormile

1. CD kÀivitamine

Pidev kohaletoimetamine algab sellest, et arendaja paneb muudatused meie Git-reposiidi vÀljaanne harusse.

Meie rakendus töötab mikroteenuste arhitektuuri alusel ja kĂ”ik selle komponendid asuvad ĂŒhes repos. SeetĂ”ttu kogutakse ja installitakse kĂ”ik mikroteenused, isegi kui ĂŒks neist on muutunud.

Oleme korraldanud töö ĂŒhe repositooriumi kaudu mitmel pĂ”hjusel:

  • Arendamise mugavus — rakendus areneb aktiivselt, seetĂ”ttu saab töödelda kohe kogu koodi.
  • Üksik CI/CD torujuhe, mis tagab, et rakendus kui tervik lĂ€bib kĂ”ik testid ja toimetatakse kliendi tootmisvĂ”rku.
  • VĂ€ltime versioonide segadust — me ei pea hoidma mikroteenuste versioonikaarti ja kirjeldama iga mikroteenuse konfigureerimist Helm skritpides.

2. SĂŒnkroonimine kliendi lĂ€htekoodi Git-reposiidiga

Tehtud muudatused sĂŒnergeeruvad automaatselt kliendi Git-reposiidiga. Seal on seadistatud rakenduse kogumine, mis kĂ€ivitub pĂ€rast haru vĂ€rskendamist, ja tootmisvĂ”rku edasiviimine. MĂ”lemad protsessid toimuvad nende keskkonnas Git-reposiidist.

Me ei saa töötada kliendi repositooriumiga otse, kuna meil on vaja oma arenduse ja testimise keskkondi. Me kasutame nende jaoks oma Git-repositooriumi — see on sĂŒnkroonitud nende Git-repositooriumiga. Kui arendaja vĂ€ljendab muudatused meie repositooriumi vastavasse haru, saadab GitLab need kohe kliendile.

Meie pideva juurutamise rakendus kliendi platvormile

SeejÀrel tuleb teha kogumine. See koosneb mitmest etapist: tagaplaneeringu ja esipaneeli kogumine, testimine ja edastamine tootmisse.

3. Tagaplaneeringu ja esipaneeli kogumine

Tagaplaneeringu ja esipaneeli kogumine on kaks paralleelset ĂŒlesannet, mis tĂ€idetakse GitLab Runneris. Asetuse algse kogumise konfiguratsioon asub samas repositooriumis.

Juhend YAML-skripti kirjutamiseks GitLabis kogumiseks.

GitLab Runner vÔtab koodi Ôigest repositooriumist, kogumise Java-rakenduse kÀsuga kogub ja saadab selle Docker registry'sse. Siin me kogume tagaplaneeringu ja esipaneeli, saame Docker-pildid, mille paigutame kliendi poolel asuvasse repositooriumisse. Docker-piltide haldamiseks kasutame Gradle pluginit.

Me sĂŒnkroniseerime meie piltide versioonid vĂ€ljaandmise versiooniga, mis Dockerisse pannakse. Sujuvaks toimimiseks tegime mĂ”ned seadistused:

1. Testkeskkonna ja tootmisest konteinerid ei koostatakse uuesti. Me tegime parameteriseerimise, et sama konteiner saaks töötada kÔigi seadistuste, keskkonnaparameetrite ja teenustega nii testkeskkonnas kui ka tootmises ilma uuesti koostamiseta.

2. Rakenduse uuendamiseks Helmiga tuleb nĂ€idata selle versiooni. Meie tagaplaneeringu, esipaneeli kogumine ja rakenduse uuendamine on kolm erinevat ĂŒlesannet, seetĂ”ttu on oluline kasutada igal pool ĂŒhte ja sama rakenduse versiooni. Selle ĂŒlesande jaoks kasutame andmeid Git'i ajaloost, kuna meie K8S klastri ja rakenduse konfiguratsioon asub ĂŒhes Git-repositooriumis.

Rakenduse versiooni saadakse kÀsu
git describe --tags --abbrev=7.

4. KÔikide muudatuste automaatne juurutamine testkeskkonnas (UAT)

Selle kogumisskripti jÀrgmisel etapil toimub K8S klastri automaatne uuendamine. See juhtub tingimusel, et kogu rakendus on kokku seatud ja kÔik artefaktid on avaldatud Docker Registry's. PÀrast seda kÀivitatakse testkeskkonna uuendamine.

Klastri uuendamine kÀivitatakse kasutades Helm'i uuendamine. Kui see protsess lÀheb valesti, tagab Helm automaatselt ja iseseisvalt kÔik muudatused tagasi. Tema tööd ei pea jÀlgima.

Koos kogumisega anname K8S klastrikonfiguratsiooni. SeetÔttu on jÀrgmine samm selle uuendamine: configMaps, deployments, services, secrets ja kÔik muud K8S konfiguratsioonid, mida oleme muutnud.

PÀrast seda kÀivitab Helm rakenduse RollOut uuendamise testkeskkonnas. Enne rakenduse kÀivitamist tootmises. See on tehtud selleks, et kasutajad saaksid kÀesolevas testkeskkonnas kÀsitsi kontrollida meie vÀlja pandud Àriomadusi.

5. KÔigi muudatuste automaatne juurutamine Prod- keskkonda

Tootmisse uuenduse juurutamiseks tuleb vaid GitLabis vajutada ĂŒhele nupule — ja konteinerid toimetatakse kohe tootmiskeskkonda.

Sama rakendus vĂ”ib töötada erinevates keskkondades — testimis- ja tootmisreĆŸiimis — ilma uuesti ĂŒles ehitamata. Me kasutame samu artefakte, muutes rakenduses midagi, samas kui parameetrid mÀÀratakse vĂ€ljastpoolt.

Rakenduse seadistuste paindlik parametriseerimine sÔltub keskkonnast, kus rakendus töötab. Me oleme kÔik keskkonnaseadistused vÀlja viinud: kÔik parametriseeritakse lÀbi K8S konfiguratsiooni ja Helm parameetrite. Kui Helm juurutab kogumise testkeskkonda, rakendatakse sellele testparameetreid, tootmiskeskkonnas aga tootmisparameetreid.

KÔige keerulisem oli kÔiki kasutatavaid teenuseid ja muutujaid, mis sÔltuvad keskkonnast, parametriseerida ning tÔlkida need keskkonna muutujateks ja Helm'i parameetrite kirjeldamiseks.

Rakenduse parameetrites kasutatakse keskkonna muutujaid. Nende vÀÀrtused mÀÀratakse konteinerites K8S configmap'i kaudu, mis on Go-mallide abil mallitud. NÀiteks, keskkonna muutuja mÀÀramine domeeni nimele vÔib vÀlja nÀha selline:

APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}

.Values.global.env – see muutuja sisaldab keskkonna nime (prod, stage, UAT).
.Values.app.properties.app_external_domain – selles muutuja, mÀÀrame .Values.yaml failis vajaliku domeeni

Helm rakenduse vÀrskendamisel loob configmap.yaml faili ƥablonite pÔhjal ja tÀidab APP_EXTERNAL_DOMAIN vÀÀrtuse, mis sÔltub keskkonnast, kus rakenduse vÀrskendus kÀivitatakse. See muutujat kasutatakse juba konteineris. Rakendusel on sellele juurdepÀÀs, seega on rakenduse igas keskkonnas selle muutuja vÀÀrtus erinev.

Suhteliselt hiljuti ilmus Spring Cloudis K8S tugi, sealhulgas töö configMapidega: Spring Cloud Kubernetes. Kuna projekt areneb aktiivselt ja muutub radikaalselt, ei saa me seda tootmises kasutada. Kuid jÀlgime selle seisukorda ja kasutame seda DEV konfiguratsioonides. Kui see stabiliseerub, siis liigume keskkonnamuutujate kasutamiselt selle juurde.

KokkuvÔttes

Nii et pidev juurutamine on seadistatud ja töötab. KĂ”ik vĂ€rskendused toimuvad ĂŒhe nupu vajutusega. Muudatuste toimetamine tootmisse toimub automaatselt. Ja mis oluline, vĂ€rskendused ei peata sĂŒsteemi tööd.

Meie pideva juurutamise rakendus kliendi platvormile

Tulevikuplaanid: automaatne andmebaasi migratsioon

Oleme mĂ”elnud andmebaasi uuendamisele ja vĂ”imalusele need muutused tagasi pöörata. Sest samal ajal töötavad kaks erinevat rakenduse versiooni: vana töötab ja uus tĂ”stetakse ĂŒles. Ja vana vĂ€lja lĂŒlitame alles siis, kui veendume, et uus versioon töötab. Andmebaasi migratsioon peab vĂ”imaldama töötada mĂ”lema rakenduse versiooniga.

Seega ei saa me lihtsalt muuta veeru nime vÔi muid andmeid. Kuid me saame luua uue veeru, kopeerida sinna andmed vanast veerust ja kirjutada triggerid, mis vÀrskendades andmeid kopeerivad ja uuendavad need samal ajal teises veerus. Ja pÀrast uus versioon rakenduse edukat juurutamist, pÀrast post-launch toetuse perioodi, saame eemaldada vana veeru ja muutunud tarbetu triggeri.

Kui uus versioon rakendusest ei tööta korralikult, saame tagasi minna eelnenud versiooni juurde, sealhulgas ka eelneva andmebaasi versiooni juurde. ÜhesĂ”naga, meie muudatused vĂ”imaldavad ĂŒheaegselt töötada mitme rakenduse versiooniga.

Kavandame andmebaasi migratsiooni automatiseerimist K8S töö kaudu, integreerides selle CD protsessi. Ja kindlasti jagame seda kogemust Habr's.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster