Wprowadzenie DevOps dla początkujących

Termin DevOps zyskał na popularności, ale dla wielu osób ma on różne konotacje.

Definicja i zrozumienie istoty DevOps może być niełatwe. Dlatego warto zapoznać się z kluczowymi koncepcjami, z którymi najczęściej kojarzy się ten termin, a także prześledzić jego ewolucję. To pozwoli na wyrobienie sobie kompleksowego poglądu.

Geneza DevOps

DevOps stanowi doskonały przykład zastosowania zwinnego podejścia w tworzeniu oprogramowania. Narodził się z potrzeby dostosowania do rosnącej dynamiki w branży i osiągnięcia tego celu poprzez metodyki zwinne. W ostatniej dekadzie, dynamiczny rozwój kultury i praktyk zwinnych uwidocznił konieczność bardziej całościowego spojrzenia na cały cykl życia oprogramowania.

Być może zastanawiasz się, co kryje się pod pojęciem „zwinne tworzenie oprogramowania”?

Programowanie zwinne to szerokie określenie dla zbioru iteracyjnych i inkrementalnych metodologii tworzenia oprogramowania. Do popularnych metod zwinnych zaliczamy Scrum, Kanban, Scaled Agile Framework® (SAFe®), Lean Development oraz Extreme Programming (XP).

Wartości i założenia wszystkich tych podejść są zbieżne, ale każde z nich proponuje unikalne metody realizacji. Wszystkie bazują na iteracyjności i ciągłym sprzężeniu zwrotnym, które umożliwiają skuteczne ulepszanie i dostarczanie skalowalnego oprogramowania. Wspólnym mianownikiem tych metodologii jest nieprzerwane planowanie, testowanie, integracja i inne formy ciągłego doskonalenia, zarówno w aspekcie projektowania, jak i samego oprogramowania.

W odróżnieniu od tradycyjnych, kaskadowych modeli, podejścia zwinne charakteryzują się lekkością i elastycznością. Jednym z ich największych atutów jest nacisk na wzmocnienie pozycji ludzi poprzez współpracę i wspólne podejmowanie szybkich decyzji.

Założenia DevOps stanowią rozwinięcie praktyk zwinnego programowania, mając na celu optymalizację procesu zmian w oprogramowaniu. Obejmuje on kompilację, walidację, wdrażanie i inne etapy dostarczania. Pozwala to zespołom interdyscyplinarnym na pełną odpowiedzialność za produkt, od fazy projektowej aż po jego wdrożenie.

Jakie problemy rozwiązuje DevOps?

Proces wdrażania aplikacji o architekturze rozproszonej często wymaga umieszczenia plików binarnych i konfiguracyjnych na wielu serwerach. Staje się to jeszcze bardziej skomplikowane w przypadku rozbudowanych farm serwerów. Ustalenie co, jak i gdzie wdrożyć jest wyzwaniem. Jaki jest tego efekt?

Długie oczekiwanie na przeniesienie artefaktów do kolejnego środowiska powoduje opóźnienia na każdym etapie, włączając w to testowanie czy cały cykl życia produktu.

DevOps umożliwia programistom i działom IT prowadzenie wspólnych działań w oparciu o współpracę, gdzie nie ma miejsca na obwinianie. Pozwala to na weryfikację skutecznych rozwiązań i ich dalsze rozwijanie poprzez automatyzację, co wspiera ciągły rozwój. Ponadto, DevOps otwiera drogę do częstszych aktualizacji.

Cele DevOps

DevOps poprawia współpracę pomiędzy wszystkimi interesariuszami na każdym etapie – od planowania po wdrożenie. Wykorzystuje automatyzację procesu dostarczania, aby:

  • Zwiększyć częstotliwość wdrażania zmian
  • Skrócić czas wprowadzenia produktu na rynek
  • Zmniejszyć liczbę awarii po wprowadzeniu nowych wersji
  • Skrócić czas potrzebny na naprawę błędów
  • Poprawić parametry odzyskiwania po awarii

Typowy scenariusz DevOps

Przed rozpoczęciem nowego projektu oprogramowania, zespół zbiera się na spotkanie. W jego skład wchodzą programiści, testerzy, specjaliści od operacji i wsparcia. Wspólnie opracowują plan stworzenia w pełni funkcjonalnego i gotowego do wdrożenia oprogramowania.

Nowy kod jest wdrażany każdego dnia, w miarę jak programiści kończą prace. Automatyczna procedura testowania weryfikuje gotowość kodu do wdrożenia. Po pomyślnym przejściu testów automatycznych, kod wdrażany jest na niewielkiej grupie użytkowników. Przez krótki czas kod jest monitorowany, aby upewnić się, że nie ma nieoczekiwanych problemów i jest stabilny. Gdy monitoring potwierdzi stabilność, nowy kod zostaje wdrożony do pozostałych użytkowników. Znaczna część kroków po planowaniu i rozwoju jest realizowana bez udziału człowieka.

Fazy dojrzałości DevOps

Istnieje szereg faz dojrzałości DevOps. Oto kluczowe z nich, które warto znać:

Rozwój kaskadowy (Waterfall)

Przed erą ciągłej integracji, zespoły programistyczne tworzyły duże partie kodu, które następnie, w procesie wydania, łączone były w jedną całość. Różnice pomiędzy poszczególnymi wersjami kodu były tak znaczne, że wymagały przeprowadzenia bardzo wielu zmian.

Wprowadzenie tak dużej liczby modyfikacji zajmowało wiele miesięcy. Ten proces był mało efektywny.

Ciągła Integracja (Continuous Integration)

Jest to praktyka polegająca na częstym włączaniu nowego kodu do głównej gałęzi kodu przeznaczonego do wydania. Ciągła integracja pozwala zaoszczędzić sporo czasu w procesie wydawania.

Termin „ciągła integracja” nie został wprowadzony przez DevOps. Jest to zwinna praktyka inżynierska, której początki sięgają metodologii Extreme Programming. DevOps zaadaptował tę praktykę, gdyż automatyzacja jest kluczowa dla skutecznej ciągłej integracji. Ciągła integracja jest zazwyczaj pierwszym krokiem na drodze do dojrzałości DevOps.

Ciągła integracja w kontekście DevOps obejmuje weryfikację kodu, jego kompilację oraz uruchomienie niezbędnych testów walidacyjnych.

Ciągłe Dostarczanie (Continuous Delivery)

Jest rozszerzeniem ciągłej integracji i drugim etapem w rozwoju DevOps.

Ciągłe dostarczanie wprowadza dodatkową automatyzację i testy. Dzięki temu, nie tylko szybko scalamy kod z główną gałęzią, ale również otrzymujemy kod gotowy do wdrożenia bez konieczności interwencji człowieka.

Praktyką jest utrzymywanie bazy kodu w stanie bliskim gotowości do wdrożenia.

Ciągłe Wdrażanie (Continuous Deployment)

Ciągłe wdrażanie to zaawansowana forma ciągłego dostarczania. Dzięki tej praktyce, wszystkie zmiany są wdrażane automatycznie, bez ingerencji człowieka.

Zespół pracujący w modelu ciągłego wdrażania, nigdy nie wdraża kodu bez jego wcześniejszego przetestowania. Cały nowy kod przechodzi przez zautomatyzowane testy przed wdrożeniem. Kod jest wdrażany do wąskiej grupy użytkowników, a zautomatyzowany system monitoruje jakość i sposób użycia, zanim kod zostanie udostępniony szerszemu gronu odbiorców.

Niewielka grupa firm, takich jak Netflix, Etsy, Amazon, Pinterest, Flickr, IMVU i Google, stosuje ciągłe wdrażanie.

Wartość DevOps

DevOps kładzie duży nacisk na rozwój kultury współpracy i zwiększenie efektywności poprzez automatyzację przy użyciu różnych narzędzi. Wdrożenie DevOps dla swojego rozwiązania wymaga połączenia odpowiedniej kultury z właściwymi narzędziami.

Kultura DevOps

DevOps to specyficzna kultura, która sprzyja usprawnieniu współpracy, redukcji chaosu, lepszemu zarządzaniu odpowiedzialnością, wprowadzeniu automatyzacji, poprawie jakości, szybszemu sprzężeniu zwrotnemu i zwiększeniu automatyzacji.

Metodyki zwinne od zawsze były najlepszym podejściem do holistycznego dostarczania oprogramowania. W kontekście pomiaru postępów, zespoły zwinne skupiają się na działającym oprogramowaniu. Zwinna kultura DevOps pozwala właścicielom produktów, programistom, testerom i specjalistom od UX na ścisłą współpracę w dążeniu do wspólnego celu.

Narzędzia DevOps

Zestaw narzędzi DevOps obejmuje rozwiązania do zarządzania konfiguracją, testowania, budowy systemów, tworzenia aplikacji, kontroli wersji i monitorowania. Wdrożenie ciągłej integracji, ciągłego dostarczania i ciągłego wdrażania wymaga stosowania różnych narzędzi, które często są wykorzystywane w tym samym czasie. W miarę jak rozwija się łańcuch dostaw, rośnie również zapotrzebowanie na narzędzia.

Poniżej przedstawione są niektóre z popularnych narzędzi i praktyk:

Repozytorium kodu źródłowego – Jest to miejsce, w którym programiści mogą wprowadzać zmiany w kodzie. Repozytorium zarządza różnymi wersjami kodu, co zapewnia uniknięcie sytuacji, w której programiści nadpisują swoje zmiany.

Git, Apache Subversion, IBM Rational, Artifactory, Nexus i Eclipse to tylko niektóre z popularnych narzędzi do zarządzania kodem źródłowym.

Serwer kompilacji: Jest to narzędzie do automatyzacji, które służy do kompilowania kodu w postać wykonywalną. Do popularnych narzędzi serwerów kompilacji należą m.in. Jenkins, SonarQube i Artifactory.

Zarządzanie konfiguracją – Narzędzia takie jak Puppet, Chef, Ansible, SaltStack i Run Deck pomagają zarządzać konfiguracją aplikacji i infrastruktury, zapewniając spójność w różnych środowiskach.

Infrastruktura wirtualna – AWS, GCP i Azure to trzej najwięksi dostawcy chmury publicznej, oferujący niemal wszystkie usługi infrastrukturalne. Dostarczają API, które pozwalają na udostępnianie infrastruktury i zarządzanie nią jak kodem.

Podsumowanie

Mam nadzieję, że ten artykuł przybliżył Ci koncepcję DevOps. Jeśli ten temat Cię interesuje, zachęcam do sprawdzenia dostępnych kursów mistrzowskich online.

Artykuł autorstwa Payal Goyal