28
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow wytwarzania oprogramowania 1

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

Embed Size (px)

Citation preview

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

Jak oszczędzać czas zespołuw środowisku mikroserwisów,

czyli efektywny flow wytwarzania oprogramowania

1

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

Prawo Conway’a

Organizacja będzie produkowała taki kod, jak jej struktura komunikacji

2

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

Ilu z Was pracuje w środowisku mikroserwisów?

3

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

Jak oszczędzać czas zespołuw środowisku mikroserwisów,

czyli efektywny flow wytwarzania oprogramowania

4

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

Mateusz PaprockiChief 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

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

• 10 lat na rynku

• 31 zgranych osób

• siedziba we Wrzeszczu (Biała 1)

6

• startup development

• outsourcing

• API integration

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

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

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

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

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

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

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

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

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

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

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

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

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

JaCoCo - code coverage

13

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

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

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

Sonar - Główne metryki

15

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

Sonar - Podgląd projektu

16

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

Docker

• Wyizolowane środowisko

• Developer nie ma potrzeby “grzebania” w obrazie

• Prosty setup na środowisku lokalnym

• Repozytorium dockerów (docker repository)

17

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

Frontend containers

• NPM registry - generatory + skrypty Grunt

• Bower repository

• Nexus + Amazon S3 - trzymanie buildów

18

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Podsumowanie

27

Stary vs Nowy flowStary flow Nowy flow

Czas deploymentu + testy [s] 1800 60Liczba zaangażowanych osób 3 1Komunikacja [s] 300 0Czas finalny [h] 0,58 0,02

Czas w skali miesiąca (3 buildy dziennie) [h] 35,00 1,00

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

Odwiedź nasBiała 180-435 Gdańsk

[email protected]@neoteric.eu

Zadzwoń+48 602 557 952

Webwww.neoteric.eufacebook.com/neoteric-eu