Внедряване тръбопровод на практика

Внедряване в практиката на тръбопроводния

Резюме. мрежата има много теоретичен материал върху непрекъсната доставка Внедряване Pipeline'ov, но практически реализации на примерите все още не е намерен. Всъщност тук искам да споделя един пример за това как ние реализира газопровод за внедряване в рамките на нашия проект с отворен код, JTalks. Всичко с отворен код, така че не само да прочетете обяснението, но за да открадне, и изпълнение.







Ако не разбирате какво внедряване Pipeline и защо имате нужда от него, ето някои точки, обаче, за да се разбере напълно необходимостта да се прочете до края:

Внедряване Pipeline - набор от практики, за да се автоматизира разгръщането на приложения за различни среди, включително и производство

Внедряване на тръбопроводния ви позволява да правите чести пресата и намаляване на рисковете недостатъчност

Внедряване на тръбопроводния ви позволява да се ускори работата на различните отбори (Dev, QA, DevOps) чрез автоматизиране на рутинни работа

Тя може да изглежда на примера така

Първият и централната - това sobsno ни Непрекъснато интеграция сървър. Аз препоръчвам да го използвате Дженкинс,
защото има стотици полезни плъгини, както и половината от тях няма да ви даде всякакъв вид търговски инструменти
Екип Сити, Bamboo. Допълнителен параграф, в полза на Дженкинс - той е отворен и ще можете да направите, за да надграждат плъгини. това
възможност обикновено идва в много удобен особено големи проекти, където стандартни функции, не са подходящи и се нуждаят от много
да напише своите решения.

Кои плъгини Jenkins'a трябва да се счита за изпълнение внедряване Pipeline'ov:

  • Изграждане на тръбопровод Plugin - sobsno. Този плъгин е далеч от идеалното, тъй като повечето Дженкинс плъгини, с редица бъгове (която можете да поправите). Това дава възможност да се визуализира конвейер. Визуализацията е много важно, че всички членове на екипа, включително бъдещите новодошлите бързо осъзнаха какво са околната среда и как да се развива на заявлението. Също така този плъгин контролира способността да работят с някои или други планове. За изпълнение на тази внедряване Pipeline'a важно за вас да направите свои артефакти не се движат към следващата фаза, докато не завършите предишния. Например, приложението ви не трябва да се проведе в UAT или PREPROD среда, преди да премина автоматизирани тестове на системата.
  • Rebuild Plugin - например решите неиздавани кандидатурата си, и по-PROD заобиколен се оказа, че нещо не е наред. В моята практика аз бях такава, че приложението да работи неприемливо бавно на реални данни. След това трябва да бъде в състояние да се връщам промяната. Намаление на цените не трябва в идеалния случай да е различен от обичайния освобождаването, а ако се случи да бъде в тази ситуация - просто zarelizte предишна версия на вашата кандидатура! Rebuild Plugin позволява предишния рестарт изгражда със същите параметри.
    Разбира се такава проста ситуация не винаги е - понякога трябва да се откажете от промени в базата данни. След това, разбира се, все още трябва да се възстанови на резервни копия. Направете го така, че някой от вашето обкръжение всички използвани един и същ скрипт - тогава можете да ги ottestiruete стотици пъти повече от фазата на проектиране.
  • SCM Sync Configuration Plugin - това не е пряко свързано с вашия конвейер, но това е по-добре да се промени версия в Непрекъснато си интеграция сървър. За по-навътре в гората, толкова повече дърво - CI в някакъв момент той става най-важния си и основен инструмент със сложна конфигурация. Този щепсел трябва да се използва с повишено внимание, тъй като това се е случило, че той просто отказа. Наскоро започнахме да мислим за ръчно архивиране.

Артефакти (Binaries)

Следваща спирка - хранилище на вашите артефакти. Една от основните характеристики на тези внедряване Pipeline'ov - вашите артефакти се събират само веднъж и да се използват във всяка среда. Това е важно по няколко причини:

Можете да получите повторяеми среди. Дори няма възможност, че различните среди са различни източници. Ако всеки път, когато се съберат нови артефакти, а след това се каже така вече не може. На първо място, тъй като по време на монтажа могат да се използват някои параметри на околната среда, и второ, да създават инструменти, сами може да покаже. Например, Maven да използвате различна версия на един артефакт, ако използвате версия диапазони: [1.5-1.7) .
Друг пример - сами Maven Репо (Nexus, например), които могат да се извеждат различни артефакти, в зависимост от тяхното настройки и описания pom.xml. Това може да се случи, ако хранилището групи се използват, които се отнасят до множество хранилища със същите артефакти.

Ако се установи, всяка среда за грешка, винаги можете да изтеглите същия артефакт в друга среда, за да се провери какво става.







Други отбори (QA) да се откажете от версии на себе си и по този начин да се локализират версията, където е въведена грешката.

Вашият CI работи по-бързо, защото Не е нужно да правите допълнителни възли.

Те имат специални функции за работа с artefaktrami като търсене и индексиране. Можете да създадете няколко хранилища в тях и да ги ограничи до някои от достъпа. Можете дори да създаде хранилище само със стабилни артефакти, както и всички други се съхраняват отделно.

Вие все още се нуждаят от тях, за да работи с Maven, Gradle - да се изтегли от тяхната зависимост.

артефакти съхранение Jenkins'e усложнява работещи с него, например, трябва да се мисли за това как да направите резервни копия по-ефективни.

Общо, ние установихме, че съхраняваните артефакти и тяхната история е важна за нас. Как да го направя така? Когато се ангажират, вие трябва да изпълните необходимите изпитвания и тяхното преминаване и събира артефакти да попълните вашето хранилище. Всеки артефакт трябва да има някакъв идентификатор, някои версия на, така че върху него може да изпуснете артефакт в други среди.

Така например, в нашите JTalks план монтаж изглежда така:

Всеки план Дженкинс имат специални променливи като BUILD_NUMBER (ние преименуван през PIPELINE_NUMBER) - тази променлива се използва за уникален, искам да кажа на всеки артефакт получава подходящата наставка. Освен това, с тази наставка, попълваме Nexus артефакт в специално хранилище. защото Всеки комплект е с уникален номер наставка - минаваме този номер в другите ни планове за разполагане Pipeline'a. те намерите желания артефакт и го поставяме върху правилните среди.

Конфигуриране на проекти

За да се реализира красив и прост тръбопровод за внедряване, разработчиците трябва да се направят някои усилия. Например, няма да успеете, ако конфигурирате проекта на натрупване на времето. И такава е (не дай боже!) - Поставяне на артефакта за всяка среда, където единствената разлика е в конфигурацията, и кода - едни и същи. За да го получите, трябва да се придържаме към едно правило: трябва да конфигурирате събранието отвън! Можете да оставите някои от околната среда (включително обща местно) в рамките на atrefaktov и ви позволява да превключвате между тях с помощта на някои знамена: -Denvironment = UAT. но също така трябва да може да се определят параметрите на открито. Това е) да позволи на артефакта за разполагане на всяка работна среда б) дава възможност за съхранение на важна конфигурация (например пароли PROD база) в отделно хранилище без споделяне.

Сега за практиката: в JTalks разбрахме, възможността за разширяване на своята Sping'ovogo PropertyPlaceholderConfigurer JndiAwarePropertyPlaceholderConfigurer. Идеята е, че ние първо проверете дали има променлива JNDI, и едва след това, ако не е намерен, погледнете на околната среда променливи и свойства файловете в рамките на даден проект. Дефиниция на някои опции може да изглежда така:

Сега, как да зададете свойства отвън? Вероятно всеки има AppServer'a JNDI, Tomcat не е изключение. Създайте файл и го поставете в CONF / Каталина / Localhost / [ап-namme] .xml. И след това да напишете:

Всички параметри се задават в JNDI и ако тя решава, че ще го вземе от там. Ако не е там, а след това ние с нетърпение да Варс на Env или свойства файлове.

инструмент монтаж

Всеки курс проект трябва да отговаря на специалния инструмент. Има най-различни Ant, Maven, Gradle. Тук ние считаме последните две. Maven за съжаление не се вписва в общата картина. Нашата идея - да има уникален артефакт след всяко ангажират, но Maven регистрира си версия в pom.xml и да ги променят след всяко някак си не Comme Ще faut ангажират. Виждал съм тази опция в големи проекти, когато се използват тематични отрасли и валидиране се проведоха в prekommita на сцената, версията се актуализира само когато кодът трябва да се развие като този клон като да обрисуват Git фетишисти. Въпреки това, за малки и средни проекти - това е Overkill, и на факта, че голяма не е добър вариант. С една дума, ние трябва да развиваме JTalks само, че заместител версия, вграден артефакт, но извърши промените, които са направени в ОРП файлове.

Gradle е по-модерен и гъвкав инструмент, който най-вероятно ще бъде в състояние да персонализирате, както желаете. Но той обикновено използва същите конвенции за създаване на версии, които Maven. Затова, изглежда, че инструментите за монтаж не трябва да влияят на уникална версия на артефакти. Може би идеята за заместител версия, без да се ангажират е нормално и не патерица като първоначално изглеждаше.

скриптов език

За автоматизиране на изданията, които трябва да пиша скриптове. Тя може да бъде Баш, питон, рубин, грууви, ти си свободен да избере за себе си. Bash'a е малко вероятно да бъде достатъчно, както и всички други специални един от друг не се различават. Все пак, има предимства на всеки един от тях:

Python е инсталирана на повечето Линукс дистрибуции, допълнително не е нужно да слагате платформи.

Плюсове като Ruby, че тогава може да се наложи инструменти за конфигуриране на среди, като главния готвач. че използвате Ruby. Можете дори да пуснат в правилното Pipeline готвач. Въпреки това, всички сървъри трябва да бъдат с предварително инсталирана soft'om за това.

Groovy е удобен, защото можете да използвате Gradle и след това включете скриптове в изходния код на проекта си като инструмент натрупване.

Скриптовете трябва да бъдат опаковани, например, Python има своя собствена програма за управление на пакетите - PIP. Това е удобно, защото можете да скрипт версии артефакти себе си, и инсталацията ще бъде много по-тривиално.

Пример за такива скриптове в Python, можете да видите в нашия отворен код.

виртуализация

За да се гарантира, че всички среди са по-сходни и няма непредвидени ситуации, свързани с всеки хардуер операционна система, трябва да помислите за вашите среди за виртуализация, до PROD'a виртуализация. Тя също така ще ви даде тласък на производителността като премахване на ръчната конфигурация на нови среди. Допълнително предимство може да се окаже, че в един момент, който искате да използвате, базирани на облак решения като Amazon EC2, после скочи върху тях ще бъде още по-лесно.

Има един чудесен инструмент като скитник. което значително опростява проблема с повтаряне на околностите. Ти просто трябва да се опише това, което да се използва изображение, това, което е инсталиран софтуер (това се прави чрез интеграция с готвач и Куклен) и ву ла - готов среда, в една единствена команда. Сега дори и най-malotehnicheskie хората могат да разширят системата си без никакви проблеми. JTalks VM демонстрира възможностите Vagrant'a:

Можете да инсталирате скитник себе си разклащане скитник скриптове от Git хранилището на горното

скитник нагоре - и след известно време, когато всички изтеглите и инсталирате, можете да получите на разпределение на Ubuntu с проект за внедряване на скриптове установен там, както и MySQL, Tomcat'om.