SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
Jak oszczędzać czas zespołu

w środowisku mikroserwisów,

czyli efektywny flow wytwarzania
oprogramowania
1
Prawo Conway’a
Organizacja będzie produkowała taki kod,

jak jej struktura komunikacji
2
Ilu z Was pracuje w środowisku
mikroserwisów?
3
Jak oszczędzać czas zespołu

w środowisku mikroserwisów,

czyli efektywny flow wytwarzania
oprogramowania
4
Mateusz Paprocki

Chief Operating Officer (COO), PMO Head @ Neoteric
• 10 lat doświadczenia w branży IT
• w Neoteric od sierpnia 2013
• Certyfikaty: PMP, MongoDB 

(Dev + Admin)
5
• 10 lat na rynku
• 31 zgranych osób
• siedziba we Wrzeszczu (Biała 1)
6
• startup development
• outsourcing
• API integration
Stary flow - Backend setup (2013)
• Monolityczne aplikacje z wciągniętym jako zależność rdzeniem
(Core)
• Środowisko: Glassfish
• Java 6 + PostreSQL + MongoDB
• Komunikacja via REST API
• Środowiska: Dev (na maszynie developera) oraz Prod (u klienta),
brak Staging’u
7
Stary flow - Backend deploy (2013)
• Ręczne zbudowanie JARa na maszynie developera
• Login via WWW do Glassfish’a na Produkcji
• Upload JAR’a z maszyny developera, redeploy
• Ręczna zmiana pliku konfiguracyjnego na produkcji (/etc/app.conf)
8
Stary flow - Backend - Jakość i testy (2013)
• Unit testy krytycznych części logiki biznesowej
• Brak testów integracyjnych
• Testowanie funkcjonalności backendu za pomocą frontend’u aplikacji
• Brak metryk jakościowych oraz wydajnościowych
• Brak sensownej dokumentacji
• Brak szybkiego dostępu do logów
9
Stary flow - Frontend setup (2013)
• Monolityczne aplikacje; brak podziału na logiczne moduły
• Brak sensownego sterowania zależnościami, zarówno pomiędzy
modułami aplikacji, jak i zewnętrznych dostawców (plik index.html ze
wszystkimi plikami)
• Środowisko: AngularJS 1.0.x
• Komunikacja via REST API (serwis obudowujący $http)
• Środowiska: Dev (na maszynie developera) oraz Prod (u klienta), brak
Staging’u
10
Gitflow
• Cel: Proste tworzenie/zamykanie feature branches na Gitlab’ie
• 2 predefiniowane branch’e per projekt (master, development) +
dynamiczne branch’e per feature
• Maven plugin - jGitflow (Atlassian) komunikujący się z self-hosted
Gitlab
• Jenkins korzysta z feature branches do robienia build’ów
11
Jenkins + build
• Grade + Groovy
• sprawdza status branch’y w projekcie na Gitlab
• tworzy nowy job na podstawie przygotowanego wcześniej szablonu przy
napotkaniu nowego branch’a
• istnieją predefiniowane szablony ze zmiennymi na każdy typ brancha
• Docker (obraz per build) + docker-registry
• JaCoCo - code coverage
• SonarQube
12
JaCoCo - code coverage
13
Sonar - Główne metryki
• Pokrycie kodu (unit + integration)
• line coverage
• condition coverage
• Złożoność (complexity)
• Checkstyle (blocker, critical, major)
• Duplications
• Liczba i przyrost błędów (delta) pomiędzy buildami
14
Sonar - Główne metryki
15
Sonar - Podgląd projektu
16
Docker
• Wyizolowane środowisko
• Developer nie ma potrzeby “grzebania” w obrazie
• Prosty setup na środowisku lokalnym
• Repozytorium dockerów (docker repository)
17
Frontend containers
• NPM registry - generatory + skrypty Grunt
• Bower repository
• Nexus + Amazon S3 - trzymanie buildów
18
CI/CD
• Bazowy obraz maszyny (obecnie Digital Ocean)
• Env Tools zapewniają instalację wszystkich wymaganych aplikacji
• JSON: projekt | typ środowiska | [lista aplikacji]
• instalacja wszystkiego za pomocą jednego polecenia (również frontend!)
• automatyczne tworzenie baz danych (compose.io API)
• automatyczny reload proxy (nowe endpoint’y odpowiedzialnością
backend’u)
19
CI/CD
• Cała konfiguracja projektu trzymana na Gitlab’ie
• 1 repozytorium per typ środowiska (np. <project>-staging-conf)
• 1 katalog w repo per projekt, w każdym 1 lub więcej plików
konfiguracyjnych
• 1 plik z konfiguracją proxy
20
Nowy flow - Backend setup
• Mikroserwisy (Jetty) rozmawiające via REST API
• Kolejka xMQ
• Środowisko: mikroserwer Jetty + Apache/Nginx do hostowania frontu
• Java 8 + MongoDB (compose.io) + NodeJS (Sails)
• Komunikacja via REST API
• Środowiska: Local (na maszynie developera), Dev, Staging, Prod
21
Nowy flow - Backend deploy
• Push do feature branch’a
• Ewentualna zmiana konfiguracji proxy (jeżeli doszedł nowy
endpoint)
• Automatyczny deploy na Dev, 1-click deploy na Staging i/lub Prod
22
Nowy flow - Backend - Jakość i testy
• Pokrycie min. 60%, zwykle 90%+
• Testy integracyjne uruchamiane na Jenkinsie podczas build’u
• [In progress] Testy E2E całego API
• SonarQube pilnujący jakości
• Generowana na bieżąco i łatwo dostępna, interaktywna dokumentacja
(Swagger)
• Logi na stacku ELK (Elastic, Logstash, Kibana)
23
Nowy flow - Frontend setup
• Modularne aplikacje z hierarchicznymi modułami, dynamiczne
budowanie menu
• Automatyzacja: Grunt + yeoman (generowanie nowego projektu z
wyborem wersji core’a)
• Zależności w RequireJS + Lazy loading
• Środowisko: AngularJS 1.4.X
• Środowiska: Local (na maszynie developera), Dev, Staging, Prod
24
Nowy flow - Frontend setup
• Automatyczne unit testy
• Automatyczne testy E2E: BDD (Cucumber + Gherkin)
• uruchamiane przy merge request’s
• fail na teście E2E informuje Gitlab’a - brak zgody na merge’a
25
Podsumowanie
• Postawienie nowego środowiska w mniej niż 10 minut
• Developerzy skupieni na dostarczaniu nowych rozwiązań, nie
konfiguracji
• Testowanie integralną częścią procesu produkcji
• Żywy DevOPS
26
Podsumowanie
27
Stary vs Nowy flow
Stary flow Nowy flow
Czas deploymentu + testy [s] 1800 60
Liczba zaangażowanych osób 3 1
Komunikacja [s] 300 0
Czas finalny [h] 0,58 0,02
Czas w skali miesiąca 

(3 buildy dziennie) [h] 35,00 1,00
Odwiedź nas
Biała 1
80-435 Gdańsk
E-mail
mpaprocki@neoteric.eu
rekrutacja@neoteric.eu
Zadzwoń
+48 602 557 952
Web
www.neoteric.eu
facebook.com/neoteric-eu

Contenu connexe

Tendances

Google Web Toolkit - nie idź tą drogą
Google Web Toolkit - nie idź tą drogąGoogle Web Toolkit - nie idź tą drogą
Google Web Toolkit - nie idź tą drogąRafal Rybacki
 
Proste REST API z użyciem play i slick
Proste REST API z użyciem play i slickProste REST API z użyciem play i slick
Proste REST API z użyciem play i slickSoftwareMill
 
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Meet Magento Poland
 
REvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachREvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachThe Software House
 
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Sagittario
 
Migracja xa 6.5 7.6
Migracja xa 6.5 7.6Migracja xa 6.5 7.6
Migracja xa 6.5 7.6Pawel Serwan
 
Citrix NetScaler Gateway i Azure MFA
Citrix NetScaler Gateway i Azure MFACitrix NetScaler Gateway i Azure MFA
Citrix NetScaler Gateway i Azure MFAPawel Serwan
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?GOG.com dev team
 
Wirtualizacji ciąg dalszy czyli po co karta v gpu w xenapp xendesktop
Wirtualizacji ciąg dalszy czyli po co karta v gpu w xenapp xendesktopWirtualizacji ciąg dalszy czyli po co karta v gpu w xenapp xendesktop
Wirtualizacji ciąg dalszy czyli po co karta v gpu w xenapp xendesktopPawel Serwan
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkitbartosz_w
 
Citrix NetScaler - Drogą wstępu do ADC
Citrix NetScaler - Drogą wstępu do ADCCitrix NetScaler - Drogą wstępu do ADC
Citrix NetScaler - Drogą wstępu do ADCPawel Serwan
 
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressie
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressieObiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressie
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressieWordCamp Polska
 

Tendances (17)

Google Web Toolkit - nie idź tą drogą
Google Web Toolkit - nie idź tą drogąGoogle Web Toolkit - nie idź tą drogą
Google Web Toolkit - nie idź tą drogą
 
Proste REST API z użyciem play i slick
Proste REST API z użyciem play i slickProste REST API z użyciem play i slick
Proste REST API z użyciem play i slick
 
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
 
REvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachREvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w Railsach
 
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
 
Migracja xa 6.5 7.6
Migracja xa 6.5 7.6Migracja xa 6.5 7.6
Migracja xa 6.5 7.6
 
Citrix NetScaler Gateway i Azure MFA
Citrix NetScaler Gateway i Azure MFACitrix NetScaler Gateway i Azure MFA
Citrix NetScaler Gateway i Azure MFA
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?
 
Websockety w PHP
Websockety w PHPWebsockety w PHP
Websockety w PHP
 
Wirtualizacji ciąg dalszy czyli po co karta v gpu w xenapp xendesktop
Wirtualizacji ciąg dalszy czyli po co karta v gpu w xenapp xendesktopWirtualizacji ciąg dalszy czyli po co karta v gpu w xenapp xendesktop
Wirtualizacji ciąg dalszy czyli po co karta v gpu w xenapp xendesktop
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
Projektowanie i implementacja usług sieciowych
Projektowanie i implementacja usług sieciowychProjektowanie i implementacja usług sieciowych
Projektowanie i implementacja usług sieciowych
 
Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Citrix NetScaler - Drogą wstępu do ADC
Citrix NetScaler - Drogą wstępu do ADCCitrix NetScaler - Drogą wstępu do ADC
Citrix NetScaler - Drogą wstępu do ADC
 
university day 1
university day 1university day 1
university day 1
 
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressie
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressieObiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressie
Obiektowe tworzenie motywów z użyciem silnika szablonów Twig w WordPressie
 

Similaire à Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow wytwarzania oprogramowania - Tech.3camp

W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...3camp
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl 3camp
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na AndroidzieDaftcode
 
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Lukasz Kaluzny
 
Continuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowychContinuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowychDreamLab
 
ITAD BB 2014 - ASP.NET 5 - What's new?
ITAD BB 2014 - ASP.NET 5 - What's new?ITAD BB 2014 - ASP.NET 5 - What's new?
ITAD BB 2014 - ASP.NET 5 - What's new?Michał Dudak
 
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Dariusz Kacban
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITaWersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITamarekmisztal
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGBart Zaremba
 
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...Chris Suszyński
 
Jak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkJak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkHighWheelSoftware
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Polska
 

Similaire à Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow wytwarzania oprogramowania - Tech.3camp (20)

W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
 
Środowisko PWA
Środowisko PWAŚrodowisko PWA
Środowisko PWA
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
It od kuchni w nokaut.pl
It od kuchni w nokaut.plIt od kuchni w nokaut.pl
It od kuchni w nokaut.pl
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na Androidzie
 
JavaEE + OSGi
JavaEE + OSGiJavaEE + OSGi
JavaEE + OSGi
 
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
 
Continuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowychContinuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowych
 
ITAD BB 2014 - ASP.NET 5 - What's new?
ITAD BB 2014 - ASP.NET 5 - What's new?ITAD BB 2014 - ASP.NET 5 - What's new?
ITAD BB 2014 - ASP.NET 5 - What's new?
 
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITaWersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
Wersjonowanie kodu. Dobre praktyki na przykładzie przejścia z CVS na GITa
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUG
 
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
 
Jak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkJak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFramework
 
Mikrousługi w allegro
Mikrousługi w allegroMikrousługi w allegro
Mikrousługi w allegro
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
 

Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow wytwarzania oprogramowania - Tech.3camp

  • 1. Jak oszczędzać czas zespołu
 w środowisku mikroserwisów,
 czyli efektywny flow wytwarzania oprogramowania 1
  • 2. Prawo Conway’a Organizacja będzie produkowała taki kod,
 jak jej struktura komunikacji 2
  • 3. Ilu z Was pracuje w środowisku mikroserwisów? 3
  • 4. Jak oszczędzać czas zespołu
 w środowisku mikroserwisów,
 czyli efektywny flow wytwarzania oprogramowania 4
  • 5. Mateusz Paprocki
 Chief Operating Officer (COO), PMO Head @ Neoteric • 10 lat doświadczenia w branży IT • w Neoteric od sierpnia 2013 • Certyfikaty: PMP, MongoDB 
 (Dev + Admin) 5
  • 6. • 10 lat na rynku • 31 zgranych osób • siedziba we Wrzeszczu (Biała 1) 6 • startup development • outsourcing • API integration
  • 7. Stary flow - Backend setup (2013) • Monolityczne aplikacje z wciągniętym jako zależność rdzeniem (Core) • Środowisko: Glassfish • Java 6 + PostreSQL + MongoDB • Komunikacja via REST API • Środowiska: Dev (na maszynie developera) oraz Prod (u klienta), brak Staging’u 7
  • 8. Stary flow - Backend deploy (2013) • Ręczne zbudowanie JARa na maszynie developera • Login via WWW do Glassfish’a na Produkcji • Upload JAR’a z maszyny developera, redeploy • Ręczna zmiana pliku konfiguracyjnego na produkcji (/etc/app.conf) 8
  • 9. Stary flow - Backend - Jakość i testy (2013) • Unit testy krytycznych części logiki biznesowej • Brak testów integracyjnych • Testowanie funkcjonalności backendu za pomocą frontend’u aplikacji • Brak metryk jakościowych oraz wydajnościowych • Brak sensownej dokumentacji • Brak szybkiego dostępu do logów 9
  • 10. Stary flow - Frontend setup (2013) • Monolityczne aplikacje; brak podziału na logiczne moduły • Brak sensownego sterowania zależnościami, zarówno pomiędzy modułami aplikacji, jak i zewnętrznych dostawców (plik index.html ze wszystkimi plikami) • Środowisko: AngularJS 1.0.x • Komunikacja via REST API (serwis obudowujący $http) • Środowiska: Dev (na maszynie developera) oraz Prod (u klienta), brak Staging’u 10
  • 11. Gitflow • Cel: Proste tworzenie/zamykanie feature branches na Gitlab’ie • 2 predefiniowane branch’e per projekt (master, development) + dynamiczne branch’e per feature • Maven plugin - jGitflow (Atlassian) komunikujący się z self-hosted Gitlab • Jenkins korzysta z feature branches do robienia build’ów 11
  • 12. Jenkins + build • Grade + Groovy • sprawdza status branch’y w projekcie na Gitlab • tworzy nowy job na podstawie przygotowanego wcześniej szablonu przy napotkaniu nowego branch’a • istnieją predefiniowane szablony ze zmiennymi na każdy typ brancha • Docker (obraz per build) + docker-registry • JaCoCo - code coverage • SonarQube 12
  • 13. JaCoCo - code coverage 13
  • 14. Sonar - Główne metryki • Pokrycie kodu (unit + integration) • line coverage • condition coverage • Złożoność (complexity) • Checkstyle (blocker, critical, major) • Duplications • Liczba i przyrost błędów (delta) pomiędzy buildami 14
  • 15. Sonar - Główne metryki 15
  • 16. Sonar - Podgląd projektu 16
  • 17. Docker • Wyizolowane środowisko • Developer nie ma potrzeby “grzebania” w obrazie • Prosty setup na środowisku lokalnym • Repozytorium dockerów (docker repository) 17
  • 18. Frontend containers • NPM registry - generatory + skrypty Grunt • Bower repository • Nexus + Amazon S3 - trzymanie buildów 18
  • 19. CI/CD • Bazowy obraz maszyny (obecnie Digital Ocean) • Env Tools zapewniają instalację wszystkich wymaganych aplikacji • JSON: projekt | typ środowiska | [lista aplikacji] • instalacja wszystkiego za pomocą jednego polecenia (również frontend!) • automatyczne tworzenie baz danych (compose.io API) • automatyczny reload proxy (nowe endpoint’y odpowiedzialnością backend’u) 19
  • 20. CI/CD • Cała konfiguracja projektu trzymana na Gitlab’ie • 1 repozytorium per typ środowiska (np. <project>-staging-conf) • 1 katalog w repo per projekt, w każdym 1 lub więcej plików konfiguracyjnych • 1 plik z konfiguracją proxy 20
  • 21. Nowy flow - Backend setup • Mikroserwisy (Jetty) rozmawiające via REST API • Kolejka xMQ • Środowisko: mikroserwer Jetty + Apache/Nginx do hostowania frontu • Java 8 + MongoDB (compose.io) + NodeJS (Sails) • Komunikacja via REST API • Środowiska: Local (na maszynie developera), Dev, Staging, Prod 21
  • 22. Nowy flow - Backend deploy • Push do feature branch’a • Ewentualna zmiana konfiguracji proxy (jeżeli doszedł nowy endpoint) • Automatyczny deploy na Dev, 1-click deploy na Staging i/lub Prod 22
  • 23. Nowy flow - Backend - Jakość i testy • Pokrycie min. 60%, zwykle 90%+ • Testy integracyjne uruchamiane na Jenkinsie podczas build’u • [In progress] Testy E2E całego API • SonarQube pilnujący jakości • Generowana na bieżąco i łatwo dostępna, interaktywna dokumentacja (Swagger) • Logi na stacku ELK (Elastic, Logstash, Kibana) 23
  • 24. Nowy flow - Frontend setup • Modularne aplikacje z hierarchicznymi modułami, dynamiczne budowanie menu • Automatyzacja: Grunt + yeoman (generowanie nowego projektu z wyborem wersji core’a) • Zależności w RequireJS + Lazy loading • Środowisko: AngularJS 1.4.X • Środowiska: Local (na maszynie developera), Dev, Staging, Prod 24
  • 25. Nowy flow - Frontend setup • Automatyczne unit testy • Automatyczne testy E2E: BDD (Cucumber + Gherkin) • uruchamiane przy merge request’s • fail na teście E2E informuje Gitlab’a - brak zgody na merge’a 25
  • 26. Podsumowanie • Postawienie nowego środowiska w mniej niż 10 minut • Developerzy skupieni na dostarczaniu nowych rozwiązań, nie konfiguracji • Testowanie integralną częścią procesu produkcji • Żywy DevOPS 26
  • 27. Podsumowanie 27 Stary vs Nowy flow Stary flow Nowy flow Czas deploymentu + testy [s] 1800 60 Liczba zaangażowanych osób 3 1 Komunikacja [s] 300 0 Czas finalny [h] 0,58 0,02 Czas w skali miesiąca 
 (3 buildy dziennie) [h] 35,00 1,00
  • 28. Odwiedź nas Biała 1 80-435 Gdańsk E-mail mpaprocki@neoteric.eu rekrutacja@neoteric.eu Zadzwoń +48 602 557 952 Web www.neoteric.eu facebook.com/neoteric-eu