Дастур барои шурӯъкунандагон: Эҷоди лӯлаи DevOps

Агар шумо дар DevOps нав бошед, ба ин дастури панҷқадам барои сохтани лӯлаи аввалини худ нигаред.

Дастур барои шурӯъкунандагон: Эҷоди лӯлаи DevOps

DevOps як ҳалли стандартӣ барои ислоҳи равандҳои суст, ҷудошуда ё вайроншудаи таҳияи нармафзор шудааст. Мушкилот дар он аст, ки агар шумо дар DevOps нав бошед ва намедонед, ки аз куҷо оғоз кунед, шумо шояд дар бораи ин усулҳо фаҳмо надошта бошед. Ин мақола таърифи лӯлаи DevOps-ро баррасӣ мекунад ва инчунин дастурҳои панҷқадамро барои сохтани он пешниҳод мекунад. Гарчанде ки ин дарсӣ мукаммал нест, он бояд ба шумо барои оғоз кардани саёҳат ва густариши дониши шумо дар оянда замина диҳад. Аммо биёед аз таърих оғоз кунем.

Сафари DevOps ман

Ман қаблан дар гурӯҳи абрии Citi Group кор мекардам, ки як барномаи веби Infrastructure-as-a-Service (IaaS)-ро барои идоракунии инфрасохтори абрии Citi таҳия мекард, аммо ман ҳамеша ба он шавқ доштам, ки чӣ гуна раванди рушдро самараноктар гардонам ва тағироти мусбати фарҳангиро ба дастаи рушд. Ман ҷавобро дар китобе ёфтам, ки аз ҷониби Грег Лавандер, CTO-и меъморӣ ва инфрасохтори абрӣ дар Citi тавсия шудааст. Китоб Лоиҳаи Феникс ном дошт (Лоиҳаи Феникс) ва он принсипҳои DevOps-ро шарҳ медиҳад, аммо он мисли роман мехонад.

Ҷадвал дар паси китоб нишон медиҳад, ки чӣ тавр ширкатҳои гуногун системаҳои худро дар муҳити озод ҷойгир мекунанд:

Amazon: 23 дар як рӯз
Google: 5 дар як рӯз
Netflix: 500 дар як рӯз
Facebook: Як маротиба дар як рӯз
Twitter: 3 маротиба дар як ҳафта
Ширкати маъмулӣ: як маротиба дар 9 моҳ

Чӣ тавр басомадҳои Amazon, Google ва Netflix ҳатто имконпазиранд? Сабаб дар он аст, ки ин ширкатҳо фаҳмиданд, ки чӣ гуна лӯлаи тақрибан комили DevOps эҷод кунанд.

Мо аз ин дур будем, то даме ки DevOps-ро дар Citi татбиқ кунем. Он вақт, дастаи ман муҳитҳои гуногун дошт, аммо ҷойгиркунӣ дар сервери таҳия комилан дастӣ буд. Ҳама таҳиягарон танҳо ба як сервери таҳия дар асоси нашри Community Server Application Server IBM WebSphere дастрасӣ доштанд. Мушкилот дар он буд, ки сервер вақте ки корбарони сершумор кӯшиш мекарданд, ки дар як вақт ҷойгир кунанд, хомӯш мешавад, бинобар ин таҳиягарон маҷбур буданд ниятҳои худро ба ҳамдигар бигӯянд, ки ин хеле дардовар буд. Илова бар ин, мушкилот бо фарогирии коди санҷишии сатҳи паст, равандҳои вазнини ҷобаҷогузории дастӣ ва нотавонӣ барои пайгирӣ кардани густариши коди марбут ба вазифаи мушаххас ё ҳикояи корбар вуҷуд доштанд.

Ман фаҳмидам, ки коре кардан лозим аст ва ҳамкори ҳамфикр пайдо кардам. Мо тасмим гирифтем, ки дар сохтани лӯлаи ибтидоии DevOps ҳамкорӣ кунем - ӯ мошини маҷозии Tomcat ва сервери барномаро таъсис дод, вақте ки ман дар Ҷенкинс кор мекардам, Atlassian Jira ва BitBucket-ро муттаҳид мекардам ва дар фарогирии коди санҷишӣ кор мекардам. Ин лоиҳаи паҳлӯ хеле муваффақ буд: мо бисёр равандҳоро қариб пурра автоматӣ кардем, қариб 100% вақти кор дар сервери таҳияи худро ба даст овардем, пайгирӣ ва фарогирии беҳтари санҷиши кодро таъмин кардем ва қобилияти пайваст кардани филиалҳои Git ба мушкилот ё ҷойгиркунии Jira илова кардем. Аксари абзорҳое, ки мо барои сохтани лӯлаи DevOps истифода мебурдем, манбаи кушода буданд.

Акнун ман фаҳмидам, ки лӯлаи DevOps мо то чӣ андоза содда буд: мо васеъкуниро ба монанди файлҳои Ҷенкинс ё Ansible истифода набурдем. Бо вуҷуди ин, ин қубури оддӣ хуб кор кард, шояд аз сабаби принсипи Парето (инчунин ҳамчун қоидаи 80/20 маълум аст).

Муқаддимаи мухтасар ба DevOps ва лӯлаи CI/CD

Агар шумо аз якчанд нафар пурсед, ки "DevOps чист?", шумо эҳтимол якчанд ҷавобҳои гуногун хоҳед гирифт. DevOps, ба монанди Agile, барои фарогирии бисёр фанҳои гуногун таҳаввул кардааст, аммо бештари одамон дар чанд чиз розӣ хоҳанд шуд: DevOps як таҷрибаи таҳияи нармафзор ё давраи ҳаёти таҳияи нармафзор (SDLC) мебошад, ки ақидаи марказии он фарҳангеро, ки дар он таҳиягарон ва ғайридавлатӣ тағйир медиҳанд, тағйир медиҳад. таҳиягарон дар муҳите вуҷуд доранд, ки дар он:

Амалиёте, ки пештар дастй ичро мешуданд, автоматй кунонда шуданд;
Ҳар кас он чизеро, ки аз дасташ меояд, мекунад;
Миқдори амалисозӣ дар як давраи муайян меафзояд; Ҳаҷми интиқол меафзояд;
Баланд бардоштани чандирии рушд.

Гарчанде ки доштани асбобҳои дурусти нармафзор ягона чизе нест, ки ба шумо барои эҷоди муҳити DevOps лозим аст, баъзе асбобҳо муҳиманд. Воситаи калидӣ ин ҳамгироии пайваста ва густариши пайваста (CI/CD) мебошад. Дар ин лӯла, муҳитҳо марҳилаҳои гуногун доранд (масалан, DEV, INT, TST, QA, UAT, STG, PROD), бисёр амалиётҳо автоматӣ карда мешаванд ва таҳиягарон метавонанд коди баландсифат нависанд, қобилияти рушд ва суръати баланди густаришро ба даст оранд.

Ин мақола равиши панҷмарҳиларо барои сохтани лӯлаи DevOps ба монанди равиши дар диаграммаи зерин бо истифода аз абзорҳои кушодаасос тавсиф мекунад.

Қадами 1: Усулҳои CI/CD

Аввалин чизе, ки ба шумо лозим аст, асбоби CI/CD аст. Ҷенкинс, як воситаи кушодаасос дар асоси Java ва литсензияи MIT мебошад, асбобест, ки DevOps-ро маъмул кардааст ва ба стандарти воқеӣ табдил ёфтааст.

Пас Ҷенкинс чист? Онро ҳамчун як пулти универсалии ҷодугарӣ тасаввур кунед, ки метавонад бо хидматҳо ва асбобҳои гуногун сӯҳбат ва ташкил кунад. Худ аз худ, як абзори CI/CD ба монанди Ҷенкинс бефоида аст, аммо он бо пайвастшавӣ ба асбобҳо ва хидматҳои гуногун пурқувваттар мешавад.

Ҷенкинс танҳо яке аз абзорҳои кушодаи CI/CD мебошад, ки шумо метавонед барои сохтани лӯлаи DevOps худ истифода баред.

Ҷенкинс: Creative Commons ва MIT
Травис CI: MIT
Назорати Круз: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

Ин аст равандҳои DevOps бо асбоби CI/CD чӣ гунаанд:

Дастур барои шурӯъкунандагон: Эҷоди лӯлаи DevOps

Шумо як абзори CI/CD доред, ки дар ҳости шумо кор мекунад, аммо дар айни замон шумо коре карда наметавонед. Биёед ба марҳилаи навбатии сафари DevOps гузарем.

Қадами 2: Идоракунии системаҳои идоракунии манбаъ

Беҳтарин (ва шояд осонтарин) роҳи тасдиқи он, ки асбоби CI/CD-и шумо метавонад ҷодугарии худро иҷро кунад, ин ҳамгироӣ бо асбоби назорати коди манбаъ (SCM) мебошад. Чаро ба шумо назорати манбаъ лозим аст? Фарз мекунем, ки шумо барнома таҳия карда истодаед. Ҳар вақте, ки шумо барнома эҷод мекунед, шумо барномасозӣ мекунед ва муҳим нест, ки шумо Java, Python, C++, Go, Ruby, JavaScript ё яке аз забонҳои барномасозиро истифода мебаред. Рамзе, ки шумо менависед, рамзи сарчашма номида мешавад. Дар аввал, хусусан вақте ки шумо танҳо кор мекунед, эҳтимолан хуб аст, ки ҳама чизро дар феҳристи маҳаллӣ ҷойгир кунед. Аммо вақте ки лоиҳа васеътар мешавад ва шумо одамони дигарро ба ҳамкорӣ даъват мекунед, ба шумо роҳи пешгирии муноқишаҳо ҳангоми мубодилаи самараноки тағирот лозим аст. Ба шумо инчунин роҳи барқарор кардани версияҳои қаблӣ лозим аст, зеро эҷоди нусхаҳои эҳтиётӣ ва нусхабардорӣ/часбондан ба онҳо кӯҳна шуда истодааст. Шумо (ва ҳамкорони шумо) ба чизи беҳтар ниёз доред.

Ин аст, ки дар он ҷо назорати рамзи сарчашма қариб як зарурат мегардад. Ин асбоб рамзи шуморо дар анборҳо нигоҳ медорад, версияҳоро пайгирӣ мекунад ва кори иштирокчиёни лоиҳаро ҳамоҳанг мекунад.

Дар ҳоле ки дар он ҷо воситаҳои зиёди идоракунии манбаъ мавҷуданд, Git стандарт аст ва дуруст аст. Ман истифодаи Git-ро хеле тавсия медиҳам, гарчанде ки имконоти дигари кушодаасос вуҷуд доранд, агар шумо хоҳед.

Git: GPLv2 ва LGPL v2.1
Версия: Apache 2.0
Системаи версияҳои ҳамзамон (CVS): GNU
Веста: LGPL
Mercurial: GNU GPL v2+

Ин аст он чизе ки лӯлаи DevOps бо илова кардани назорати рамзи сарчашма ба назар мерасад.

Дастур барои шурӯъкунандагон: Эҷоди лӯлаи DevOps

Воситаи CI/CD метавонад равандҳои барраси, дарёфти коди сарчашма ва ҳамкорӣ байни аъзоёнро автоматӣ кунад. Бад не? Аммо чӣ гуна шумо онро ба як барномаи корӣ табдил медиҳед, то миллиардҳо одамон онро истифода баранд ва қадр кунанд?

Қадами 3: Сохтани асбоби автоматикунонии сохтмон

Аҷоиб! Шумо метавонед кодро аз назар гузаронед ва ба идоракунии манбаъ тағирот ворид кунед ва дӯстони худро барои ҳамкорӣ дар таҳияи барнома даъват кунед. Аммо шумо то ҳол барнома эҷод накардаед. Барои сохтани веб-барнома, он бояд дар формати партияи ҷойгиршаванда тартиб дода ва баста карда шавад ё ҳамчун файли иҷрошаванда иҷро карда шавад. (Дар хотир доред, ки забони барномасозии тафсиршуда ба монанди JavaScript ё PHP набояд тартиб дода шавад).

Асбоби автоматикунонии сохтмонро истифода баред. Новобаста аз он, ки шумо кадом асбоби автоматикунонии сохтани биноро истифода баред, ҳамаи онҳо як ҳадаф доранд: рамзи сарчашмаро ба ягон формати дилхоҳ созед ва вазифаи тозакунӣ, тартиб додан, озмоиш ва ҷойгиркунӣ дар муҳити мушаххасро автоматӣ кунед. Воситаҳои сохтан вобаста ба забони барномасозии шумо фарқ мекунанд, аммо дар ин ҷо баъзе вариантҳои маъмули кушодаасос мавҷуданд.

Title
Литсензия
Забони барномасозӣ

Maven
Apache 2.0
Java

Анти
Apache 2.0
Java

Gradle
Apache 2.0
Java

Базел
Apache 2.0
Java

Ворид
GNU
N / A

Грант
MIT
JavaScript

Гулп
MIT
JavaScript

Бинокор
Apache
лаъл

Ишк
MIT
лаъл

А-А-П
GNU
Python

Сконҳо
MIT
Python

BitBake
GPLv2
Python

торт
MIT
C#

ASDF
Экспат (MIT)
Лисп

Кабал
BSD
Хаскелл

Аҷоиб! Шумо метавонед файлҳои конфигуратсияи асбоби автоматикунонии сохтанро ба системаи идоракунии сарчашмаи худ ҷойгир кунед ва бигзоред, ки асбоби CI/CD-и шумо ҳама чизро якҷоя кунад.

Дастур барои шурӯъкунандагон: Эҷоди лӯлаи DevOps

Ҳама чиз хуб аст, ҳамин тавр не? Аммо аризаи худро дар куҷо ҷойгир кунед?

Қадами 4: Веб-сервер

Ҳоло шумо як файли басташуда доред, ки метавонад иҷрошаванда ё насбшаванда бошад. Барои он ки ҳар як барнома воқеан муфид бошад, он бояд як навъ хидмат ё интерфейсро таъмин кунад, аммо барои ҷойгир кардани замимаи шумо контейнер лозим аст.

Сервери веб-барнома маҳз чунин контейнер аст. Сервер муҳитеро фароҳам меорад, ки дар он мантиқи бастаи ҷойгиршавандаро муайян кардан мумкин аст. Сервер инчунин интерфейсро таъмин мекунад ва хидматҳои вебро тавассути фош кардани розеткаҳо ба ҷаҳони беруна пешниҳод мекунад. Барои насб кардани он ба шумо сервери HTTP ва инчунин баъзе муҳит (ба монанди мошини виртуалӣ) лозим аст. Ҳоло, биёед фарз кунем, ки шумо дар ин бора бештар маълумот хоҳед гирифт (гарчанде ки ман контейнерҳоро дар зер мепӯшам).

Якчанд серверҳои веб-барномаҳои кушода мавҷуданд.

Title
Литсензия
Забони барномасозӣ

Томск
Apache 2.0
Java

Ҷалол
Apache 2.0
Java

Вайлдпарвоз
GNU Lesser Public
Java

GlassFish
CDDL & GNU камтар ҷамъиятӣ
Java

Django
3-банди BSD
Python

гирдбод
Apache 2.0
Python

Ганҷор
MIT
Python

Python
MIT
Python

Решаҳо
MIT
лаъл

Node.js
MIT
ботов

Қубури DevOps шумо қариб барои истифода омода аст. Кори нағз!

Дастур барои шурӯъкунандагон: Эҷоди лӯлаи DevOps

Ҳангоме ки шумо метавонед дар он ҷо таваққуф кунед ва ҳамгироиро худатон ҳал кунед, сифати код барои таҳиягари барнома як чизи муҳимест, ки аз он нигарон аст.

Қадами 5: Фарогирии санҷиши код

Татбиқи санҷишҳо метавонад боз як талаботи душвор бошад, аммо таҳиягарон бояд ҳама хатогиҳоро дар барнома барвақт ошкор кунанд ва сифати кодро беҳтар созанд, то корбарони ниҳоӣ қаноатманд бошанд. Хушбахтона, воситаҳои зиёди кушодаасос барои санҷиши рамзи шумо ва пешниҳоди тавсияҳо барои беҳтар кардани сифати он мавҷуданд. Аз ҳама беҳтар он аст, ки аксари абзорҳои CI/CD метавонанд ба ин асбобҳо пайваст шаванд ва равандро автоматӣ кунанд.

Санҷиши код аз ду қисм иборат аст: чаҳорчӯбаи санҷиши код, ки ба шумо навиштан ва иҷро кардани санҷишҳо кӯмак мерасонанд ва асбобҳои пешниҳодие, ки ба беҳтар кардани сифати коди шумо кӯмак мерасонанд.

Системаҳои санҷиши код

Title
Литсензия
Забони барномасозӣ

JUnit
Литсензияи ҷамъиятӣ
Java

EasyMock
Apache
Java

Мокито
MIT
Java

PowerMock
Apache 2.0
Java

Питест
MIT
Python

Фарзия
Mozilla
Python

Токс
MIT
Python

Системаҳои тавсиявӣ барои такмил додани код

Title
Литсензия
Забони барномасозӣ

Кобертура
GNU
Java

CodeCover
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
Python

Эмма
Литсензияи умумии ҷамъиятӣ
Java

JaCoCo
Литсензияи ҷамъиятӣ
Java

Фарзия
Mozilla
Python

Токс
MIT
Python

Jasmine
MIT
JavaScript

карма
MIT
JavaScript

Mocha
MIT
JavaScript

аст
MIT
JavaScript

Дар хотир доред, ки аксари асбобҳо ва чаҳорчӯбаҳои дар боло зикршуда барои Java, Python ва JavaScript навишта шудаанд, зеро C++ ва C# забонҳои хусусии барномасозӣ мебошанд (гарчанде ки GCC манбаи кушода аст).

Акнун, ки шумо асбобҳои фарогирии санҷишро татбиқ кардаед, лӯлаи DevOps-и шумо бояд ба диаграммаи дар аввали ин дарс нишон додашуда монанд бошад.

Қадамҳои иловагӣ

Контейнерҳо

Тавре ки ман гуфтам, шумо метавонед сервери худро дар як мошини виртуалӣ ё сервер ҷойгир кунед, аммо контейнерҳо як ҳалли маъмуланд.

Контейнерҳо чист? Шарҳи кӯтоҳ ин аст, ки як мошини виртуалӣ ба миқдори зиёди хотираи системаи оператсионӣ ниёз дорад, ки аз андозаи барнома зиёд аст, дар ҳоле ки контейнер барои иҷро кардани барнома танҳо чанд китобхона ва конфигуратсия лозим аст. Аён аст, ки барои як мошини маҷозӣ то ҳол истифодаҳои муҳим вуҷуд доранд, аммо контейнер як ҳалли сабук барои ҷойгиркунии барнома, аз ҷумла сервери барномаҳо мебошад.

Гарчанде ки имконоти дигари контейнер мавҷуданд, маъмултаринашон Docker ва Kubernetes мебошанд.

Докер: Apache 2.0
Kubernetes: Apache 2.0

Воситаҳои автоматикунонии мобайнӣ

Қубури DevOps мо пеш аз ҳама ба эҷод ва густариши муштараки замимаҳо нигаронида шудааст, аммо бисёр чизҳои дигаре ҳастанд, ки бо асбобҳои DevOps анҷом дода мешаванд. Яке аз онҳо ин истифодаи абзорҳои Инфрасохтор ҳамчун Кодекс (IaC) мебошад, ки онҳо ҳамчун абзорҳои автоматикунонии миёнаравӣ низ маълуманд. Ин воситаҳо ба автоматикунонии насб, идоракунӣ ва дигар вазифаҳо барои миёнаравӣ кӯмак мекунанд. Ҳамин тавр, масалан, як асбоби автоматикунонӣ метавонад барномаҳоеро ба мисли сервери веб-барномаҳо, пойгоҳи додаҳо ва абзори мониторинг бо конфигуратсияҳои дуруст истихроҷ кунад ва онҳоро дар сервери барномаҳо ҷойгир кунад.

Инҳоянд баъзе абзорҳои автоматикунонии миёнаравии кушодаасос:

Маслиҳат: GNU Public
SaltStack: Apache 2.0
Ошпаз: Apache 2.0
Лӯхтак: Apache ё GPL

Дастур барои шурӯъкунандагон: Эҷоди лӯлаи DevOps

Тафсилотро дар бораи чӣ гуна аз сифр ба даст овардани касби серталаб ё Level Up аз рӯи малака ва маош тавассути гирифтани курсҳои онлайни пулакӣ аз SkillFactory омӯзед:

курсҳои бештар

Муфид

Манбаъ: will.com

Илова Эзоҳ