Uue projekti versiooni kĂ€ivitamine nĂ”uab hoolikat tasakaalu leidmist juurutamise kiirus ning lahenduse usaldusvÀÀrsuse vahel. Slackis hinnatakse kiireid iteratsioone, lĂŒhikesi tagasiside tsĂŒkleid ja kiiret reageerimist kasutajate pĂ€ringutele. Lisaks sellele on ettevĂ”ttes sadu programmeerijaid, kes pĂŒĂŒdlevad maksimaalse tootlikkuse poole.
Kunstnikud, kelle materjali tĂ”lget tĂ€na avaldame, ĂŒtlevad, et ettevĂ”te, kes pĂŒĂŒab jĂ€rgida selliseid vÀÀrtusi ja samal ajal kasvada, peab pidevalt tĂ€iustama oma projekti juurutamise sĂŒsteemi. EttevĂ”ttel tuleb pĂŒhendada jĂ”ud protsesside lĂ€bipaistvusele ja usaldusvÀÀrsusele, et vastata projekti ulatusele. Siin kĂ€sitleme Slackis vĂ€lja kujunenud tööprotsesse ja mĂ”ningaid lahendusi, mis viisid ettevĂ”tte sellise tĂ€napĂ€evase projekti juurutamise sĂŒsteemi kasutamise juurde.
Kuidas projektide juurutamise protsessid tÀnapÀeval toimivad
Iga PR (pull request) Slackis peab olema kindlasti lĂ€binud koodivaatluse ja edukalt lĂ€binud kĂ”ik testid. Alles pĂ€rast nende tingimuste tĂ€itmist vĂ”ib arendaja oma koodi ĂŒhendada projekti master-haru. Siiski, sellise koodi juurutamine toimub vaid tööaegadel pĂ”hjaameerika ajavööndis. SeetĂ”ttu oleme, kuna meie töötajad on töökohtadel, tĂ€ielikult valmis lahendama ootamatuid probleeme.
Igal pĂ€eval teeme umbes 12 planeeritud juurutust. Iga juurutamise kĂ€igus vastutab juurutamise juhtiv arendaja uue versiooni toimetamise eest tootmisse. See on mitmeastmeline protsess, mis tagab sujuva versiooni viimise tööreĆŸiimi. TĂ€nu sellele lĂ€henemisele saame avastada vigu enne, kui need mĂ”jutavad kĂ”iki meie kasutajaid. Kui vigu on liiga palju, vĂ”ib versiooni juurutamise tagasi vĂ”tta. Kui aga mĂ”ni konkreetne probleem tuvastatakse pĂ€rast vĂ€ljalaskmist, on lihtne sellele parandust vĂ€lja anda.

Slackis kasutatav Checkpoint sĂŒsteemi liides projektide juurutamiseks
Uue vÀljaande juurutamise protsessi vÔib jagada neljaks sammuks.
â1. VĂ€ljaande haru loomine
Iga vÀljaanne algab uue haru loomisega, mis toimub meie Git-i ajaloos. See vÔimaldab vÀljaandele silte mÀÀrata ja loob koha, kuhu saab teha kiireid parandusi, kui ilmnevad vead, mis leiti vÀljaande tootmisse viimise ettevalmistamisel.
â2. Juurutamine vahekeskkonnas
Töö jĂ€rgmine samm on versiooni juurutamine vahe (staging) serveritesse ja automaatse testimise kĂ€ivitamine projekti ĂŒldise toimivuse (smoke test) kontrollimiseks. Vahekeskkond on tootmiskeskkond, kuhu vĂ€line liiklus ei pÀÀse. Selles keskkonnas teeme tĂ€iendavat kĂ€sitsi testimist. See annab meile tĂ€iendava kindlustunde, et muudetud projekt töötab Ă”igesti. AinuĂŒksi automatiseeritud testidest ei piisa, et sellist kindlustunnet saavutada.
â3. Juurutamine dogfood- ja canary- keskkondades
Tootmise tootmisringis algab dogfood-keskkonna loomisega, mille esinduseks on hulk hoste, mis haldavad meie sisemisi Slack-tööruume. Kuna oleme Slacki aktiivsed kasutajad, aitas selline lĂ€henemine tuvastada palju vigu varases tootmisfaasis. PĂ€rast seda, kui oleme veendunud, et sĂŒsteemi pĂ”hifunktsionaalsus ei ole hĂ€iritud, toimub versiooni juurutamine canary-keskkonnas. See koosneb sĂŒsteemidest, mis saavad umbes 2% tootmist liiklusest.
â4. Aeglane juurutamine tootmisse
Kui uue vĂ€ljaande jĂ€lgimise nĂ€itajad on stabiilsed ning pĂ€rast projekti juurutamist canary-keskkonnas ei ole me saanud kaebusi, jĂ€tkame tootmisserverite ĂŒleminekut uuele vĂ€ljaandele jĂ€rk-jĂ€rgult. Juurutamisprotsess jaguneb jĂ€rgmistesse etappidesse: 10%, 25%, 50%, 75% ja 100%. Sel viisil saame aeglaselt suunata tootmisliiklust uuele sĂŒsteemi vĂ€ljaandele. Samuti on meil aega olukorra uurimiseks, kui tuvastame mingeid anomaaliaid.
âMida teha, kui juurutamise kĂ€igus midagi lĂ€ks valesti?
Koodi muutmine on alati risk. Aga me saame sellega hakkama tĂ€nu meie hĂ€sti ettevalmistatud âjuhtidele juurutamisesâ, kes juhivad uue versiooni tootmisse toomise protsessi, jĂ€lgivad jĂ€lgimisnĂ€itajaid ja koordineerivad arendajate tööd, kes koodi vĂ€ljastavad.
Kui midagi tĂ”esti lĂ€heb valesti, pĂŒĂŒame probleemi avastada nii varakult kui vĂ”imalik. Uurime probleemi, leiame PR-i, mis vigu tekitab, tagandame selle, analĂŒĂŒsime hoolikalt ja loome uue versiooni. TĂ”ele au andes, mĂ”nikord jÀÀb probleem mĂ€rkamatuks kuni projekti tootmisse viimiseni. Sellises olukorras on kĂ”ige olulisem taastada teenuse töö. SeetĂ”ttu tagandame enne probleemi uurimist kohe eelmise tööversiooni.
JuurutamissĂŒsteemi ehitusplokid
Vaatame tehnoloogiaid, mis on meie projektide juurutamissĂŒsteemi aluseks.
âKiired juurutamised
Ălaltoodud tööprotsess vĂ”ib tagantjĂ€rele tunduda tĂ€iesti ilmne. Kuid meie juurutamissĂŒsteem ei saanud selliseks kaugeltki kohe.
Kui ettevĂ”te oli oluliselt vĂ€iksem, sai meie rakendus töötada 10 Amazon EC2 instantsil. Projekti kĂ€ivitamine sellises olukorras tĂ€hendas rsynci kasutamist, et kiiresti sĂŒnkroonida kĂ”iki servereid. Varem eraldas uue koodi tootmisest ainult ĂŒks samm, mida esindas vahekeskkond. Kogumikud loodi ja kontrolliti sellises keskkonnas ning seejĂ€rel suundusid need otse tootmisse. Sellises sĂŒsteemis orienteerumine oli vĂ€ga lihtne, see vĂ”imaldas igal programmeerijal igal ajal kĂ€ivitada kirjutatud koodi.
Kuid kliendibaasi kasvades suurenes ka infrastruktuuri ulatus, mis oli vajalik projekti toimimiseks. Varsti, arvestades sĂŒsteemi pidevat kasvu, ei suutnud meie uue koodi serveritesse toimetamisele tuginev disain oma ĂŒlesandeid enam tĂ€ita. Nimelt tĂ€hendas iga uue serveri lisamine, et suurenes ajakulu, mis oli vajalik kĂ€ivitamiseks. Ieven paralleelsetel rsynci rakendamisel pĂ”hinevates strateegiates on teatud piirangud.
KokkuvĂ”ttes lahendasime selle probleemi, minnes ĂŒle tĂ€iesti paralleelsele juurutussĂŒsteemile, mis ei olnud ĂŒles seatud nagu vana sĂŒsteem. Nimelt, nĂŒĂŒd ei saatnud me koodi serveritesse, kasutades sĂŒnkroonimisskripti. Iga server laadis ise uue kogumi alla, teades, et see tuleb teha, jĂ€lgides Consul'i vĂ”tme muutust. Serverid laadisid koodi paralleelselt. See vĂ”imaldas meil hoida kĂ”rget juurutamiskiirus, isegi pideva sĂŒsteemi kasvu tingimustes.

1. Tootmisserverid jÀlgivad Consul'i vÔtit. 2. VÔti muutub, mis annab serveritele teada, et nad peavad alustama uue koodi laadimist. 3. Serverid laadivad alla tarball-failid rakenduskoodiga.
âAtoomilised juurutamised
Veel ĂŒhe lahendusena, mis aitas meil minna ĂŒle tasemel juurutussĂŒsteemile, sai atoombne juurutamine.
Enne aatomaarsete juurutuste kasutuselevĂ”ttu vĂ”is iga juurutamine pĂ”hjustada suure hulga vigade teateid. Asi on selles, et uute failide kopeerimise protsess tootmisserveritesse ei olnud aatomaarne. See tĂ”i kaasa lĂŒhikese ajavahemiku, mille jooksul kood, mis kutsus esile uusi funktsioone, oli saadaval enne, kui need funktsioonid endid olid kĂ€ttesaadavad. Kui sellist koodi kutsuti, pĂ”hjustas see sisemisi vigu. See avaldus API-pĂ€ringute ebaĂ”nnestumises ja ârikutudâ veebilehtedes.
Probleemiga tegelenud meeskond lahendas selle, tuues sisse mĂ”isted âkuumadâ (hot) ja âkĂŒlmadâ (cold) kataloogid. âKuumasâ kataloogis olev kood vastutab tootmistrafiku töötlemise eest. KĂŒlmades kataloogides valmistatakse kood sĂŒsteemi töötamise ajal lihtsalt kasutamiseks ette. Juurutamise kĂ€igus kopeeritakse uus kood kasutamata âkĂŒlmaâ katalooge. SeejĂ€rel viiakse, kui serveris ei ole aktiivseid protsesse, lĂ€bi kohene kataloogide vahetus.

1. Rakenduse koodi pakkimine âkĂŒlmaâ direktori. 2. SĂŒsteemi ĂŒleviimine âkĂŒlmaâ direktorisse, mis muutub âkuumaksâ (aatomaarne operatsioon)
KokkuvÔtted: rÔhu nihkumine usaldusvÀÀrsusele
Aastal 2018 kasvas projekt sellistele mÔÔtmetele, et vĂ€ga kiire juurutamine hakkas kahjustama toote stabiilsust. Meil oli ĂŒsna arenenud juurutussĂŒsteem, millesse olime investeerinud palju aega ja jĂ”udu. Me pidime vaid ĂŒmber korraldama ja tĂ€iustama juurutamise protsesse. Meist sai piisavalt suur ettevĂ”te, mille arendusi kasutati ĂŒle kogu maailma, et tagada katkestusteta side ja lahendada olulisi ĂŒlesandeid. SeetĂ”ttu sai usaldusvÀÀrsus keskseks tĂ€helepanu all olevaks teemaks.
Meil oli vaja muuta Slacki uute versioonide juurutamisprotsessi turvalisemaks. See vajadus viis meid meie juurutamissĂŒsteemi tĂ€iustamiseni. Tegelikult arutasime just seda tĂ€iustatud sĂŒsteemi. SĂŒsteemi sisemuses jĂ€tkame kiire ja atomaarse juurutamise tehnoloogiate kasutamist. On muutunud see, kuidas tĂ€pselt juurutamine toimub. Meie uus sĂŒsteem on loodud uue koodi jĂ€rkjĂ€rguliseks juurutamiseks erinevates etappides ja keskkondades. NĂŒĂŒd kasutame arenenumaid abivahendeid ja sĂŒsteemi jĂ€lgimise vahendeid kui kunagi varem. See annab meile vĂ”imaluse tuvastada ja kĂ”rvaldada tĂ”rkeid palju enne, kui need saavad vĂ”imaluse jĂ”uda lĂ”ppkasutajani.
Kuid me ei kavatse peatuda saavutatu peal. Me pidevalt tĂ€iustame seda sĂŒsteemi, rakendades arenenumaid abivahendeid ja töö automatiseerimise vahendeid.
Lugupidamisega lugejad! Kuidas on korraldatud uute versioonide juurutamisprotsess seal, kus teie töötate?
Allikas: habr.com
