Yangi boshlanuvchilar uchun qo'llanma: DevOps quvur liniyasini yaratish

Agar siz DevOps-da yangi bo'lsangiz, birinchi quvur liniyasini yaratish bo'yicha ushbu besh bosqichli qo'llanmani ko'rib chiqing.

Yangi boshlanuvchilar uchun qo'llanma: DevOps quvur liniyasini yaratish

DevOps sekin, ajratilgan yoki buzilgan dasturiy ta'minotni ishlab chiqish jarayonlarini tuzatish uchun standart echimga aylandi. Muammo shundaki, agar siz DevOps-da yangi bo'lsangiz va qaerdan boshlashni bilmasangiz, sizda bu usullarni tushunmasligingiz mumkin. Ushbu maqolada DevOps quvur liniyasining ta'rifi muhokama qilinadi va uni yaratish bo'yicha besh bosqichli ko'rsatmalar ham taqdim etiladi. Ushbu qo'llanma to'liq bo'lmasa-da, u sizga sayohatingizni boshlash va kelajakda bilimingizni kengaytirish uchun asos bo'lishi kerak. Ammo tarixdan boshlaylik.

Mening DevOps sayohatim

Men ilgari Citi bulutli infratuzilmasini boshqarish uchun Infrastructure-as-a-Service (IaaS) veb-ilovasini ishlab chiqish bo'yicha Citi Group bulutli jamoasida ishlaganman, lekin men doimo rivojlanish jarayonini qanday samaraliroq qilish va biznesga ijobiy madaniy o'zgarishlar olib kelish bilan qiziqardim. rivojlanish jamoasi. Men javobni Citi kompaniyasining bulutli arxitektura va infratuzilma bo'yicha texnik direktori Greg Lavender tomonidan tavsiya etilgan kitobda topdim. Kitob Feniks loyihasi deb nomlangan (Feniks loyihasi) va u DevOps tamoyillarini tushuntiradi, lekin u roman kabi o'qiydi.

Kitobning orqasidagi jadval turli kompaniyalar o'z tizimlarini relizlar muhitida qanchalik tez-tez joylashtirganini ko'rsatadi:

Amazon: kuniga 23 000
Google: kuniga 5
Netflix: kuniga 500
Facebook: Kuniga bir marta
Twitter: haftasiga 3 marta
Oddiy kompaniya: har 9 oyda bir marta

Amazon, Google va Netflix chastotalari qanday qilib mumkin? Buning sababi shundaki, bu kompaniyalar deyarli mukammal DevOps quvur liniyasini qanday yaratishni aniqladilar.

Citi-da DevOps-ni joriy qilgunimizcha biz bundan uzoq edik. O'sha paytda mening jamoam turli xil muhitlarga ega edi, ammo ishlab chiqish serverida joylashtirish butunlay qo'lda edi. Barcha ishlab chiquvchilar IBM WebSphere Application Server Community Edition asosidagi faqat bitta ishlab chiqish serveriga kirish huquqiga ega edilar. Muammo shundaki, har safar bir nechta foydalanuvchilar bir vaqtning o'zida joylashtirishga harakat qilganda server o'chadi, shuning uchun ishlab chiquvchilar o'z niyatlarini bir-biriga etkazishlari kerak edi, bu juda og'riqli edi. Bundan tashqari, past darajadagi test kodini qamrab olish, qo'lda joylashtirishning noqulay jarayonlari va ma'lum bir vazifa yoki foydalanuvchi hikoyasi bilan bog'liq kodning tarqalishini kuzatishning imkoni yo'qligi bilan bog'liq muammolar mavjud edi.

Men nimadir qilish kerakligini angladim va hamkasb topdim. Biz DevOps boshlang‘ich quvurini qurish bo‘yicha hamkorlik qilishga qaror qildik – u Tomcat virtual mashinasi va dastur serverini o‘rnatdi, men esa Jenkins ustida ishlaganimda, Atlassian Jira va BitBucket-ni birlashtirganimda va test kodini qamrab olishda ishlaganimda. Ushbu yon loyiha juda muvaffaqiyatli bo'ldi: biz ko'plab jarayonlarni deyarli to'liq avtomatlashtirdik, ishlab chiqish serverimizda deyarli 100% ish vaqtiga erishdik, kuzatuvni ta'minladik va kodning sinov qamrovini yaxshiladik va Git filiallarini Jira muammolari yoki joylashtirishlari bilan bog'lash imkoniyatini qo'shdik. Biz DevOps quvur liniyasini qurishda foydalangan vositalarning aksariyati ochiq manba edi.

Endi men DevOps quvur liniyasi qanchalik sodda ekanligini tushundim: biz Jenkins fayllari yoki Ansible kabi kengaytmalardan foydalanmadik. Biroq, bu oddiy quvur liniyasi, ehtimol Pareto printsipi (80/20 qoidasi sifatida ham tanilgan) tufayli yaxshi ishladi.

DevOps va CI/CD quvur liniyasiga qisqacha kirish

Agar siz bir nechta odamdan “DevOps nima?” deb so'rasangiz, siz turli xil javoblarni olasiz. DevOps, Agile singari, ko'plab turli fanlarni qamrab olish uchun rivojlangan, biroq ko'pchilik bir nechta narsada rozi bo'lishadi: DevOps - bu dasturiy ta'minotni ishlab chiqish amaliyoti yoki dasturiy ta'minotni ishlab chiqishning hayot tsikli (SDLC) bo'lib, uning asosiy tamoyili ishlab chiquvchilar va bo'lmaganlar madaniyatini o'zgartiradi. Ishlab chiquvchilar quyidagi muhitda mavjud:

Ilgari qo'lda bajarilgan operatsiyalar avtomatlashtirildi;
Har kim o'zi qiladigan eng yaxshi narsani qiladi;
Muayyan vaqt davomida amalga oshirish soni ortadi; O'tkazish qobiliyati oshadi;
Rivojlanishning moslashuvchanligini oshirish.

To'g'ri dasturiy vositalarga ega bo'lish DevOps muhitini yaratish uchun kerak bo'lgan yagona narsa bo'lmasa-da, ba'zi vositalar muhim ahamiyatga ega. Asosiy vosita - uzluksiz integratsiya va uzluksiz joylashtirish (CI/CD). Ushbu quvur liniyasida muhitlar turli bosqichlarga ega (masalan, DEV, INT, TST, QA, UAT, STG, PROD), ko'plab operatsiyalar avtomatlashtirilgan va ishlab chiquvchilar yuqori sifatli kod yozishlari, rivojlanish tezligi va yuqori joylashtirish tezligiga erishishlari mumkin.

Ushbu maqolada ochiq manba vositalaridan foydalangan holda quyidagi diagrammada ko'rsatilgandek DevOps quvur liniyasini yaratish uchun besh bosqichli yondashuv tasvirlangan.

1-qadam: CI/CD usullari

Sizga kerak bo'lgan birinchi narsa - CI/CD vositasi. Jenkins, Java-ga asoslangan va MIT litsenziyasi ostida litsenziyalangan ochiq manbali vosita, DevOps-ni ommalashtirgan va amalda standartga aylangan vositadir.

Xo'sh, Jenkins nima? Buni turli xil xizmatlar va vositalar bilan gaplasha oladigan va tartibga soluvchi sehrli universal masofadan boshqarish pulti deb o'ylab ko'ring. O'z-o'zidan, Jenkins kabi CI/CD vositasi foydasiz, ammo u turli vositalar va xizmatlarga ulanishi bilan yanada kuchliroq bo'ladi.

Jenkins - bu DevOps quvur liniyasini yaratish uchun foydalanishingiz mumkin bo'lgan ko'plab ochiq manbali CI/CD vositalaridan biri.

Jenkins: Creative Commons va MIT
Travis CI: MIT
Kruiz nazorati: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Kabi: GNU

DevOps jarayonlari CI/CD vositasida qanday ko'rinishga ega:

Yangi boshlanuvchilar uchun qo'llanma: DevOps quvur liniyasini yaratish

Sizning localhostingizda ishlaydigan CI/CD vositasi bor, lekin hozirda siz ko'p narsa qila olmaysiz. Keling, DevOps sayohatining keyingi bosqichiga o'tamiz.

2-qadam: Manbalarni boshqarish tizimlarini boshqarish

CI/CD vositangiz o'z sehrini qila olishini tekshirishning eng yaxshi (va, ehtimol, eng oson) usuli bu manba kodini boshqarish (SCM) vositasi bilan integratsiya qilishdir. Nima uchun manba nazorati kerak? Aytaylik, siz dastur ishlab chiqmoqdasiz. Ilova yaratganingizda, siz dasturlashtirasiz va Java, Python, C++, Go, Ruby, JavaScript yoki zillonlab dasturlash tillaridan foydalanasizmi, muhim emas. Siz yozgan kod manba kod deb ataladi. Boshida, ayniqsa yolg'iz ishlayotganingizda, hamma narsani mahalliy katalogga qo'yish yaxshi bo'ladi. Ammo loyiha kengayib, boshqa odamlarni hamkorlikka taklif qilsangiz, o'zgartirishlarni samarali baham ko'rishda nizolarni oldini olish usuli kerak bo'ladi. Bundan tashqari, oldingi versiyalarni tiklash usuli kerak, chunki zaxira nusxalarini yaratish va ularga nusxa ko'chirish/joylashtirish eskirmoqda. Sizga (va sizning jamoadoshlaringizga) yaxshiroq narsa kerak.

Bu erda manba kodini boshqarish deyarli zaruratga aylanadi. Ushbu vosita sizning kodingizni omborlarda saqlaydi, versiyalarni kuzatib boradi va loyiha ishtirokchilarining ishini muvofiqlashtiradi.

U erda ko'plab manbalarni boshqarish vositalari mavjud bo'lsa-da, Git standartdir va bu to'g'ri. Agar xohlasangiz, boshqa ochiq manba variantlari mavjud bo'lsa-da, men Git-dan foydalanishni tavsiya qilaman.

Git: GPLv2 va LGPL v2.1
Subversiya: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

DevOps quvur liniyasi manba kodini boshqarish elementlari qo'shilishi bilan shunday ko'rinadi.

Yangi boshlanuvchilar uchun qo'llanma: DevOps quvur liniyasini yaratish

CI/CD vositasi ko'rib chiqish, manba kodini olish va a'zolar o'rtasidagi hamkorlik jarayonlarini avtomatlashtirishi mumkin. Yomon emas? Ammo milliardlab odamlar foydalanishi va qadrlashi uchun uni qanday qilib ishlaydigan dasturga aylantirish mumkin?

3-qadam: Qurilishni avtomatlashtirish vositasini yarating

Ajoyib! Siz kodni ko'rib chiqishingiz va manba boshqaruviga o'zgartirishlar kiritishingiz va do'stlaringizni ishlab chiqishda hamkorlik qilishga taklif qilishingiz mumkin. Lekin siz hali dastur yaratmagansiz. Veb-ilovani yaratish uchun uni tarqatiladigan ommaviy formatda kompilyatsiya qilish va paketlash yoki bajariladigan fayl sifatida ishga tushirish kerak. (JavaScript yoki PHP kabi talqin qilingan dasturlash tilini kompilyatsiya qilish shart emasligini unutmang).

Qurilishni avtomatlashtirish vositasidan foydalaning. Qaysi qurilishni avtomatlashtirish vositasidan foydalanishga qaror qilsangiz ham, ularning barchasi bir xil maqsadga ega: manba kodini istalgan formatda yaratish va tozalash, kompilyatsiya qilish, sinovdan o'tkazish va muayyan muhitga joylashtirish vazifasini avtomatlashtirish. Qurilish vositalari sizning dasturlash tilingizga qarab farq qiladi, ammo bu erda bir nechta umumiy ochiq manba variantlari mavjud.

ism
Litsenziya
Dasturlash tili

Maven
Apache 2.0
Java

Ant
Apache 2.0
Java

Gradle
Apache 2.0
Java

bazel
Apache 2.0
Java

qilmoq
GNU
N / A

vaysamoq
MIT
JavaScript

Gulp
MIT
JavaScript

Quruvchi
Apache
yoqut

tırmıklar
MIT
yoqut

AAP
GNU
Python

Toshlar
MIT
Python

BitBake
GPLv2
Python

tort
MIT
C#

ASDF
Expat (MIT)
LISP

Cabal
BSD
Xaskell

Ajoyib! Qurilish avtomatlashtirish vositasi konfiguratsiya fayllarini manba boshqaruv tizimiga joylashtirishingiz va CI/CD vositangizga hamma narsani birlashtirishga ruxsat berishingiz mumkin.

Yangi boshlanuvchilar uchun qo'llanma: DevOps quvur liniyasini yaratish

Hammasi yaxshi, shunday emasmi? Ammo ilovangizni qayerda joylashtirish kerak?

4-qadam: Veb ilovalar serveri

Hozircha sizda bajariladigan yoki o'rnatilishi mumkin bo'lgan paketli fayl mavjud. Har qanday ilova haqiqatan ham foydali bo'lishi uchun u qandaydir xizmat yoki interfeysni taqdim etishi kerak, ammo ilovangizni joylashtirish uchun konteyner kerak.

Veb-ilovalar serveri aynan shunday konteynerdir. Server o'rnatilayotgan paketning mantig'i aniqlanishi mumkin bo'lgan muhitni ta'minlaydi. Server shuningdek interfeysni taqdim etadi va rozetkalarni tashqi dunyoga ta'sir qilish orqali veb-xizmatlarni taklif qiladi. Uni o'rnatish uchun sizga HTTP serveri, shuningdek, ba'zi muhit (masalan, virtual mashina) kerak. Aytaylik, siz bu haqda ko'proq bilib olasiz (garchi men quyida konteynerlarni yopaman).

Bir nechta ochiq manbali veb-ilovalar serverlari mavjud.

ism
Litsenziya
Dasturlash tili

Tomcat
Apache 2.0
Java

Jetty
Apache 2.0
Java

WildFly
GNU Lesser Public
Java

Shisha baliq
CDDL va GNU kamroq ommaviy
Java

Django
3-band BSD
Python

bo'ron
Apache 2.0
Python

Gunikorn
MIT
Python

Python
MIT
Python

Raylar
MIT
yoqut

Node.js
MIT
Javascript

Sizning DevOps quvur liniyasi deyarli foydalanishga tayyor. Yaxshi ish!

Yangi boshlanuvchilar uchun qo'llanma: DevOps quvur liniyasini yaratish

Siz u erda to'xtab, integratsiyani o'zingiz hal qilishingiz mumkin bo'lsa-da, kod sifati ilova ishlab chiqaruvchisi uchun tashvishlanish uchun muhim narsadir.

5-qadam: Kod sinovi qamrovi

Sinovlarni amalga oshirish yana bir og'ir talab bo'lishi mumkin, ammo ishlab chiquvchilar dasturdagi har qanday xatolarni erta aniqlashlari va oxirgi foydalanuvchilarning qoniqishini ta'minlash uchun kod sifatini yaxshilashlari kerak. Yaxshiyamki, kodingizni sinab ko'rish va uning sifatini yaxshilash bo'yicha tavsiyalar berish uchun juda ko'p ochiq manba vositalari mavjud. Eng yaxshisi shundaki, aksariyat CI/CD vositalari ushbu vositalarga ulanishi va jarayonni avtomatlashtirishi mumkin.

Kod testi ikki qismdan iborat: testlarni yozish va ishga tushirishga yordam beruvchi kod sinovi ramkalari va kod sifatini yaxshilashga yordam beruvchi taklif vositalari.

Kodlarni tekshirish tizimlari

ism
Litsenziya
Dasturlash tili

JUnit
Eclipse Public Litsenziya
Java

EasyMock
Apache
Java

Mokito
MIT
Java

PowerMock
Apache 2.0
Java

Pitest
MIT
Python

Faraz
Mozilla
Python

Toksik
MIT
Python

Kodni takomillashtirish bo'yicha tavsiya tizimlari

ism
Litsenziya
Dasturlash tili

Cobertura
GNU
Java

CodeCover
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
Python

Emma
Umumiy davlat litsenziyasi
Java

JaCoCo
Eclipse Public Litsenziya
Java

Faraz
Mozilla
Python

Toksik
MIT
Python

Jasmin
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

bor
MIT
JavaScript

E'tibor bering, yuqorida aytib o'tilgan vositalar va ramkalarning aksariyati Java, Python va JavaScript uchun yozilgan, chunki C++ va C# xususiy dasturlash tillaridir (garchi GCC ochiq manba bo'lsa ham).

Endi siz sinovni qamrab olish vositalarini qo'llaganingizdan so'ng, DevOps quvur liniyasi ushbu qo'llanmaning boshida ko'rsatilgan diagramaga o'xshash bo'lishi kerak.

Qo'shimcha qadamlar

Konteynerlar

Aytganimdek, siz serveringizni virtual mashinada yoki serverda joylashtirishingiz mumkin, ammo konteynerlar mashhur echimdir.

Konteynerlar nima? Qisqacha tushuntirish shundaki, virtual mashinaga dastur hajmidan oshib ketadigan katta hajmdagi operatsion tizim xotirasi kerak, konteyner esa dasturni ishga tushirish uchun faqat bir nechta kutubxonalar va konfiguratsiyalarga muhtoj. Shubhasiz, virtual mashina uchun hali ham muhim foydalanish mavjud, ammo konteyner ilovani, jumladan, dastur serverini joylashtirish uchun engil yechimdir.

Boshqa konteyner variantlari mavjud bo'lsa-da, eng mashhurlari Docker va Kubernetes.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Oraliq avtomatlashtirish vositalari

Bizning DevOps quvur liniyasi birinchi navbatda hamkorlikda ilovalar yaratish va joylashtirishga qaratilgan, ammo DevOps vositalari bilan boshqa ko'plab ishlarni bajarish mumkin. Ulardan biri Infrastructure as Code (IaC) vositalaridan foydalanish bo'lib, ular vositachi avtomatlashtirish vositalari sifatida ham tanilgan. Ushbu vositalar vositachi dasturlarni o'rnatish, boshqarish va boshqa vazifalarni avtomatlashtirishga yordam beradi. Shunday qilib, masalan, avtomatlashtirish vositasi veb-ilovalar serveri, ma'lumotlar bazasi va monitoring vositasi kabi ilovalarni to'g'ri konfiguratsiyaga ega bo'lishi va ularni dastur serveriga joylashtirishi mumkin.

Mana bir nechta ochiq manbali o'rta dasturni avtomatlashtirish vositalari:

Javob: GNU Public
SaltStack: Apache 2.0
Oshpaz: Apache 2.0
Qo'g'irchoq: Apache yoki GPL

Yangi boshlanuvchilar uchun qo'llanma: DevOps quvur liniyasini yaratish

SkillFactory'dan pullik onlayn kurslarda qatnashib, noldan yoki ko'nikma va ish haqi bo'yicha Level Up orqali izlanayotgan kasbni qanday olish haqida batafsil ma'lumot oling:

ko'proq kurslar

Foydali

Manba: www.habr.com

a Izoh qo'shish