Telepítés csővezeték a gyakorlatban

Telepítés Pipeline gyakorlatban

Összefoglaló. A hálózat van egy csomó elméleti anyag folyamatos szállítása Telepítés Pipeline'ov, de a gyakorlati megvalósítás a példák még nem talált. Tulajdonképpen itt szeretném megosztani egy példát arra, hogyan hajtják végre a telepítési Pipeline belül a nyílt forráskódú projekt JTalks. Minden nyílt forráskódú, így nem csak olvasni a magyarázat, de ellopni, és a végrehajtást.

Ha nem érti, mi Deployment Pipeline és miért van szükség rá, itt van néhány pont, azonban teljes mértékben megértsék a szükségességét, hogy olvassa el a végére:

Telepítés Pipeline - egy sor gyakorlat, hogy automatizálják alkalmazások kifejlesztése a különböző környezetekhez, beleértve a termelési

Telepítés Pipeline lehetővé teszi, hogy a gyakori kibocsátások csökkentésére és a kudarc kockázatok

Telepítés Pipeline lehetővé teszi, hogy gyorsítsák fel a munkát a különböző csapatok (Dev, QA, DevOps) automatizálásával rutinmunka

Ez meg, hogy a példa így

Az első és a középső - ez sobsno a Continuous Integration szerver. Azt ajánljuk, hogy Jenkins,
mert több száz praktikus plug-inek, és a fele nem ad bármilyen kereskedelmi eszközök
Csapat City, Bamboo. Kiegészítő bekezdés javára Jenkins - nyitva van és meg tudod csinálni, hogy építsen a dugó. ezt
lehetőséget általában nagyon jól jön, különösen nagy projektek, ahol a standard funkciók nem megfelelő, és szükség van sok-sok
hogy megírják döntéseket.

Mely beépülő Jenkins'a figyelembe kell venni a végrehajtás Deployment Pipeline'ov:

  • Építsd Pipeline Plugin - sobsno. Ez a plug-in messze nem ideális, mivel a legtöbb Jenkins dugó, a hibák száma (ami lehet rögzíteni). Ez lehetővé teszi, hogy megjelenítsék a szállítószalag. Látványterv nagyon fontos, hogy minden tagja a csapat, beleértve a jövőben az újonnan hamar rájött, milyen környezetben és hogyan fejlődnek a kérelmet. Szintén ez a bővítmény ellenőrzi képes futtatni néhány vagy más tervei vannak. Ennek a végrehajtására telepítési Pipeline'a fontos számodra, hogy a leletek nem mozog a következő fázis, amíg befejezi az előzőt. Például az alkalmazás nem kerül sor a UAT vagy PREPROD környezetben, mielőtt telt automatizált rendszer teszteket.
  • Újraépítése Plugin - például úgy dönt, kiadatlan az alkalmazást, és Éles körülvett kiderült, hogy valami nincs rendben. Praxisomban olyan volt, hogy az alkalmazás futtatásához elfogadhatatlanul lassú a valós adatokat. Ezután meg kell tenni, hogy állítsa vissza a módosítást. Visszagörgetési nem ideális esetben eltér a szokásos kibocsátás, és ha történetesen ebben a helyzetben - csak zarelizte korábbi változatát az alkalmazás! Újraépítése bővítmény lehetővé teszi a korábbi újraindítás épít ugyanazokkal a paraméterekkel.
    Természetesen egy ilyen egyszerű a helyzet nem mindig - néha meg kell, hogy állítsa vissza a változásokat az adatbázisba. Aztán persze még mindig van biztonsági másolatokat. Legyen úgy, hogy minden, ami a környezetében mind ugyanazt a forgatókönyvet - akkor ottestiruete őket százszor inkább a tervezési fázisban.
  • SCM szinkronizálás konfigurálása Plugin - nem kapcsolódik közvetlenül a szállítószalag, de ez jobb verzió változásokat a Continuous Integration szerver. A beljebb az erdőben, annál több fát - CI bizonyos ponton válik a legfontosabb és központi eszköz összetett beállítást. Ez dugót kell használni, nagy óvatossággal, mert előfordult, hogy egyszerűen nem volt hajlandó. Nemrég kezdett el gondolkodni, kézi mentést.

Mesterséges (Binaries)

Következő megálló - az adattár a leletek. Az egyik fő jellemzője ezeknek a telepítési Pipeline'ov - a melléktermékek összegyűjtésére csak egyszer használják az adott környezetben. Ez több okból is fontos:

Kapsz megismételhető környezetek. Van még egy lehetőség, hogy a különböző környezetben voltak különböző forrásokból. Ha gyűjteni minden egyes alkalommal új leletek, akkor azt mondják, így már nem lehet. Egyrészt azért, mert a szerelés közben néhány paraméter a környezet lehet használni, másrészt olyan eszközöket maguk is felmutat. Például Maven használhat egy másik változata egy tárgy használata esetén változat tartományok: [1,5-1,7) .
Egy másik példa - magad Maven Repos (Nexus, például), hogy visszatérhet a különböző tárgyak, attól függően, hogy a beállítások és leírások pom.xml. Ez akkor fordulhat elő, ha a tároló csoportok használnak, amelyek utalnak több tárolók azonos leletek.

Ha bármilyen környezetben találtak egy hibát, akkor mindig letölteni a tárgy egy másik környezetben, hogy ellenőrizze, mi történik.

Más csapatok (QA) visszaállíthatja változatai magukat, és ezáltal lokalizálni a változat, ahol a hiba volt bevezetni.

A CI gyorsabban dolgozik, mert Nem kell tennie további szerelvények.

Ezek különlegessége dolgozó artefaktrami mint a keresés és az indexelés. Létrehozhat több adattárak azokon belül, és korlátozzák őket néhány hozzáférési. Akkor is létrehozhat egy adattár csak stabil tárgyak, és az összes többi elkülönítve tárolják.

Még mindig szükség van rájuk dolgozni Maven, Gradle - letölthető a függőség.

Tárolás leletek Jenkins'e bonyolítja dolgozni vele, például meg kell gondolni, hogyan lehet mentést hatékonyabb.

Összesen azt állapítottuk meg, hogy a tárolt tárgyak és a történelem fontos számunkra. Hogyan kell csinálni? Amikor egy elkövetni, meg kell futtatni a szükséges tesztek és haláluk, és gyűjtsük össze leletek, hogy töltse ki a lerakat. Minden tárgy rendelkeznie kell valamilyen azonosító, néhány változata, így tovább lehetett leereszteni a tárgy más környezetben.

Például a mi JTalks összeszerelési terv a következőképpen néz ki:

Minden terv Jenkins speciális változók, mint BUILD_NUMBER (mi átnevezték PIPELINE_NUMBER) - ez a változó használják egyedülálló, azt jelenti, hogy minden tárgy megkapja a megfelelő utótagot. Továbbá ezzel utótagot, akkor töltse ki a Nexus tárgy egy speciális tároló. mert Mindegyik szerelvény egy egyedi számot utótag - átadjuk ezt a számot másik tervek telepítési Pipeline'a. találják meg a kívánt tárgy és telepíteni a jobb oldalon környezetben.

konfigurálása projektek

Annak érdekében, hogy észre egy szép és egyszerű telepítés Pipeline, a fejlesztők, hogy némi erőfeszítést. Például, ha nem lesz sikeres, ha úgy konfigurálja a projekt építés idején. És ilyen az (Isten ments!) - Elhelyezés a tárgy minden olyan környezetben, ahol az egyetlen különbség a konfiguráció és a kód - ugyanaz. Ahhoz, hogy ez meg kell ragaszkodni egy szabály: be kell állítania az egységet a külső! Akkor hagyja néhány környezet (beleértve az általános helyi) belül atrefaktov és lehetővé teszi, hogy válthatsz köztük néhány flags: -Denvironment = UAT. hanem képesnek kell lennie arra, hogy a beállított paramétereket kívül. Ez a) lehetővé teszi a tárgy telepíteni bármilyen környezetben b) lehetőséget ad arra, hogy tárolja az érzékeny konfiguráció (pl, jelszavak PROD bázis) egy külön forrásban megosztás nélkül.

Most a gyakorlatban: a JTalks rájöttünk lehetőségét bővíti Sping'ovogo PropertyPlaceholderConfigurer JndiAwarePropertyPlaceholderConfigurer. Az elképzelés az, hogy először ellenőrizze, hogy van egy JNDI változó, és csak akkor, ha nem találja, nézd meg a környezeti változókat, majd tulajdonságok fájlokat egy projekten belül. A definíciója néhány lehetőséget a következőképpen nézhet ki:

Most, hogyan kell beállítani tulajdonságai a külső? Valószínűleg mindenkinek van AppServer'a JNDI, Tomcat sem kivétel. Hozzon létre egy fájlt, és helyezze el a conf / Catalina / localhost / [app-namme] .xml. És akkor írj:

Minden paraméter beállított JNDI és ha létrejön, akkor vigye onnan. Ha ez nincs, akkor megnézzük, hogy az env var vagy tulajdonságokat fájlokat.

szerszám

Minden projekt során meg kell felelnie a célszerszám. Vannak mindenféle Ant, Maven, Gradle. Itt tartjuk az utolsó kettő. Maven sajnos nem fér bele az összképet. A gondolat - egy egyedi műalkotás után elkövetni, de Maven regisztrálja a verziót pom.xml és módosítsa után elkövetni valahogy nem comme il faut. Láttam ezt a lehetőséget a nagy projektek esetén használt tematikus ágak és érvényesítési zajlott a színpadon prekommita, a verzió csak akkor frissítjük, ha a kód van, hogy dolgozzon ki egy ág, mint ez, mint ábrázolni Git fetishists. Mindazonáltal a kis és közepes méretű projektek - ez túlzás, és az a tény, hogy a nagy nem jó megoldás. Röviden, csavarja ki a JTalks mindössze helyettesítő verzió, beépített ereklyét, de változtatások véglegesítéséhez tettünk a pom fájlokat.

Gradle egy modernebb és rugalmas eszköz, amely akkor valószínűleg képes lesz testre, ahogy szeretné. De általában ugyanazt a konvenciókat verzióarchiválási hogy Maven. Úgy tűnik tehát, hogy az összeszerelési eszközök nem befolyásolhatják az egyedi változata a leletek. Talán az ötlet egy helyettesítő nélküli verzió elkövetni normális, és nem egy mankó, mint amilyennek tűnt kezdetben.

Scripting Language

Hogy automatizálják a kibocsátások meg kell írni szkripteket. Ez lehet egy bash, Python, Ruby, sablonos, akkor szabadon választhat magának. Bash'a nem valószínű, hogy elég lesz, és minden egyéb speciális egymástól nem különböznek. Azonban vannak előnyei mindegyik:

Python telepítve a legtöbb Linux disztribúció, ráadásul nem kell semmilyen platformon.

Előnye a Ruby, hogy akkor lehet szükség eszközök konfigurálására környezetekben, mint például a Chef. használó Ruby. Akkor is helyezték megfelelő Pipeline Chef. Azonban minden szerver kell előtelepítve soft'om erre.

Groovy kényelmes, mert akkor használja Gradle majd kapcsolja be a szkriptek a forráskódot a projekt magukat, mint a build eszköz.

A scriptek kell csomagolni, például Python saját csomagkezelő - PIP. Ez kényelmes, mert akkor script verziókezelési leletek magukat, és a telepítés lesz sokkal triviális.

Egy példa az ilyen szkriptek Python, megtekinthetjük a nyílt forráskódú.

virtualizáció

Annak érdekében, hogy minden környezetben jobban hasonlít, és nincs váratlan helyzetek kapcsolatban olyan hardver operációs rendszer, akkor figyelembe kell vennie a virtuális környezetek, akár PROD'a virtualizáció. Azt is ad egy lökést a termelékenység, megszünteti a manuális konfiguráció az új környezetben. Egy további előnye az lehet, hogy egy bizonyos ponton a használni kívánt cloud-alapú megoldások, mint például az Amazon EC2, akkor ugrik rájuk a jövőben még inkább egyszerű.

Van egy nagyszerű eszköz, mint egy csavargó. ami nagyban egyszerűsíti a probléma ismétlődő a környezetben. Csak azt kell leírni, hogy milyen képet kell használni, milyen szoftver van telepítve (ez történik az integráció révén a Chef and Puppet) és vu la - kész környezetet egyetlen paranccsal. Most még a malotehnicheskie ember bővítheti a rendszert, minden gond nélkül. JTalks VM bizonyítja képességeit Vagrant'a:

Telepíti Vagrant rázva magukat Vagrant szkript a git tárolóból a fenti

csavargó fel - és egy idő után, amikor minden letölteni és telepíteni, akkor kap egy Ubuntu eloszlás telepítési szkripteket létrehozott projekt van, valamint a MySQL, Tomcat'om.