Przewodnik DevOps dla początkujących

Jakie jest znaczenie DevOps, co oznacza dla specjalistów IT, opis metod, frameworków i narzędzi.

Przewodnik DevOps dla początkujących

Wiele się wydarzyło, odkąd termin DevOps zadomowił się w świecie IT. Ponieważ większość ekosystemu jest typu open source, ważne jest, aby ponownie rozważyć, dlaczego tak się zaczęło i co to oznacza dla kariery w IT.

Co to jest DevOps

Chociaż nie ma jednej definicji, uważam, że DevOps to platforma technologiczna, która umożliwia współpracę między zespołami programistycznymi i operacyjnymi w celu szybszego wdrażania kodu w środowiskach produkcyjnych z możliwością iteracji i automatyzacji. Resztę artykułu poświęcimy na rozpakowywanie tego twierdzenia.

Słowo „DevOps” jest połączeniem słów „rozwój” i „operacje”. DevOps pomaga zwiększyć szybkość dostarczania aplikacji i usług. Dzięki temu organizacje mogą skutecznie obsługiwać swoich klientów i stać się bardziej konkurencyjnymi na rynku. Mówiąc najprościej, DevOps to połączenie rozwoju i operacji IT z bardziej efektywną komunikacją i współpracą.

DevOps obejmuje kulturę, w której współpraca między zespołami programistycznymi, operacyjnymi i biznesowymi jest uważana za krytyczną. Nie chodzi tylko o narzędzia, ponieważ DevOps w organizacji stale przynosi korzyści także klientom. Narzędzia są jednym z jej filarów, obok ludzi i procesów. DevOps zwiększa zdolność organizacji do dostarczania wysokiej jakości rozwiązań w możliwie najkrótszym czasie. DevOps automatyzuje także wszystkie procesy, od kompilacji po wdrożenie, aplikację lub produkt.

Dyskusja DevOps koncentruje się na relacjach pomiędzy programistami, ludźmi, którzy zarabiają na życie pisaniem oprogramowania, a operatorami odpowiedzialnymi za utrzymanie tego oprogramowania.

Wyzwania dla zespołu deweloperskiego

Programiści są zazwyczaj entuzjastycznie nastawieni i chętni do wdrażania nowych podejść i technologii w celu rozwiązania problemów organizacyjnych. Jednak napotykają również pewne problemy:

  • Konkurencyjny rynek stwarza dużą presję, aby dostarczyć produkt na czas.
  • Muszą zadbać o zarządzanie kodem gotowym do produkcji i wprowadzanie nowych funkcji.
  • Cykl wydawniczy może być długi, dlatego zespół programistów musi przyjąć kilka założeń przed wdrożeniem aplikacji. W tym scenariuszu potrzeba więcej czasu na rozwiązanie problemów pojawiających się podczas wdrażania w środowisku produkcyjnym lub testowym.

Wyzwania stojące przed zespołem operacyjnym

Zespoły operacyjne od zawsze skupiały się na stabilności i niezawodności usług IT. Dlatego zespoły operacyjne szukają stabilności poprzez zmiany w zasobach, technologiach lub podejściach. Do ich zadań należy:

  • Zarządzaj alokacją zasobów w miarę wzrostu zapotrzebowania.
  • Obsługuj zmiany w projekcie lub dostosowywaniu wymagane do użycia w środowisku produkcyjnym.
  • Diagnozuj i rozwiązuj problemy produkcyjne po samodzielnym wdrożeniu aplikacji.

Jak DevOps rozwiązuje problemy programistyczne i operacyjne

Zamiast udostępniać dużą liczbę funkcji aplikacji na raz, firmy próbują sprawdzić, czy uda im się udostępnić klientom niewielką liczbę funkcji w serii iteracji wydań. Takie podejście ma wiele zalet, takich jak lepsza jakość oprogramowania, szybsza informacja zwrotna od klientów itp. To z kolei gwarantuje wysoką satysfakcję klientów. Aby osiągnąć te cele, firmy są zobowiązane do:

  • Zmniejsz liczbę niepowodzeń podczas wydawania nowych wersji
  • Zwiększ częstotliwość wdrażania
  • Uzyskaj krótszy średni czas odzyskiwania danych w przypadku nowej wersji aplikacji.
  • Skróć czas na poprawki

DevOps wykonuje wszystkie te zadania i pomaga zapewnić nieprzerwane dostarczanie. Organizacje korzystają z DevOps, aby osiągnąć poziom produktywności, który jeszcze kilka lat temu był niewyobrażalny. Wykonują dziesiątki, setki, a nawet tysiące wdrożeń dziennie, zapewniając jednocześnie światowej klasy niezawodność, stabilność i bezpieczeństwo. (Dowiedz się więcej o rozmiarach partii i ich wpływ na dostarczanie oprogramowania).

DevOps próbuje rozwiązać różne problemy wynikające z dotychczasowych metodologii, w tym:

  • Izolacja pracy pomiędzy zespołami deweloperskimi i operacyjnymi
  • Testowanie i wdrażanie to oddzielne fazy, które występują po zaprojektowaniu i zbudowaniu i wymagają więcej czasu niż cykle kompilacji.
  • Nadmierna ilość czasu poświęcana na testowanie, wdrażanie i projektowanie zamiast skupiania się na budowaniu podstawowych usług biznesowych
  • Ręczne wdrażanie kodu prowadzące do błędów w produkcji
  • Różnice w harmonogramach zespołów programistycznych i operacyjnych powodujące dodatkowe opóźnienia

Przewodnik DevOps dla początkujących

Konfrontacja DevOps, Agile i tradycyjnego IT

DevOps jest często omawiany w odniesieniu do innych praktyk IT, szczególnie Agile i Waterfall IT.

Agile to zbiór zasad, wartości i praktyk związanych z produkcją oprogramowania. Jeśli więc na przykład masz pomysł, który chcesz przekształcić w oprogramowanie, możesz zastosować zasady i wartości Agile. Ale to oprogramowanie może działać tylko w środowisku programistycznym lub testowym. Potrzebujesz prostego, bezpiecznego sposobu na szybkie i powtarzalne przeniesienie oprogramowania do środowiska produkcyjnego, a sposobem na to są narzędzia i techniki DevOps. Zwinne tworzenie oprogramowania koncentruje się na procesach rozwoju, a DevOps jest odpowiedzialny za rozwój i wdrożenie w najbezpieczniejszy i najbardziej niezawodny sposób.

Porównanie tradycyjnego modelu kaskadowego z DevOps to dobry sposób na zrozumienie korzyści, jakie niesie ze sobą DevOps. W poniższym przykładzie założono, że aplikacja będzie dostępna za cztery tygodnie, prace nad nią zostaną ukończone w 85%, aplikacja będzie działać i proces zakupu serwerów w celu wysyłki kodu właśnie się rozpoczął.

Tradycyjne procesy
Procesy w DevOps

Po złożeniu zamówienia na nowe serwery zespół programistów pracuje nad testami. Grupa zadaniowa pracuje nad obszerną dokumentacją wymaganą przez przedsiębiorstwa do wdrażania infrastruktury.
Po złożeniu zamówienia na nowe serwery zespoły programistyczne i operacyjne wspólnie pracują nad procesami i dokumentacją związaną z instalacją nowych serwerów. Pozwala to lepiej zrozumieć wymagania dotyczące infrastruktury.

Informacje o przełączaniu awaryjnym, nadmiarowości, lokalizacjach centrów danych i wymaganiach dotyczących pamięci masowej są błędnie przedstawiane, ponieważ nie ma wkładu ze strony zespołu programistów posiadającego głęboką wiedzę dziedzinową.
Szczegóły dotyczące przełączania awaryjnego, nadmiarowości, odzyskiwania po awarii, lokalizacji centrów danych i wymagań dotyczących pamięci masowej są znane i prawidłowe dzięki wkładowi zespołu programistów.

Zespół operacyjny nie ma pojęcia o postępie zespołu programistów. Opracowuje także plan monitoringu w oparciu o własne pomysły.

Zespół operacyjny jest w pełni świadomy postępów poczynionych przez zespół programistów. Współpracuje także z zespołem programistów, który wspólnie pracuje nad opracowaniem planu monitorowania spełniającego potrzeby IT i biznesowe. Korzystają również z narzędzi do monitorowania wydajności aplikacji (APM).

Test obciążenia przeprowadzany przed uruchomieniem aplikacji powoduje awarię aplikacji, opóźniając jej uruchomienie.
Test obciążenia wykonany przed uruchomieniem aplikacji skutkuje słabą wydajnością. Zespół programistów szybko usuwa wąskie gardła i aplikacja uruchamia się na czas.

Cykl życia DevOps

DevOps wiąże się z przyjęciem pewnych ogólnie przyjętych praktyk.

Ciągłe planowanie

Ciągłe planowanie opiera się na zasadach Lean, aby zacząć od małych rzeczy poprzez identyfikację zasobów i wyników potrzebnych do przetestowania wartości firmy lub wizji, ciągłego dostosowywania się, mierzenia postępów, uczenia się na potrzebach klientów, zmiany kierunku w razie potrzeby, aby dostosować się do elastyczności i wymyślenia na nowo biznesplanu.

Wspólny rozwój

Proces wspólnego rozwoju umożliwia firmom, zespołom programistów i testerom rozproszonym w różnych strefach czasowych ciągłe dostarczanie wysokiej jakości oprogramowania. Obejmuje to rozwój wieloplatformowy, obsługę programowania w wielu językach, tworzenie historii użytkownika, rozwój pomysłów i zarządzanie cyklem życia. Wspólne tworzenie obejmuje proces i praktykę ciągłej integracji, która promuje częstą integrację kodu i automatyczne kompilacje. Dzięki częstemu wdrażaniu kodu w aplikacji problemy z integracją są identyfikowane na wczesnym etapie cyklu życia (kiedy są łatwiejsze do naprawienia), a ogólny wysiłek związany z integracją jest redukowany dzięki ciągłej informacji zwrotnej, gdy projekt wykazuje ciągły i widoczny postęp.

Ciągłe testowanie

Ciągłe testowanie zmniejsza koszty testowania, pomagając zespołom programistycznym zrównoważyć szybkość i jakość. Eliminuje także wąskie gardła w testowaniu poprzez wirtualizację usług i ułatwia tworzenie zwirtualizowanych środowisk testowych, które można łatwo udostępniać, wdrażać i aktualizować w miarę zmian systemów. Funkcje te zmniejszają koszty udostępniania i utrzymywania środowisk testowych oraz skracają czas cykli testowych, umożliwiając przeprowadzanie testów integracyjnych na wcześniejszym etapie cyklu życia.

Ciągłe wydawanie i wdrażanie

Techniki te niosą ze sobą podstawową praktykę: ciągłe wydawanie i wdrażanie. Zapewnia to ciągły rurociąg, który automatyzuje kluczowe procesy. Redukuje czynności wykonywane ręcznie, czas oczekiwania zasobów i przeróbki, umożliwiając wdrażanie za naciśnięciem jednego przycisku, co skutkuje większą liczbą wydań, mniejszą liczbą błędów i pełną przejrzystością.

Automatyzacja odgrywa kluczową rolę w zapewnieniu stabilnego i niezawodnego wydawania oprogramowania. Jednym z największych wyzwań jest podjęcie ręcznych procesów, takich jak budowanie, regresja, wdrażanie i tworzenie infrastruktury, oraz ich automatyzacja. Wymaga to kontroli wersji kodu źródłowego; scenariusze testowania i wdrażania; dane konfiguracyjne infrastruktury i aplikacji; oraz biblioteki i pakiety, od których zależy aplikacja. Kolejnym ważnym czynnikiem jest możliwość odpytywania stanu wszystkich środowisk.

Ciągłe monitorowanie

Ciągłe monitorowanie zapewnia raportowanie klasy korporacyjnej, które pomaga zespołom programistycznym zrozumieć dostępność i wydajność aplikacji w środowiskach produkcyjnych przed ich wdrożeniem w środowisku produkcyjnym. Wczesna informacja zwrotna uzyskana dzięki ciągłemu monitorowaniu ma kluczowe znaczenie dla zmniejszenia kosztów błędów i skierowania projektów we właściwym kierunku. Praktyka ta często obejmuje narzędzia monitorujące, które zazwyczaj ujawniają metryki związane z wydajnością aplikacji.

Stały feedback i optymalizacja

Ciągła informacja zwrotna i optymalizacja zapewniają wizualną reprezentację przepływu klientów i precyzyjne wskazanie obszarów problematycznych. Informacje zwrotne można uwzględnić zarówno na etapie przedsprzedażowym, jak i posprzedażowym, aby zmaksymalizować wartość i zapewnić pomyślne zakończenie jeszcze większej liczby transakcji. Wszystko to zapewnia natychmiastową wizualizację pierwotnej przyczyny problemów klientów, która wpływa na ich zachowanie i wpływ na biznes.

Przewodnik DevOps dla początkujących

Korzyści z DevOps

DevOps może pomóc w stworzeniu środowiska, w którym programiści i operatorzy pracują jako zespół, aby osiągnąć wspólne cele. Ważnym kamieniem milowym w tym procesie jest wdrożenie ciągłej integracji i ciągłego dostarczania (CI/CD). Techniki te umożliwią zespołom szybsze wprowadzanie oprogramowania na rynek z mniejszą liczbą błędów.

Ważnymi zaletami DevOps są:

  • Przewidywalność: DevOps oferuje znacznie niższy wskaźnik awaryjności w przypadku nowych wydań.
  • Łatwość konserwacji: DevOps pozwala na łatwe odzyskiwanie w przypadku niepowodzenia nowej wersji lub awarii aplikacji.
  • Powtarzalność: Kontrola wersji kompilacji lub kodu umożliwia przywrócenie wcześniejszych wersji w razie potrzeby.
  • Wyższa jakość: rozwiązywanie problemów z infrastrukturą poprawia jakość tworzenia aplikacji.
  • Czas wprowadzenia produktu na rynek: Optymalizacja dostarczania oprogramowania skraca czas wprowadzenia produktu na rynek o 50%.
  • Redukcja ryzyka: wdrożenie zabezpieczeń w cyklu życia oprogramowania zmniejsza liczbę defektów w całym cyklu życia.
  • Efektywność kosztowa: Dążenie do efektywności kosztowej w tworzeniu oprogramowania przemawia do kadry kierowniczej wyższego szczebla.
  • Stabilność: system oprogramowania jest bardziej stabilny i bezpieczny, a zmiany można kontrolować.
  • Dzielenie większej bazy kodu na łatwiejsze do zarządzania części: DevOps opiera się na zwinnych metodach programowania, które pozwalają podzielić dużą bazę kodu na mniejsze, łatwe w zarządzaniu części.

Zasady DevOpsu

Przyjęcie DevOps dało początek kilku zasadom, które ewoluowały (i nadal ewoluują). Większość dostawców rozwiązań opracowała własne modyfikacje różnych technik. Wszystkie te zasady opierają się na holistycznym podejściu do DevOps i mogą z nich korzystać organizacje dowolnej wielkości.

Twórz i testuj w środowisku przypominającym środowisko produkcyjne

Pomysł polega na umożliwieniu zespołom zajmującym się rozwojem i zapewnianiem jakości (QA) opracowywania i testowania systemów, które zachowują się jak systemy produkcyjne, dzięki czemu mogą zobaczyć, jak aplikacja zachowuje się i działa na długo przed jej gotowością do wdrożenia.

Aby rozwiązać trzy główne potencjalne problemy, aplikację należy podłączyć do systemów produkcyjnych na jak najwcześniejszym etapie jej cyklu życia. Po pierwsze, umożliwia przetestowanie aplikacji w środowisku zbliżonym do rzeczywistego. Po drugie, pozwala z wyprzedzeniem przetestować i zweryfikować procesy dostarczania aplikacji. Po trzecie, pozwala zespołowi operacyjnemu przetestować na wczesnym etapie cyklu życia, jak zachowa się jego środowisko po wdrożeniu aplikacji, co pozwala mu stworzyć wysoce dostosowane środowisko skoncentrowane na aplikacjach.

Wdrażaj za pomocą powtarzalnych, niezawodnych procesów

Zasada ta pozwala zespołom programistycznym i operacyjnym wspierać zwinne procesy tworzenia oprogramowania przez cały cykl życia oprogramowania. Automatyzacja ma kluczowe znaczenie dla tworzenia iteracyjnych, niezawodnych i powtarzalnych procesów. Dlatego organizacja musi utworzyć potok dostaw, który umożliwi ciągłe, zautomatyzowane wdrażanie i testowanie. Częste wdrażanie umożliwia także zespołom testowanie procesów wdrażania, zmniejszając w ten sposób ryzyko niepowodzeń wdrażania podczas wydań na żywo.

Monitorowanie i sprawdzanie jakości pracy

Organizacje dobrze radzą sobie z monitorowaniem aplikacji w środowisku produkcyjnym, ponieważ dysponują narzędziami rejestrującymi metryki i kluczowe wskaźniki wydajności (KPI) w czasie rzeczywistym. Zasada ta przesuwa monitorowanie na początku cyklu życia, zapewniając, że automatyczne testy monitorują funkcjonalne i niefunkcjonalne atrybuty aplikacji na wczesnym etapie procesu. Za każdym razem, gdy aplikacja jest testowana i wdrażana, należy sprawdzić i przeanalizować wskaźniki jakości. Narzędzia monitorujące zapewniają wczesne ostrzeganie o problemach operacyjnych i jakościowych, które mogą pojawić się podczas produkcji. Wskaźniki te należy gromadzić w formacie dostępnym i zrozumiałym dla wszystkich zainteresowanych stron.

Udoskonalanie pętli sprzężenia zwrotnego

Jednym z celów procesów DevOps jest umożliwienie organizacjom szybszego reagowania i wprowadzania zmian. W przypadku dostarczania oprogramowania cel ten wymaga, aby organizacja wcześnie otrzymywała informację zwrotną, a następnie szybko wyciągała wnioski z każdego podjętego działania. Zasada ta wymaga od organizacji stworzenia kanałów komunikacyjnych, które umożliwią zainteresowanym stronom dostęp i interakcję w sposób zwrotny. Rozwój można osiągnąć poprzez dostosowanie planów lub priorytetów projektu. Produkcja może działać poprzez poprawę środowiska produkcyjnego.

dev

  • Planowanie: Kanboard, Wekan i inne alternatywy Trello; GitLab, Tuleap, Redmine i inne alternatywy JIRA; Mattermost, Roit.im, IRC i inne alternatywy dla Slacka.
  • Pisanie kodu: Git, Gerrit, Bugzilla; Jenkins i inne narzędzia open source dla CI/CD
  • Montaż: Apache Maven, Gradle, Apache Ant, Packer
  • Testy: JUnit, Ogórek, Selen, Apache JMeter

ops

  • Wydanie, wdrożenie, operacje: Kubernetes, Nomad, Jenkins, Zuul, Spinnaker, Ansible, Apache ZooKeeper itp., Netflix Archaius, Terraform
  • Monitorowanie: Grafana, Prometheus, Nagios, InfluxDB, Fluentd i inne omówione w tym przewodniku

(*Narzędzia operacyjne zostały ponumerowane w kolejności używania przez zespoły operacyjne, ale ich oprzyrządowanie pokrywa się z etapami cyklu życia narzędzi do wydawania i wdrażania. Dla ułatwienia czytelności numeracja została usunięta.)

Na zakończenie

DevOps to coraz popularniejsza metodologia, której celem jest połączenie programistów i operacji w jedną całość. Jest wyjątkowy, różni się od tradycyjnych operacji IT i uzupełnia Agile (ale nie jest tak elastyczny).

Przewodnik DevOps dla początkujących

Dowiedz się, jak zdobyć poszukiwany zawód od podstaw lub podnieść poziom pod względem umiejętności i wynagrodzenia, biorąc udział w płatnych kursach online w SkillFactory:

więcej kursów

przydatny

Źródło: www.habr.com

Dodaj komentarz