Infrastruktuuri koodina: Kuinka me Uudisti kehitys- ja julkaisuprosessiamme kattamaan tiimimme mittakaavan

(11. joulukuuta 2020)

Tässä artikkelissa näytämme, miten hoidimme meneillään olevaa jatkuvaa käyttöönottoprosessiamme, mikä sai meidät muuttamaan sitä, mitä meillä on, ja mitä pyrimme tekemään prosessista mahdollisimman yksinkertaisen / tehokkaan.

Artikkeli saattaa antaa alkuperäisen devops-maun, mutta pääpiirteissään julkaisuprosessi vaikuttaa kaikkiin tiimeihin ja niiden toimintaan. tai yhteistyössä muiden tiimien kanssa näytämme, kuinka roolit siirtyvät pelkästään prosessia muuttamalla.

Meistä

Me Halanissa autamme tarjoamaan ajotietoja ja tarvittaessa logistiikkaratkaisuja ( erät, toimitus, maksut verkossa, sähköinen kaupankäynti) kuljetuspalvelujen ja muiden palvelujen nykyisen tekniikan alipalveluneille väestölle, voit tarkistaa p täältä ( android / iOS )

Vanhan prosessin antaminen sen takia, hyvät ja huonot

Aloitamme siitä, miten käsittelemme prosessia aikaisemmin ja miten se vaikutti meihin joko positiivisesti tai negatiivisesti.

Tiimilleni olemme melkein kaikki AWS: n kautta käytettynä GitHub versionhallintajärjestelmämme, joten meidän on löydettävä tapa toimittaa ominaisuuksia GitHub-repoistamme AWS-palveluihin.

Versiohallintajärjestelmät

Me vedottiin AWS-koodiputkistoon , asetimme laukaisimet -käyttöjärjestelmän käynnistämiseen aina, kun uusi sitoutuminen sulautetaan yhteen tunnettuja vaiheita edustavista päähaaroista: dev , prod ja lavastus ympäristöissä.

yleiskatsaus käyttöönottojen käynnistymisestä

Tämä vuoka tarkoittaa että mikä tahansa päähaaran ominaisuus on -tuotannossa, , joka tekee sulautumisen varmasti hallitsemaan tabu-aihetta keskustelemaan, eikä kaikilla ollut että lupa yhdistää PR-pääkäyttäjääsi.

Sama asia oli muille haaroille, mutta sitä ei ollut Se ei todellakaan ole ongelma, koska kehittäjät ja lavastus-env: t eivät todellakaan ole niin pelottavia.

Laadunvalvontatoimistomme aloitti ominaisuuksien testaamisen ja tarkistamisen, kun ne yhdistetään lavastukseen, mikä tarkoittaa, että he testaavat ensin lavastus-env: tä ja sitten, jos ne vahvistetaan. , ominaisuus yhdistetään master -haaraan. se näyttää toimivan hyvin, mutta katsotaanpa tällaisen prosessin haittoja.

Tämä antoi meille mahdollisuuden testata ja ottaa käyttöön useita ominaisuuksia samaan aikaan kussakin vaiheessa (kehittäjä, lavastus), mikä on hyvää ja huonoa samaan aikaan, koska:

  • Tämä tarkoittaa sitä, että kehittäjien ei tarvitse odottaa toistensa saavan hallintaa kehittäjä- / lavastusympäristöstä.
  • Mutta se tarkoittaa, että dev-vaihe voi virheellisesti aiheuttaa toistensa joko ei toimi tai toimi (väärä positiivinen), ja molemmat näistä tapauksista ovat todella huonoja ja saattavat aiheuttaa koodin jatkamisen tuotannossa, vaikka se ei todellakaan toimi.

Eri sivuliikkeet, tarpeeton uudelleentasaus

Kuten olet ehkä jo huomannut, sanoimme, että voidaksemme ottaa käyttöön dev env, sinun on yhdistettävä koodisi dev-haaraan. No, se osa valitettavasti sekoitti haaramme aikajanan nopeasti:

  • Kaikki dev-laitteella testatut ominaisuudet eivät mene tuotantoon, joten meillä oli kuin haamukäsittelyt yhtenäisessä dev-haarassamme .
  • Kokeilulaboratorio epäilemättä, ihmiset saattavat huomata, että he ovat tehneet jotain väärin jonkin ajan kuluttua, ja päättää pudottaa koodinsa / sitoutumisensa ja aloittaa uuden, mutta siitä huolimatta meille jäävät vanhat sitoutumiset. sulautui dev-haaraan.

Tällainen käyttäytyminen tuotti haarojen väliseksi divergenssiksi yhdistääksesi -ominaisuuden haara, jonka pääosasto on pohja dev: ksi, sinun on ratkaistava ristiriidat ! mikä on hankalasti outoa, että olet kirjaimellisesti ristiriidassa aaveiden kanssa ja ratkaiset asioita, joita ei koskaan tule tuotantoon , joka varmasti antaa sinulle kaksi heikkoa vaihtoehtoa:

  • Rakenna uusi haara ominaisuudellesi, joka on haarautunut alkuperäisestä ominaisuushaarasta, ja ratkaise siinä olevat ristiriidat. Yhdistä sitten alkuperäinen haara päätehtäväksi testatessasi.
  • Ratkaise haarakonfliktit ja valitse kirsikkasi tekemäsi sitoumukset uudeksi haaraksi sulautuessasi päälliköksi.

Kun tiimiimme tulee lisää kehittäjiä, asiat alkavat muuttua rumiksi ja eroavuudet vievät varmasti vaelluksen.

Rakennus- / käyttöönottoprosessin uudistaminen

Ensinnäkin pidimme mielessä, kuinka päästä eroon erilaisista haaroista, tarvitsemme uuden menetelmän toimittaa ominaisuuksia turvallisesti tuotantoon saumattomasti ja hallita tuotannossa käytettävien ominaisuuksien määrää ilman lähdehallintaa ja käyttöönottotoimintaa.

Pieni katsaus AWS: ään

Ensin on määritettävä tärkeimmät elementit, joilla on rooli kanssamme prosessissa:

  • Github : lähteen hallinta joilla on repoja jokaisesta siellä olevasta mikropalvelusta.
  • Amazon ECR : Docker-kuvarekisteri, joka on jaettuna `repo`ksi, jokainen repo edustaa myös mikropalvelua ja sisältää kuvat, jotka on työnnetty palvelua X varten ja joita voidaan käyttää tai ottaa käyttöön suoraan palveluun, jotta se toimisi.
  • Amazon ECS / EC2 / EKS : Täällä mikropalvelumme elävät yhdessä niiden ympäristöjen kanssa, ECS on jaettu klustereihin, jokaisessa klusterissa on useita palveluja, joista jokaisella on tehtävämäärittely, joka sisältää tietoja, kuten ympäristömuuttujat , laskea tekniset tiedot, verkko jne.

Joten meidän on löydettävä tapa sitoa ne yhteen helpottaaksemme meitä kehitysryhmänä toimittamaan ominaisuuksia ja että laadunvalvonta voisi hallita ja vahvistaa niitä ominaisuudet.

Luulimme voivamme määritellä välittäjäpalvelun, palvelun , joka on vastuussa muiden palveluiden käyttöönotto. Meillä oli kaksi pääkomentoa, jotka halusimme palvelun käsittelevän:

  • Koontikomento: we haluavat pystyä rakentamaan kuvan ja siirtämään sen ECR: ään mistä tahansa haarasta / sitoutumisesta, jonka haluamme tietystä GitHub-reposta tiettyyn ECR-repoon.
  • Ota komento käyttöön: haluamme pystyä ottamaan käyttöön tietyn kuvan ECR: n reposta kaikkiin klustereihin, joilla on palvelu X.

Otetaan jokainen näistä komennoista mikroskoopilla ja katso, mitä kukin niistä sisältää, aloitetaan koontikomennolla -komennolla:

  • Ensinnäkin meidän on kloonattava repo määritetylle sitoutumiselle / haaralle.
  • Rakenna docker-kuva käyttämällä kyseisen repon Docker-tiedostoa.
  • Työnnä rakennettu kuva ECR-repoon uudella tunnisteella tarvittaessa tai viimeistään.

Vaikka kaikki nuo vaiheet ovatkin varmasti doab le uudessa käyttöönottopalvelussa, mutta havaitsimme sen olevan hankala, koska -docker -kuvien rakentaminen vie paljon resurssit ja tämä rajoittaa uuden palvelumme muutamaan samanaikaiseen käyttöönottoja tai tehdä siitä niin jättimäinen resursseissa.

Ajattelimme, että voisimme sen sijaan, että tekisimme kaiken tämän työn itse palvelussa, voisimme aloittaa uuden työnkulku Github kyseisessä repossa ja välittää sille kaikille tehtävän yksityiskohdat, kuten mikä haara on maksettava ja mihin ECR-repoon on siirrettävä, kun se on lopulta tehty, se antaa käyttäjälle viestin takaisin käyttämällä verkkokoukkua . Siihen on tietysti olemassa muita ratkaisuja, kuten Jenkins paremman tietoturvan varmistamiseksi, että koodisi rakentuu hallitsemillesi koneille.

Se muutti yllä mainitsemamme työnkulun, nyt se tapahtuu seuraavasti:

  • Vastaanota rakennustiedot käyttäjältä.
  • Käynnistä Github -toiminto määritetty repo.
  • Github-toiminnot pyörittävät uuden koneen , joka ilmoittaa meille takaisin rakennustilalla, kun valmis, se merkitsee sitoutumisen myös Jira-kortin numerolla , jolla työskentelet.

Toinen komento on Depoly -komento, joka on tavallista yksinkertaisempi kuin koontikomento, tässä meidän on vain:

  • Vastaa käyttöönottotietojen saamiseen käyttäjältä.
  • Aloita uusi käyttöönottotehtävä jokaisessa palvelua kilpailevassa klusterissa ja anna kuvan URL-osoite ECR: ssä.

käyttöönoton työnkulku

Siinä kaikki asennuksessa! vain kahden AWS-tuotteen välitystyö, verrataan tätä työnkulkua aikaisempaan ja katsotaan, miten julkaisustrategiamme muuttui.

Uuden prosessin käyttäminen koodin käyttöönottamiseksi missä tahansa vaiheessa (prod, dev, staging) ei vaadi minkäänlaista yhdistämistä , -koodi on täysin riippumaton käyttöönotto , meillä voi olla 20 sisältää valmiina päähaarassa ja valitsee vain käyttöönoton 10 heistä.

Mutta tämä tarkoittaa myös sitä, että meillä voi olla vain yksi ominaisuus testattu dev-haaralla, elleivät kaksi kehittäjää ole sopineet uudelleen toisistaan.

Käyttöönottohistoria ja tunnisteiden lisääminen

Tämä tarjosi meille myös paremman palautuksen strategia tuotantokysymyksiä vastaan, nyt jokaiselle -ominaisuudelle / tehtävälle Meillä oli aina, kun kohtaamme tuotantokysymyksiä ja haluamme palauttaa ominaisuuden, voimme helposti siirtyä takaisin kohtaan, josta tämä ominaisuus on alkanut, ja palata sitoumukseen ennen sitä, jos mahdollista.

Se myös antoi meille mahdollisuuden yhdistää kaikki päähaaran toimivat toiminnot, vaikka niitä ei aiotakaan ottaa käyttöön, mutta voimme silti pitää ne masterissa valmiina seuraavaan ominaisuuksien sarjaan tarvittaessa tuotannossa, mikä auttaa varmasti tiimi keskittyy tehtävien toimittamiseen huolimatta siitä, milloin tehtävä sulautetaan käyttöönotettavaan pääkoneeseen, tässä yhdistymme ensin ja sitten huolehdimme asennuksista.

Seuraavat vaiheet

Pyrimme parhaillaan automatisoimaan prosessimme paremmin, mukaan lukien ympäristömuuttujat ja konetiedot, ne kaikki ovat saatavilla koodina aina, kun muutamme näitä teknisiä tietoja, jotka heijastavat automaattisesti ect koneillamme AWS: ssä vastaavassa ympäristössä , ei tarvitse koodata näitä arvoja joka kerta AWS: ssä.

Tämän ansiosta meillä on parempi hallinta ja näkyvyys kaikissa palvelukokoonpanoissamme, kaikki infrastruktuurissamme on koodissa ja yhden napsautuksen päässä päivittääksesi! Lisäksi infrastruktuurin muuttaminen tekee palveluntarjoajasta riippumattoman, voimme siirtyä esimerkiksi AWS: stä Google-pilviin, ja meidän tarvitsee vain muuttaa käyttöönottopalvelun käyttämiä komentoja infrastruktuurin asentamiseksi uudelle palveluntarjoajalle.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *