Infrastruktúra mint kód: Hogyan Felújította fejlesztési / kiadási folyamatunkat, hogy átfogja a csapat skáláját

(2020. december 11.)

Ebben a cikkben megmutatjuk, hogyan kezeltük a folyamatos telepítési folyamatot a múltban, mi késztetett arra, hogy megváltoztassuk azt, ami van és milyen erőfeszítéseket tettünk annak érdekében, hogy a folyamat a lehető legegyszerűbb / hatékonyabb legyen.

A cikk ízelítőt adhat a devops-nak, de lényegében a kiadási folyamat minden csapatot és saját működését érinti. vagy más csapatokkal együttműködve megmutatjuk, hogyan változik a szerepkör pusztán a folyamat megváltoztatásával.

Rólunk

Mi a Halánban segítünk felajánlani és igény szerinti logisztikai megoldásokat kínálni ( részletekben, szállítás, online fizetések, e-kereskedelem) a szállítási és egyéb szolgáltatások terén meglévő technológiák által alultáplált lakosság számára, megnézheti p itt ( android / iOS )

A régi folyamat megadása esedékes, jó és rossz

Kezdjük azzal, hogy hogyan kezeltük a folyamatunkat a múltban, és hogy ez pozitívan vagy negatívan hatott-e ránk.

Csapatom számára majdnem minden, amelyet a GitHub, mint verziókezelő rendszerünk, az AWS-en keresztül telepítettek, ezért meg kell találnunk a módját annak, hogy a GitHub-repókból az AWS-szolgáltatásokba továbbítsuk a funkciókat.

Verziókezelő telepítések

Mi AWS-kódvezetékre támaszkodva , kiváltókat állítottunk be egy telepítési folyamat elindításához amikor egy új elkötelezettséget egyesítenek az ismert szakaszokat képviselő egyik fő ágba: dev , prod és szakaszolás környezetek.

áttekintés a telepítések kiváltásáról

Ez a folyamat azt jelenti hogy a főág bármely olyan funkciója termelésben van, , amely biztosan összeolvasztja a tabutéma elsajátítását, hogy megvitassák, és nem mindenkinek volt hogy engedély a mester PR-jének egyesítéséhez.

Ugyanez vonatkozott más ágakra is, de ez nem volt Ez nem igazán probléma, mivel a dev és a staging envs valójában nem olyan ijesztőek.

A minőség-ellenőrzési testület akkor kezdte el tesztelni és ellenőrizni a szolgáltatásokat, amikor összevonták őket a stádiumba, ami azt jelenti, hogy először a staging env-n tesztelnek, majd ha igazolják , a funkció beolvad a master ágba. úgy tűnik, hogy ez jól működik, de nézzük meg egy ilyen folyamat hátrányait.

Ez lehetővé tette számunkra, hogy egyszerre több funkciót teszteljünk és telepítsünk minden szakaszban (fejlesztés, színpadra állítás), ami jó és rossz ugyanakkor:

  • Ez azt jelenti, hogy a fejlesztőknek nem kell egymást megvárniuk, hogy megszerezzék az irányítást a fejlesztői / staging környezet felett.
  • De ez azt jelenti, hogy a a dev szakasz tévesen okozhatja, hogy sem működne vagy work (hamis pozitív), és mindkettő nagyon rossz, és valószínűleg okozhat kódot a termelésben, miközben valójában nem működik.

Elágazó ágak, felesleges újrabeállítás

Amint már észrevehette, azt mondtuk, hogy a dev env, be kell egyesítenie a kódját a dev ágba. Nos, ez a rész sajnos gyorsan elrontotta fióktelepünk ütemtervét: .

  • Egy kísérleti labor minden kétséget kizáróan, az emberek felfedezhetik, hogy egy idő után valamit rosszul csináltak, és úgy döntenek, hogy elvetik kódjukat / elkötelezettségeiket, és újat kezdenek, de ettől még a régi elkötelezettségünk marad egyesült a dev ágon.
  • Ez a fajta viselkedés eredményezte az ágak közötti divergenciának nevezett tulajdonság egyesítését ág, amelynek alapja a dev-be, fel kell oldania a konfliktusok ! ami kínosan furcsa, ha szó szerint ellentmond a szellemeknek, és olyan dolgokat old meg, amelyek soha nem lesznek gyártásban , és ez biztosan megadja két gyenge lehetőség:

    • Hozzon létre egy új ágat a saját szolgáltatásához, amely az eredeti szolgáltatáságból van kialakítva, és oldja meg az ütközéseket, majd a tesztelés befejezése után egyesítse az eredeti ágat a masterbe.
    • Oldja meg a fióktelep konfliktusait, majd cserélje ki az elkötelezettségeket egy új ágba, amikor beolvad a masterbe.

    Ha több fejlesztő csatlakozik a csapatunkhoz, a dolgok csúnyábbá válnak. és a divergencia biztosan megemelkedik.

    Az összeépítési / telepítési folyamat megújítása

    Először arra gondoltunk, hogy miként szabadulhatunk meg az egymástól eltérő ágaktól, új módszerre van szükségünk zökkenőmentesen szállíthatja a termékeket a termelésbe, és ellenőrizheti, hogy hány funkciót telepítenek a gyártásba, anélkül, hogy a forrásirányítást bevonnák a telepítési üzletbe.

    Egy kis áttekintés az AWS-ről

    Először meg kell határoznunk a fő elemek, amelyek szerepet játszanak velünk a folyamat során:

    • Github : forrásvezérlés repók találhatók minden odakint található mikrotermékhez.
    • Amazon ECR : a “repókra” osztva mindegyik repo egy mikraszolgáltatást is képvisel és tartalmaz az X szolgáltatáshoz átküldött képek, amelyek közvetlenül használhatók vagy telepíthetők a szolgáltatáshoz annak működéséhez.
    • Amazon ECS / EC2 / EKS : itt élnek a mikroszolgáltatásaink, a környezeteikkel együtt, az ECS klaszterekre van osztva, mindegyik klaszter számos szolgáltatással rendelkezik, mindegyik rendelkezik feladatmeghatározással, amely információkat tartalmaz, például környezeti változókat , kiszámítja a specifikációkat, a hálózatot stb.

    Tehát meg kell találnunk a módját, hogy összekössük ezeket, hogy a fejlesztői csapatként könnyebben nyújthassuk a szolgáltatásokat, és a minőségbiztosítási központ ellenőrizhesse és ellenőrizhesse ezeket. jellemzők.

    Úgy gondoltuk, hogy meghatározhatunk egy közvetítő szolgáltatást, egy szolgáltatást , amely felelős a egyéb szolgáltatások telepítése. Két fő parancsunk volt, amellyel ezt a szolgáltatást szeretnénk kezelni:

    • Build Command: we képet akarunk készíteni, és az ECR-be akarjuk tolni bármely ágról / elkötelezettségről, amelyet egy bizonyos GitHub repótól egy bizonyos ECR repóig akarunk.
    • Deploy Command: azt akarjuk, hogy egy bizonyos képet telepítsünk az ECR repótól az összes X szolgáltatást tartó fürtbe.

    Vegyük a mikroszkóp alatt levő parancsok mindegyikét, és megnézzük, mi minden érintett, kezdjük a Build paranccsal:

    • Először is klónoznunk kell a repót a megadott lekötés / elágazásnál.
    • Készítsen egy dokkoló képet az adott repó Dockerfile segítségével.
    • Nyomja meg a beépített kép az ECR repo-hoz új címkével, ha szükséges vagy legkésőbb.

    Bár ezek a lépések minden bizonnyal doab új telepítési szolgáltatásunkban, de azt tapasztaltuk, hogy nehézkes, mivel a docker képek felépítése sok erőforrások és ez új szolgáltatásunkat néhány egyidejű telepítéseket, vagy olyan óriási erőforrássá teszik.

    Arra gondoltunk, hogy ahelyett, hogy mindezt a munkát magában a szolgáltatásban végeznénk, új workflow on Github ezen a repón, és adja át az egészet a feladat részletei, például melyik fiókot kell fizetni, és milyen ECR repót kell leküldeni, ha ez végre elkészült, akkor egy web-horog . Természetesen vannak más megoldások is, például a Jenkins a jobb biztonság érdekében, hogy a kód a kezelt gépekre épüljön.

    Ez megváltoztatta a fent említett munkafolyamatot, ez most a következő:

    • Készítés részleteinek fogadása a felhasználótól.
    • Indítson el egy Github műveletet a megadott repo.
    • A Github-műveletek egy új gépet fognak forgatni , amely a build állapotával visszajelez minket. kész, az elkötelezettséget a Jira kártyaszámmal is megjelöli, amelyen dolgozik.

    Second Command a Depoly parancs, amely sokkal egyszerűbb, mint a build parancs, itt csak a következőkre van szükségünk:

    • A telepítés részleteinek megkapása a felhasználótól.
    • Indítson új telepítési feladatot minden egyes fürtön, amely összefogja a szolgáltatást, és megadja az image URL-t az ECR-ben.

    üzembe helyezési munkafolyamat

    Ez tényleg a telepítéshez való! csupán egy elősegítő munka két AWS termék között, hasonlítsuk össze ezt a munkafolyamatot az előzőekkel, és nézzük meg, hogyan változott a kiadási stratégiánk.

    Az új folyamat használata a kód telepítéséhez bármely szakaszban (prod, dev, staging) nem igényel semmiféle egyesítést , a kód teljesen független a telepítés , akkor 20 készen áll a fő ágon, és csak üzembe helyezést választ 10 közülük.

    De ez azt is jelenti, hogy csak egy tulajdonságunk lehet teszteltük a dev ágon, hacsak két dev nem értett egyet újraindítással egymással.

    Telepítési előzmények és címkézés

    Ez egy jobb visszagörgetést is biztosított számunkra stratégia a gyártási problémák ellen, Most minden szolgáltatáshoz / feladathoz volt, amikor egy produkciós problémával szembesülünk, és szeretnénk visszavonni egy funkciót, akkor könnyedén visszaléphetünk oda, ahonnan ez a szolgáltatás elindult, és ha lehetséges, visszavonhatjuk az előtte álló elköteleződést.

    Az is lehetővé tette számunkra, hogy egyesítsük az összes működő funkciót a master ágon, még akkor is, ha nem telepítjük őket, továbbra is készen állhatunk arra, hogy a master készen álljon a következő kötegelt funkciók gyártására, ha szükséges, ez biztosan segít a csapat a feladatok átadására összpontosít anélkül, hogy aggódna, hogy ez a feladat mikor kerül beolvasztásra a telepítendő masterbe, itt először összeolvadunk, majd a telepítések miatt aggódunk.

    Következő lépések

    Jelenleg az automatizáláson dolgozunk jobb a folyamatunk, beleértve a környezeti változókat és a gép specifikációit, mind kódként lesznek elérhetőek, valahányszor megváltoztatjuk ezeket a specifikációkat, amelyek automatikusan tükrözik AWS-en lévő gépeinken a megfelelő környezetben , nem kell ezeket az értékeket minden alkalommal kézzel kódolni az AWS-en.

    Ezzel jobban ellenőrizhetjük és az összes szolgáltatáskonfigurációnk láthatósága, infrastruktúránk minden része kódban lesz és egy kattintással elérhető a frissítéshez! az infrastruktúra megváltoztatását a szolgáltatótól függetlenné teszi, például az AWS-ről a Google felhőre válthatunk, és csak az üzembe helyezési szolgáltatás által használt parancsokat kell megváltoztatnunk az infrastruktúra telepítéséhez az új szolgáltatónál.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük