Amikor egy alkalmazás nem működik, a legkevésbé akarjuk hallani kollégáinktól azt a mondatot, hogy „a probléma az ön oldalukon van”. Végül a felhasználók szenvednek – őket nem érdekli, hogy a csapat melyik része felelős a hibáért. A DevOps kultúra éppen azért alakult ki, hogy összekötse a fejlesztést és a támogatást, és közös felelősségvállalást teremtsen a végtermékért.
Milyen gyakorlatok tartoznak a DevOps fogalmába és miért van szükség rájuk? Mit csinálnak a DevOps mérnökök, és mire kell nekik képesnek lenniük? Ezekre és más kérdésekre válaszolnak az EPAM szakértői: Kirill Sergejev, rendszermérnök és DevOps evangélista, valamint Igor Bojko, vezető rendszermérnök és az egyik DevOps csapat koordinátora.

Miért szükséges a DevOps?
Régen a fejlesztők és a támogatás (úgynevezett operations) között volt egy akadály. Paradoxon, de különböző céljaik és KPI-jaik voltak, bár közösen dolgoztak. A fejlesztés célja az volt, hogy minél gyorsabban megvalósítsák az üzleti követelményeket és belefűzzék azokat a működő termékbe. A támogatás a stabil működésért felelt – és bármilyen változás veszélyezteti a stabilitást. Jelen van az érdekek konfliktusa – a DevOps azért jött létre, hogy ezt megoldja.
Mi az a DevOps?
A kérdés jó – és vitatott: a világban még nem állapodtak meg véglegesen erről. Az EPAM szerint a DevOps magában foglalja a technológiákat, a folyamatokat és a csapaton belüli együttműködés kultúráját. Ez az egyesülés a végfelhasználóknak nyújtott értékek folyamatos szállítására irányul.
Kirill Sergejev: „A fejlesztők kódot írnak, a tesztelők azt ellenőrzik, az adminisztrátorok pedig az végterméket telepítik a működési környezetbe. Hosszú ideig ezek a csapat részei kissé szétszórtan dolgoztak, majd megjelent az ötlet, hogy egy közös folyamatba vonják őket. Így kerültek be a DevOps gyakorlatok.”
Elérkezett az a nap, amikor a fejlesztők és a rendszermérnökök elkezdtek érdeklődni egymás munkája iránt. Az akadály a gyártás és a támogatás között elkezdett eltűnni. Így született meg a DevOps, amely gyakorlatokat, kultúrát és a csapaton belüli interakció rendjét foglalja magában.

Mi a DevOps kultúra lényege?
A csapat minden tagjára hárul a felelősség a végeredményért. A DevOps filozófiájában a legérdekesebb és legnehezebb feladat az, hogy megértsük: egy adott személy nem csupán a saját munkafázisáért felelős, hanem azért is, hogy a termék egészében hogyan működik. A probléma nem egyetlen ember felelőssége – ez egy közös teher, és minden csapattag hozzájárul annak megoldásához.
A DevOps-kultúra legfontosabb elve az, hogy a problémákat kell megoldani, nem csupán DevOps-gyakorlatokat alkalmazni. Sőt, ezek a gyakorlatok nem "valakinek az oldalán" valósulnak meg, hanem az egész termékre vonatkoznak. A projekthez nem csupán egy DevOps mérnökre van szükség – hanem egy megoldásra a problémákra, és a DevOps mérnök szerepe több csapattag között is megosztható, eltérő szakterületekkel.
Milyen DevOps-gyakorlatok léteznek?
A DevOps-gyakorlatok lefedik a szoftver életciklusának minden szakaszát.
Igor Bojko: "A legjobb eset az, amikor a DevOps-gyakorlatokat a projekt kezdetén kezdjük alkalmazni. Az architektákkal együtt tervezzük meg, hogy milyen architekturális tája lesz az alkalmazásnak, hol fog elhelyezkedni és hogyan fog skálázódni, valamint kiválasztjuk a platformot. Jelenleg a mikroszervíz architektúra divatos – ehhez választunk egy orketráló rendszert: szükség van arra, hogy minden egyes alkalmazás elemet külön-külön tudjunk kezelni és frissíteni másoktól függetlenül. Egy másik gyakorlat az "infrastruktúra, mint kód". Ezt a megközelítést nevezzük így, amikor a projekt infrastruktúráját kód segítségével hozzák létre és kezelik, nem közvetlenül a szerverekkel való kölcsönhatás útján.
Ezt követően áttérünk a fejlesztési fázisra. Itt az egyik legfontosabb gyakorlat a CI/CD kiépítése: segíteni kell a fejlesztőknek, hogy a módosításokat gyorsan, kis adagokban, gyakran és fájdalommentesen integrálják a termékbe. A CI/CD magában foglalja a kód ellenőrzését, a mester kód bázisra való feltöltését és az alkalmazás teszt- és éles környezetre való telepítését.
A CI/CD fázisok során a kód a quality gates-en halad keresztül. Ezek segítségével ellenőrzik, hogy a fejlesztői munkagépről kikerült kód megfeleljen a meghatározott minőségi kritériumoknak. Itt egység- és UI-tesztelés is hozzáadódik. A termék gyors, fájdalommentes és fókuszált telepítéséhez választható a megfelelő telepítési típus.
A DevOps practitioner has a place even at the support stage of a finished product. They are used for monitoring, feedback, security, and implementing changes. DevOps approaches all these tasks from the perspective of continuous improvement. We minimize repetitive operations and automate them. This also includes migrations, application scaling, and maintaining functionality.
What are the benefits of DevOps practices?
If we were to write a textbook on modern DevOps practices, its first page would list three points: automation, accelerated release, and rapid user feedback.
Kirill Sergejev: "The first is automation. We can automate all interactions within the team: writing code – deploying – checking – installing – collecting feedback – returning to the start. All of this is automatic.
The second is the acceleration of the release and even simplification of development. It is always crucial for the customer that the product reaches the market as soon as possible and begins to deliver benefits sooner than competitor analogs. The product delivery process can be continuously improved: reducing time, adding additional checkpoints, enhancing monitoring.
The third is accelerating user feedback. If they have comments, we can immediately make adjustments and update the application right away."

How do the concepts of "system engineer," "build engineer," and "DevOps engineer" relate to each other?
They overlap but pertain to slightly different areas.
A system engineer at EPAM is a position. They can vary in levels: from junior to chief specialist.
A build engineer is more of a role that can be performed on a project. This term is now used for people responsible for CI/CD.
A DevOps engineer is a specialist who implements DevOps practices on a project.
To sum it all up, it turns out that a person in the position of system engineer plays the role of a build engineer on the project and is involved in implementing DevOps practices.
What exactly does a DevOps engineer do?
A DevOps engineer brings together all the components that make up a project. They understand the specifics of the work of programmers, testers, and system administrators, and help simplify their tasks. They understand the needs and requirements of the business, its role in the development process, and build processes with the customer's interests in mind.
We have talked a lot about automation – this is what DevOps engineers primarily focus on. It's a significant aspect that includes, among other things, environment setup.
Kirill Sergejev: "Before implementing updates into a product, they need to be tested in a separate environment. This environment is prepared by DevOps engineers. They also cultivate the DevOps culture within the project as a whole: they implement DevOps practices at all layers of their projects. These three principles: automation, simplification, acceleration – they bring everywhere they can reach."
What should a DevOps engineer know?
In general, they should have knowledge from various fields: programming, working with operating systems, databases, build systems, and configurations. Additionally, they should be skilled in working with cloud infrastructure, orchestration systems, and monitoring.
1. Programming Languages
DevOps engineers should know several basic languages for automation and can, for example, say to a programmer: "How about you install the code not manually, but using our script that automates everything? We will prepare a config file, it will be easy for both you and us to read – and we can change it anytime. Plus, we will see who, when, and for what purpose makes changes to it."
A DevOps engineer can learn one or more of these languages: Python, Groovy, Bash, Powershell, Ruby, Go. In-depth knowledge is not required – understanding the basics of syntax, OOP principles, and being able to write simple automation scripts is sufficient.
2. Operating Systems
A DevOps engineer must understand on which server the product will be installed, in what environment it will run, and which services it will interact with. They can specialize in either the Windows or Linux family.
3. Version Control Systems
Without knowledge of version control systems, a DevOps engineer can go nowhere. Git is one of the most popular systems at the moment.
4. Cloud Providers
AWS, Google, Azure – especially when we talk about the Windows direction.
Kirill Sergejev: „A felhőszolgáltatók biztosítják számunkra virtuális szervereket, amelyek jól illeszkednek a CI/CD keretrendszerbe.
Tíz fizikai szerver telepítése körülbelül száz manuális műveletet igényel. Minden szervert kézzel kell elindítani, telepíteni és a szükséges operációs rendszert beállítani, telepíteni a programunkat ezeken a tíz szerveren, majd tízszer mindent ellenőrizni. A felhőszolgáltatások ezt a folyamatot tíz sor kóddal helyettesítik, és egy jó DevOps mérnöknek tudnia kell, hogyan kell kezelni őket. Így időt, energiát és pénzt takarít meg – mind a megrendelő, mind a cég számára.”
5. Orkesztrációs rendszerek: Docker és Kubernetes
Kirill Sergejev: „A virtuális szerverek konténerekre vannak felosztva, amelyekbe telepíthetjük a programunkat. Amikor sok konténer van, szükség van a kezelésükre: egyet bekapcsolni, egy másikat kikapcsolni, valahol biztonsági mentést készíteni. Ez meglehetősen bonyolult feladat, amelyhez orkesztrációs rendszer szükséges.
Korábban minden alkalmazásnak külön szervere volt – bármilyen változtatás a működésében befolyásolhatta az alkalmazás zavartalan működését. A konténereknek köszönhetően az alkalmazások izoláltak és külön futnak – mindegyik a saját virtuális gépén. Ha hiba történik, nem kell időt vesztegetni az ok keresésére. Egyszerűbb megsemmisíteni a régi konténert és hozzáadni egy újat.”
6. Konfigurációs rendszerek: Chef, Ansible, Puppet
Amikor egy egész szerverparkot kell kezelni, sok hasonló műveletet kell végrehajtani. Ez időigényes és bonyolult, ráadásul a manuális munka növeli a hibázás esélyét. Itt jönnek segítségül a konfigurációs rendszerek. Ezek segítségével egy olyan scriptet készíthetünk, amelyet programozók, DevOps mérnökök és rendszeradminisztrátorok egyaránt könnyen olvashatnak. Ez a script automatikusan segít végrehajtani az azonos műveleteket a szervereken. Így csökken a manuális műveletek (és ezáltal a hibák) száma.
Milyen karriert építhet egy DevOps mérnök?
Fejlődni lehet vízszintesen és függőlegesen is.
Igor Bojko: „A vízszintes fejlődés szempontjából a DevOps mérnökök számára most a legszélesebb lehetőségek állnak rendelkezésre. Minden folyamatosan változik, és a készségeket a legkülönbözőbb irányokba lehet fejleszteni: a verziókezelő rendszerektől a monitorozásig, a konfigurációkezeléstől az adatbázisokig.
Rendszerarchitektorrá válhat, akit érdekel, hogy hogyan működik egy alkalmazás annak minden szakaszában – a fejlesztéstől a támogatásig.
Hogyan válhatunk DevOps mérnökké?
- Olvassa el a „Phoenix Project” és a DevOps Handbook könyveket. Ezek a DevOps filozófiájának igazi alapkövei, az első ráadásul egy szépirodalmi mű.
- Tanulmányozza a fent említett technológiákat: egyedül vagy online tanfolyamokon.
- Csatlakozzon DevOps mérnökként egy nyílt forráskódú projekthez.
- Gyakorolja és ajánlja a DevOps gyakorlatokat saját és munkahelyi projektjein.
Forrás: habr.com
