Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Zarządzanie i integracja aplikacji Java EE Przemysław Nowak.

Podobne prezentacje


Prezentacja na temat: "Zarządzanie i integracja aplikacji Java EE Przemysław Nowak."— Zapis prezentacji:

1 Zarządzanie i integracja aplikacji Java EE Przemysław Nowak

2 Literatura Bezpieczeństwo w Unixie i Internecie, Simson Garfinkel, Gene Spafford, O’Reilly & Associates, Inc. Wydawnictwo RM, 1997 Nie tylko wirusy - hacking, cracking, bezpieczeństwo Internetu, Andrzej Dudek, Wydawnictwo Helion Polityka bezpieczeństwa i ochrony informacji. Tadeusz Kifner, Wydawnictwo Helion pl.comp.security comp.os.linux.security comp.os.ms-windows.nt.admin.security comp.os.netware.security comp.security.unix i wiele innych...

3 Unix (Linux) konfiguracja, administracja systemu

4 System Unix MULTICS , AT&T, GE, MIT, projekt DARPA Unix (PDP 7) PDP język C Unix BSD Unix AT&T SVR Unix SVR4, Unix OSF/1

5 System Unix - rodzina BSDSystem V3 OSF/1System V4 FreeBSD SunOS Linux AIX Solaris BSD/OS SCO Unix Unix Siódmego Wydania

6 Linux - inicjowanie systemu reset, BIOS ładowanie programu rozruchowego ładowanie jądra (LILO, LoadLin) inicjalizacja obszarów roboczych jądra, sprzętu, systemu plików, terminali, montowanie dysków (dmesg) init (inittab) rc.d (styl BSD i System V)

7 /etc/inittab Plik definiuje czynności które proces init powinien wykonywać gdy system przechodzi na poszczególne poziomy pracy. identyfikator : poziomy_startu : akcja : proces si::sysinit:/etc/rc.d/rc.sysinit pf::powerfail:/sbin/genpowerfail start c1:1235:respawn:/sbin/agetty tty1 linux /etc/rc.d/rc.sysinit Skrypt uruchamiany przy starcie systemu. Powinien zawierać podstawową inicjalizację systemu, taką jak przyłączanie lokalnych i systemowych partycji, włączanie ograniczeń dla użytkowników, ustawienie zegara systemowego czy załadowanie modułów systemu.

8 Skrypty startowe (SystemV) /etc/rc.d/init.d/ Katalog zawierający skrypty uruchamiające i zatrzymujące poszczególne serwisy i demony podczas przejść pomiędzy różnymi poziomami startu. /etc/rc.d/rcX.d/ Katalogi zawierające dowiązania do tych skryptów z katalogu /etc/rc.d/init.d/, które mają zostać uruchomione bądź zatrzymane przy przejściu na konkretny poziom startu systemu. X oznacza numer poziomu startu. /etc/rc.d/rc Skrypt wykonywany przy zmianie poziomu startu systemu. Uruchamia wszystkie skrypty z odpowiedniego katalogu /etc/rc.d/rcX.d, podając im parametr w zależności od pierwszej litery w nazwie dowiązania: S oznacza, że skrypt ma uruchomić dany serwis lub demona, zaś K znaczy, że serwis ten należy zamknąć. /etc/rc.d/rc.local Skrypt wykonywany jako ostatni przy starcie systemu. Może uruchamiać różne dodatkowe procesy. /etc/profile Plik zawiera ustawienia zmiennych środowiskowych przy starcie systemu.

9 Skrypty Bourne’a nigdy SUID, jeżeli tak jednak być musi należy napisać C wrapper wywołujący (exec) skrypt jedna z pierwszych instrukcji: IFS= następna w kolejności: PATH= (bo inaczej te zmienne są dziedziczone) csh nie używać! problemy z wieloma rzeczami... (http://www.ooblick.com/text/CshProgrammingConsideredHarmful.ht ml)

10 Linux - podstawowe elementy jądro, funkcje systemowe, moduły jądra procesy i wątki, sygnały, identyfikatory procesów, inne atrybuty zarządzanie pamięcią system plików, prawa dostępu, rodzaje plików urządzenia fizyczne sieć, konfiguracja, usługi użytkownicy, grupy, kontrola dostępu, uprawnienia, użytkownik root,

11 System plików UNIXa Blok startowy Blok specjalny Bloki struktur i-node Bloki danych dysk (partycja) jest podzielony na bloki system plików posługuje się pojęciem i-node  i-node (i-węzeł) odpowiada plikowi, katalogowi lub innym obiektom (pliki specjalne, gniazdka, kolejki FIFO)

12 Budowa i-node Prawa dostępu Właściciel Rozmiar Czasy... Bezpośrednie wskazania bloków danych Blok pośredni Dwustopniowe wskazanie pośrednie Trójstopniowe wskazanie pośrednie Blok danych

13 Użytkownicy i ich działania identyfikatory hasła grupy superużytkownik (root) system plików i uprawnienia użytkowników programy SUID i GUID polecenie chown

14 Użytkownicy - plik /etc/passwd /etc/passwd Plik zawierający dane o użytkownikach systemu i ich hasłach. Informacja jest podana następująco: identyfikator : zaszyfrowane_hasło : numer_użytkownika : numer_grupy : katalog_domowy : interpretator_poleceń Hasła są podane w postaci zaszyfrowanej. tomek:&1$2fg5zZ#$1$mTx/.Y5:505:501:/home/tomek/:/bin/bash Ze względu na bezpieczeństwo zaszyfrowane hasła mogą być umieszczane w pliku /etc/shadow, z prawami do czytania tylko dla administratora systemu, wówczas w pliku /etc/passwd w ich miejsce umieszcza się '*'.

15 Linux - logowanie użytkowników init getty login sh fork, exec exec chdir, setgid, setuid, exec shell podanie nazwy użytkownika podanie hasła (jeżeli potrzebne)..... inittab passwd

16 /etc/bashrc Plik zawiera ustawienia niektórych zmiennych środowiskowych oraz synonimów wspólnych dla wszystkich użytkowników.

17 Ochrona kont użytkowników konta bez haseł tomek::101:100:Tomasz Bezhasla:/home/tomek:/bin/bash konta grupowe martwe konta usermod... konta domyślne news:x:9:13:news:/usr/lib/news: konta uruchamiające jedno polecenie date::99:100:date:/tmp:/sbin/date konta z ograniczonymi interpreterami (bash -r) tomek::101:100:Tomasz Ograniczony:/home/tomek:/bin/bash -r konta z ograniczonym systemem plików tomek::101:100:Tomasz Ograniczony:/home/tomek:* ograniczenia pory logowania

18 Grupy użytkowników /etc/group Plik zawiera informacje o grupach użytkowników w systemie. Każda linia jest formatu: identyfikator_grupy : zaszyfrowane_hasło : numer_grupy : lista_użytkowników users::501:tomek,jurek,ania

19 Złe hasła imiona i nazwiska osób (rodziny, szefów, znajomych, dzieci), zwierząt imiona postaci bajkowych (np. frodo, gandalf itp.) nazwa systemu operacyjnego i komputera numery telefonów, numery rejestracyjne samochodów daty urodzenia inne informacje dające się łatwo zdobyć (np. adresy) nazw użytkowników w żadnej postaci (np. pisanych wielkimi literami lub podwójnie) słów ze słowników (także z innych języków) nazw własnych (miejsc, państw, krain geograficznych) wyrazów składających się z powtórzonej jednej litery (np. aaaaaaaa), prostych wzorów (np. qwerty) każdego z powyższych napisanych wspak każdego z powyższych z dołączoną jedna cyfrą

20 Dobre hasła wielkie i małe litery jednocześnie cyfry i/lub znaki interpunkcyjne pomieszane z literami zawierają pewne znaki kontrolne lub spacje są łatwe do zapamiętania są przynajmniej siedmioznakowe dają się szybko wpisać

21 Specjalne metody identyfikacji Hasła jednorazowe (np. OPIE - One time Password In Everything) Tokeny (np. SecurID firmy Secure Dynamics, NetSecure firmy Digital Pathways) systemy wykorzystujące cechy biofizyczne użytkowników

22 Ochrona konta root bezpieczne terminale /etc/securetty grupa wheel /etc/suauth root:user1,usr2:OWNPASS root:ALL EXCEPT GROUP WHEEL:DENY usr1:user10:NOPAS

23 Uprawnienia użytkownika root zmiana wartości nice dowolnego procesu wysyłanie dowolnych sygnałów do dowolnych procesów zmiana ograniczeń systemowych (max. czas CPU, max.rozmiary plików itp..) włączanie i wyłączanie rozliczania zmiana identyfikatora na dowolnego użytkownika (polecenie su) wylogowywanie użytkowników oraz przeładowywanie systemu zalogowanie się pomimo istnienia pliku /etc/nologin ustawianie czasu dostęp do wszystkich urządzeń odczyt i zmiana dowolnego obszaru pamięci tworzenie plików urządzeń w dowolnych miejscach systemu plików (mknod)

24 uruchamianie usług sieciowych na „zaufanych” portach rekonfiguracja sieci włączanie trybu „promiscous” interfejsu sieciowego odczyt, zmiana, usuwanie plików i programów uruchamianie dowolnego programu montowanie i odmontowywanie systemu plików dodawanie, usuwanie, zmiana kont użytkowników regulowanie ograniczeń miejsca na dysku i ustawianie systemu rozliczania używanie polecenia chroot zapisywanie plików pomimo 100% zapełnienia dysku Uprawnienia użytkownika root (cd)

25 dokonywać zmian w systemie plików zamontowanym „read only” - ale może pisać do „surowego” urządzenia lub zamontować dysk „read/write” odmontować system plików zawierający otwarte pliki lub w którym jakiś proces ma swój bieżący katalog odszyfrować zawartość pliku /etc/passwd - ale może zmodyfikować program login, tak aby hasła użytkowników były logowane, może też poleceniem passwd zmienić hasło konta Uprawnienia użytkownika root (czego root nie może)

26 Konfigurowanie systemu Linux

27 Konfiguracja typowe urządzenia i linki do nich (mouse, modem, cdrom, zip) punkty montowania dysków (szczególnie wymiennych) drukarka interfejs sieciowy konfiguracja autoryzacja ftp, telnet, ssh i inne usługi poczta (mime) nfs, samba, ncp (klient, server) ppp httpd X server linuxconf i inne

28 Typowe urządzenia i linki do nich (mouse, modem, cdrom, zip) /dev/mouse -> /dev/psaux (dla gpm) /dev/modem -> /dev/ttyS0 (dla minicom) /dev/cdrom -> /dev/hdc /dev/sda4 -> /dev/zip np: ln -s /dev/ttyS0 /dev/modem

29 Punkty montowania dysków /etc/fstab, /etc/mtab Np.: /dev/fd0/mnt/floppyautouser,noauto0 1 /dev/cdrom/mnt/cdromiso9660ro,user,noauto0 1 /dev/zip/mnt/zipvfatuser,noauto,exec0 1 /dev/hda1/mnt/winvfatuser,noauto0 1 server:/export/mnt/servernfsdefaults mount /mnt/cdrom mount -t iso9660 -o ro,user,noauto /dev/cdrom /mnt/cdrom

30 Drukarki z portem równoległym (/dev/lp0), szeregowym (/dev/ttyS0), USB (/dev/usb/lp0), drukarki sieciowe tzw. drukarki GDI (Windows) na ogół nie są obsługiwane! Postscript lub ghostscript

31 LPD - Line Printer Deamon lpd - spooling system (lpd, lpr, lpq, lpc, lprm) baza danych - /etc/printcap # LOCAL djet500 lp|dj|deskjet:sd=/var/spool/lpd/dj:mx#0:lp=/dev/lp0:sh:

32 CUPS - Common UNIX Printing System obsługuje IPP (Internet Printing Protocol) administracja, konfiguracja, status itp. przez WWW lub przez lpadmin obsługa szyfrowania (TLS i SSL) obsługa rozliczania (zadania/strony) sterowanie dostępem dla użytkowników obsługa PPD (PostScript Printer Description) API oraz biblioteki konfiguracja klienta - /etc/cups/client.conf

33 Interfejs sieciowy ifconfig lo route add -host lo ifconfig eth netmask up route add -net netmask eth0 route add default gw eth0 /etc/services, /etc/protocols /etc/inetd.conf ftp stream tcp nowait root /usr/sbin/wu.ftpd -l -i -a - v telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

34 Interfejs sieciowy cd.. /etc/host.equiv, ~/.rhosts Demon tcpd: logowanie i sterowanie dostępem (/etc/host.allow, /etc/host.deny) # : [: command] /etc/hosts, /etc/networks, /etc/nsswitch.conf, /etc/resolv.conf masquarading, firewall - będzie jeszcze o tym mowa.... ipchains, iptables ipchains -A forward -s /24 -j MASQ

35 Interfejs sieciowy - filtr pakietów Zapora sieciowa Źrodłowe i docelowe porty TCP/UDP Znaczniki stanu połączeń TCP Źródłowe i docelowe adresy IP Komunikaty ICMP Zapora sieciowa Źrodłowe i docelowe porty TCP/UDP Znaczniki stanu połączeń TCP Źródłowe i docelowe adresy IP Komunikaty ICMP Warstwa aplikacji Programy klientów i serwerów Warstwa aplikacji Programy klientów i serwerów Warstwa transportowa TCP, UDP Warstwa transportowa TCP, UDP Warstwa sieci IP, ICMP Warstwa sieci IP, ICMP Warstwa łącza danych adresy MAC Warstwa łącza danych adresy MAC Sprzęt

36 ipchains (kernel 2.2.x) Suma kontrolna Demaskarada Poprawność Łańcuch wejściowy Łańcuch wejściowy Decyzja o rutingu Decyzja o rutingu Proces lokalny Łańcuch wyjściowy Łańcuch wyjściowy Łańcuch przekazujący Łańcuch przekazujący DENY DENY / REJECT

37 iptables (kernel 2.4.x) Suma kontrolna Poprawność Łańcuch wejściowy Łańcuch wejściowy Decyzja o rutingu Decyzja o rutingu Proces lokalny Łańcuch wyjściowy Łańcuch wyjściowy Łańcuch przekazujący Łańcuch przekazujący DROP DROP / REJECT Decyzja o rutingu Decyzja o rutingu

38 Interfejs sieciowy cd.. Serwer ftp: - /etc/ftpusers wu.ftpd, proftpd... anonymous ftp -> wydzielony system plików i chroot serwer - sendmail, qmail klient - mail, pine fetchmail nfs: /etc/fstab, /etc/exports /home / (rw, no_root_squash)

39 Interfejs sieciowy cd.. DNS: bind /etc/named.conf bind uruchamiany na poziomie uprzywilejowania nadzorcy, zwykłego użytkownika, w pułapce chroot traffic shaper tc

40 Interfejs sieciowy cd.. samba: /etc/smb.conf dial-in server: mgetty ppp: /usr/sbin/pppd, /etc/ppp/*, /etc/inittab http: /usr/lib/apache/*

41 Program routed uruchamiany przy starcie systemu (ze skryptów rc.d) sprawdza, które interfejsy sieciowe są skonfigurowane i czynne (muszą być co najmniej 2) wysyła i odbiera w pętli komunikaty oraz modyfikuje tablice rutowania w jądrze /etc/gateways - dodatkowy plik konfiguracyjny nazwa1 gateway nazwa2 metric wartość

42 Program gated obsługuje protokoły wewnętrzne RIP, OSPF, Hello, ISIS obsługuje protokoły zewnętrzne EGP, BGP mogą być uruchomione jednocześnie różne protokoły ścieżki wyznaczone przez protokół wewnętrzny mogą być publikowane przez protokół zewnętrzny polecenia konfiguracyjne w jednym pliku za pomocą spójnej składni

43 Program gated - konfiguracja (1) zawartość pliku /etc/gated.conf emulacja routed rip yes ; - emulacja routed „pasywnego” rip yes { nobroadcast ; } ;

44 Program gated - konfiguracja (2) Protokół RIP i OSPF interfaces { interface le0 passive ; } ; autonomoussystem 283 ; snmp yes ; rip yes { broadcast ; defaultmetric 5 ; interface le version 2 multicast ; } ; ospf yes { traceoptions lsabuild protocol; monauthkey "XXXXXXXX" ; backbone { authtype simple ; interface al. { priority 2 ; } ; interface le { authkey "YYYYYYYY" ; } ; static { default gateway preference 140 retain ; } ;

45 Program gated - konfiguracja (3) Ruter ID: AS: OSPF Area: BGP External: do AS Szkielet OSPF (Area ) BGP IGP interfaces { options all passive; }; autonomoussystem 1019; routerid ; rip no; hello no; egp no; Ruter A bgp yes { preference 50; group type External peeras 2021 { peer ; }; group type IGP peeras 1019 { peer ; }; ospf yes { area { authtype none; networks { mask ; }; interface cost 1 { retransmitinterval 5; transitdelay 1; priority 1; hellointerval 10; routerdeadinterval 40; }; interface cost 1 { retransmitinterval 5; transitdelay 1; priority 1; hellointerval 10; routerdeadinterval 40; }; }; backbone { authtype none; interface cost 1 { retransmitinterval 5; transitdelay 1; priority 1; hellointerval 60; routerdeadinterval 180; }; }; export proto ospfase type 1 { proto bgp as 2021 { ALL metric 1; }; proto direct { ALL metric 1; }; }; export proto bgp as 2021 { proto direct { ALL metric 1; }; proto ospfase { ALL metric 1; }; };

46 X Server programy do konfiguracji: XF86Setup, XConfigurator, xf86config /etc/inittab id:4:initdefault: x1:4:wait:/etc/rc.d/rc.4 ~/.xinitrc, ~/.xsession ~/.Xdefaults

47 Demony systemowe cron bind syslogd, klogd inetd i inne

48 Konfiguracja cron’a - crontab /etc/crontab minuty godzina dzień_miesiąca miesiąc dzień_tygodnia program_do_wykonania znak '*' oznacza wykonanie o każdej dozwolonej wartości dla danego pola, można podawać listy wartości i zakresy

49 Sciany ogniowe (firewall) (1) atak sieciowy

50 Sciany ogniowe (firewall) (2) nieuzasadnione korzystanie z zasobów sieciowych www

51 Sciany ogniowe (firewall) (3) ściana ogniowa pozwala na filtrowanie pakietów

52 Filtracja pakietów (1) filtracja na podstawie typu protokołu (np. blokowanie komunikatów ICMP) filtracja poziomu warstwy sieciowej (IP) przekazanie pakiety na podstawie adresów IP nadawcy i/lub odbiorcy filtracja poziomu warstwy transportowej (na podstawie numerów portów - rodzajów usług) filtracja na poziomie warstwy aplikacji (serwery proxy) NAT (masquarading) - ukrywanie struktury sieci

53 Filtracja pakietów (2) filtracja statyczna reguły „sztywno” ustalone, duża szybkość działania, mała elastyczność filtracja dynamiczna zasady zmieniane w czasie funkcjonowania systemu (odblokowywanie połączeń „na żądanie”), analiza ruchu i blokowanie wykrytych ataków

54 NAT nie istnieje fizyczne połączenie komputerów A i B oraz A i C, przesyłane pakiety są modyfikowane w komputerze realizującym NAT - zmiana adresów IP z punktu widzenia komputera A komunikuje się on wyłącznie z komputerem realizującym NAT, nie ma on żadnych informacji o strukturze sieci lokalnej w sieci lokalnej można używać adresów prywatnych 10.x.x.x, x.x,... A B C NAT

55

56 NAT - konfiguracja

57 Zastosowanie NAT Korzyści: redukcja zapotrzebowania na adresy publiczne łatwość organizacji sieci używając adresów prywatnych przezroczystość (dla niektórych aplikacji) bezpieczeństwo Wady: złożone dostosowanie niektórych protokołów (np. FTP) brak skalowania wprowadzenie dodatkowych węzłów sieci (multihomed networks) brak fizycznego połączenia end-to-end dla zapewnienia bezpieczeństwa potrzebny IPsec

58 Firewall - architektura DMZ DMZ Strefa zdemilitaryzowana Serwer ftp, http, news, DNS

59 Zapory sieciowe (firewall) - pożądane cechy Wybór odpowiednich filtrów (pakietów, połączeń, usług itp.) Odporność na ataki Wydajność Monitorowanie sieci Dodatki (VPN, legalizacja i autoryzacja) Uwaga: zapory nie chronią przed atakami z wewnątrz sieci!

60 Zapora sieciowa Firewall sieciowy Warstwa aplikacji Programy serwera i klienta Warstwa aplikacji Programy serwera i klienta Warstwa transportowa TCP, UDP Warstwa transportowa TCP, UDP Warstwa sieci IP, ICMP. IGMP Warstwa sieci IP, ICMP. IGMP Warstwa łącza danych MAC Warstwa łącza danych MAC Sprzęt źródłowe i docelowe porty TCP/UDP znaczniki stanu połączeń TCP źródłowe i docelowe porty TCP/UDP znaczniki stanu połączeń TCP źródłowe i docelowe adresy IP protokoły ICMP, IGMP.... źródłowe i docelowe adresy IP protokoły ICMP, IGMP.... źródłowe i docelowe adresy sprzętowe

61 Netfilter DROP DROP / REJECT CRC Poprawność Pre-Routing Forward Lokalny proces Input Output Post-Routing

62 Netfilter - Przyklad (1)

63 Netfilter - Przyklad (2) DMZ: Mail server  SMTP to external  Accept SMTP from internal and external  Accept POP-3 from internal Name server  Send DNS to external  Accept DNS from internal, external and packet filter box Web server  Accept HTTP from internal and external  Rsync access from internal Packet Filter box:  PING any network  TRACEROUTE any network  Access DNS Internal:  Allow WWW, ftp, traceroute, ssh to external  Allow SMTP to Mail server  Allow POP-3 to Mail server  Allow DNS to Name server  Allow rsync to Web server  Allow WWW to Web server  Allow ping to packet filter box

64 Netfilter - Przyklad (3) for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done iptables -A INPUT -i ! lo -j DROP iptables -A OUTPUT -i ! lo -j DROP iptables -A FORWARD -j DROP ifconfig eth netmask ifconfig eth netmask pppd route add default ppp0 iptables -N internal-dmz iptables -N external-dmz iptables -N internal-external iptables -N dmz-internal iptables -N dmz-external iptables -N external-internal iptables -N icmp-accept iptables -N NEVER iptables -N LOGDROP

65 Netfilter - Przyklad (4) iptables -A NEVER -j LOG --log-level alert --log-prefix "filter ERROR: ” iptables -A NEVER -j DROP iptables -A LOGDROP -m limit -j LOG --log-prefix "filter: ” iptables -A LOGDROP -j DROP iptables -A FORWARD -i eth1 -o eth0 -j internal-dmz iptables -A FORWARD -i eth1 -o ppp0 -j internal-external iptables -A FORWARD -i eth0 -o ppp0 -j dmz-external iptables -A FORWARD -i eth0 -o eth1 -j dmz-internal iptables -A FORWARD -i ppp0 -o eth0 -j external-dmz iptables -A FORWARD -i ppp0 -o eth1 -j external-internal iptables -A FORWARD -j NEVER iptables -A icmp-accept -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type source-quench -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A icmp-accept -p icmp --icmp-type parameter-problem -j ACCEPT

66 Netfilter - Przyklad (5) iptables -A internal-dmz -p tcp -d $MAILSERVER --dport smtp -j ACCEPT iptables -A internal-dmz -p tcp -d $MAILSERVER --dport pop-3 -j ACCEPT iptables -A internal-dmz -p udp -d $NAMESERVER --dport domain -j ACCEPT iptables -A internal-dmz -p tcp -d $NAMESERVER --dport domain -j ACCEPT iptables -A internal-dmz -p tcp -d $WEBSERVER --dport www -j ACCEPT iptables -A internal-dmz -p tcp -d $WEBSERVER --dport rsync -j ACCEPT iptables -A internal-dmz -p icmp -j icmp-accept iptables -A internal-dmz -j LOGDROP ptables -A external-dmz -p tcp -d $MAILSERVER --dport smtp -j ACCEPT iptables -A external-dmz -p udp -d $NAMESERVER --dport domain -j ACCEPT iptables -A external-dmz -p tcp -d $NAMESERVER --dport domain -j ACCEPT iptables -A external-dmz -p tcp -d $WEBSERVER --dport www -j ACCEPT iptables -A external-dmz -p icmp -j icmp-accept iptables -A external-dmz -j DROP

67 Netfilter - Przyklad (6) iptables -A internal-external -p tcp --dport www -j ACCEPT iptables -A internal-external -p tcp --dport ssh -j ACCEPT iptables -A internal-external -p udp --dport 33434: j ACCEPT iptables -A internal-external -p tcp --dport ftp -j ACCEPT iptables -A internal-external -p tcp --dport 1024: j ACCEPT iptables -A internal-external -p icmp --icmp-type ping -j ACCEPT iptables -A internal-external -j LOG iptables -A internal-external -j REJECT iptables -A dmz-internal -p tcp ! --syn -s $MAILSERVER smtp -j ACCEPT iptables -A dmz-internal -p udp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $NAMESERVER domain -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $WEBSERVER www -j ACCEPT iptables -A dmz-internal -p tcp ! --syn -s $WEBSERVER rsync -j ACCEPT iptables -A dmz-internal -p icmp -j icmp-accept iptables -A dmz-internal -j NEVER

68 Netfilter - Przyklad (7) iptables -A dmz-external -p tcp -s $MAILSERVER smtp -j ACCEPT iptables -A dmz-external -p udp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-external -p tcp -s $NAMESERVER domain -j ACCEPT iptables -A dmz-external -p tcp ! --syn -s $WEBSERVER www -j ACCEPT iptables -A dmz-external -p icmp -j icmp-accept iptables -A dmz-external -j NEVER iptables -A external-internal -p tcp ! --syn --sport www -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport ssh -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport ftp -j ACCEPT iptables -A external-internal -p tcp ! --syn --sport 1024: j ACCEPT iptables -A external-internal -p icmp --icmp-type pong -j ACCEPT iptables -A external-internal -j DROP iptables -N external-if iptables -N dmz-if iptables -N internal-if

69 Netfilter - Przyklad (8) iptables -A INPUT -i ppp0 -j external-if iptables -A INPUT -i eth0 -j dmz-if iptables -A INPUT -i eth1 -j internal-if iptables -A external-if -p icmp --icmp-type pong -j ACCEPT iptables -A external-if -j icmp-accept iptables -A external-if -j DROP iptables -A dmz-if -p tcp ! --syn -s $NAMESERVER 53 -j ACCEPT iptables -A dmz-if -p udp -s $NAMESERVER 53 -j ACCEPT iptables -A dmz-if -p icmp --icmp-type pong -j ACCEPT iptables -A dmz-if -j icmp-accept iptables -A dmz-if -j NEVER iptables -A internal-if -p icmp --icmp-type ping -j ACCEPT iptables -A internal-if -p icmp --icmp-type pong -j ACCEPT iptables -A internal-if -j icmp-accept iptables -A internal-if -j LOGDROP iptables -D 1 input; iptables -D 1 forward; iptables -D 1 output

70 APACHE + JAVA + TOMCAT

71 Instalacja serwera Apache 2 Aktualizacja oprogramowania apt-get update apt-get –u upgrade Instalacja serwera www apt-get install apache2 apt-get install libapache2-mod-jk

72 Apache 2 Pliki konfiguracyjne serwera www znajdują się w katalogu /etc/apache2. Strony dostępne na serwerze można znaleźć w podkatalogu /etc/apache2/sites-available. W przypadku definiowania pojedynczego Virtual hosta można tego dokonać bezpośrednio w pliku /etc/apache2/apache2.conf

73 Instalacja Javy Pakiet do pobrania: W celu dokonania instalacji należy: mv jdk-6u24-linux-i586.bin /usr/local chmod +x jdk-6u24-linux-i586.bin./jdk-6u24-linux-i586.bin rm jdk-6u24-linux-i586.bin

74 Konfiguracja W pliku /etc/profile dodać export JAVA_HOME=/usr/local/java Zmodyfikować zmienna PATH do postaci: if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/ bin:/usr/local/java/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/java/ bin" fi

75 Instalacja serwera Apache Tomcat Aplikacja dostępna pod adresem Po pobraniu należy wykonać: mv apache-tomcat tar.gz /usr/local/; cd /usr/local/ tar zxvf apache-tomcat tar.gz ls -s apache-tomcat tomcat Z poziomu konsoli: cd /usr/local/tomcat/bin/ chmod 755 shutdown.sh startup.sh

76 workers.properties # This file provides minimal jk configuration properties needed to # connect to Tomcat. # # We define a worker named ‘default’ #workers.tomcat_home=/usr/locale/tomcat/ workers.java_home=/usr/local/java/ ps=/ worker.list=default worker.default.port=8009 worker.default.host=localhost worker.default.type=ajp13 worker.default.lbfactor=1

77 Apache -> Tomcat W pliku apache2.conf # mod_jk config # workers.properties JkWorkersFile /etc/apache2/workers.properties# Where to put jk logs JkLogFile /var/log/apache2/jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “ #JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat –ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat “%w %V %T”

78 Virtual Host /etc/apache2/sites-available: ServerName test.dmcs.pl ServerAdmin JkMount /* default JkMount /*.jsp default DirectoryIndex index.jsp index.html # Globally deny access to the WEB-INF directory AllowOverride None deny from all

79 Apache restart /etc/init.d/apache2 stop /usr/local/tomcat /bin/startup.sh /etc/init.d/apache2 start

80 APACHE ANT

81 ANT Producent: Apache Software Foundation System operacyjny: GNU/Linux, Windows, Mac OS, BeOS Pierwsze wydanie: 19 lipca 2000 Aktualna wersja stabilna: 1.8.2

82 Czym jest ANT ? Narzędzie, służące do zautomatyzowania procesu budowy oprogramowania. Podobne do programu Make Napisany w Javie do wykorzystania z programami napisanymi w tym języku. Co najważniejsze, jest to open-source na licencji Apache Software Fundation.

83 Ant a Make ? W pliku Makefile czynności określone jako komendy powłoki – zależne od platformy Ant rozwiązuje ten problem Użycie XML‘a i pliku build.xml

84 Schemat build.xml

85 Przykładowy build.xml

86 ANT wymagania - JDK 1.2 lub nowsza download - najnowsza wersja - Ant (27-December )

87 Do czego można użyć ANT’a? Ant możne pobierać kod źródłowy systemu kontroli wersji CVS, Subversion, Synergy, Perforce, ClearCase i wiele innych Ant można skompilować kod źródłowy Ant pozwala na przeprowadzanie testów jednostkowych JUnit3, JUnit4, TestNG lub dowolną aplikację testową Ant może pakować skompilowany kod i zasoby jars, wars, ears, tars, zips Ant może obsłużyć zależności pomiędzy target’ami

88 Ant – przykładowa instalacja rozpakować apache-ant bin.tar.gz do /usr/local/ant export ANT_HOME=/usr/local/ant exportJAVA_HOME=/usr/local/java export PATH=$PATH:$ANT_HOME/bin

89 Ant terminologia (1) project: jest element najwyższego poziomu w skrypt Ant ma trzy atrybuty opcjonalne: name nazwa projektu default domyślnego celu używać, gdy nie jest zdefiniowany cel basedir katalog bazowy, z którego wykonywane są ścieżki

90 Ant terminologia (2) target: Każdy projekt definiuje zero lub więcej target’ów target jest zbiorem zadań, które mają być zrealizowane Podczas uruchamiania Ant’a, można wybrać target(s), które będą wykonane Gdy żaden target nie jest wywołany, zostanie wykonany domyślnym target mogą być wykonywane warunkowo mogą być zdefiniowane zależności między target’ami

91 przykład

92 Ant terminologia (3) tasks task jest to fragment kodu, który może być wykonany task może mieć wiele atrybutów Ant zawiera ponad 80 podstawowych zadań i 60 opcjonalnych Istnieje ponad 100 zadań firm trzecich napisanych dla Ant rozszerzenia Ant (zadania) mogą być z łatwością napisane innych unikalnych problem

93 Ant terminologia (4) Properties properties ma nazwę i wartość (case-sensitive) properties mogą być stosowane w wartości atrybutów zadania Odbywa się to poprzez umieszczenie nazwy pomiędzy "$ {" i "}" w wartości atrybutu Np., jeśli jest właściwość "builddir„ o wartości „build", może być wykorzystana w atrybucie: ${builddir}/classes. Jest to rozwijane w czasie wykonywania do postaci: build/classes

94 Własności wbudowane Ant umożliwia dostęp do wszystkich właściwości systemu, jak gdyby zostały zdefiniowane przy użyciu zadania. Na przykład, $ {os.name} rozszerza się do nazwy systemu operacyjnego. Ant ma kilka wbudowanych właściwości: basedir - bezwzględną ścieżkę do projektu bazowego katalogu (zgodnie z atrybutem basedir z ) ant.file - ścieżkę bezwzględną buildfile ant.version - wersja Ant ant.project.name - nazwa projektu, który jest aktualnie wykonywany, ale jest w atrybut name ant.java.version

95 Ant dostępne środowiska WSAD / RAD / Eclipse Ant zbudowany jest na tych IDE Wszystkie posiadają wyspecjalizowane "Ant View" z linii poleceń Automatyzacja środowiska (CruiseControl) Wymaga JDK

96 Wiersz poleceń Ant ant [ options ] [ target-names ] uruchamia target określony nazwa i te od których zależy można podać wiele nazw oddzielonych spacjami -D opcja określa właściwość, która może być wykorzystana przez cele i zadania. np. -Dproperty-name=property-value ant -help wymienia inne opcje wiersza polecenia

97 Podstawowe zadania

98 Zadania kompilacji Kompiluje określony plik źródłowy Uruchomienie narzędzia procesor adnotacji (apt), a następnie opcjonalnie kompiluje kod Uruchamia rmic kompilator

99 Zadania archwizacji, tworzy plik zip., buduje plik jar, rozszerzenie pliku Jar na, archiwum www

100 Zadania testowe Działa z badań w ramach testów JUnit. Łączy poszczególne pliki XML generowane przez zadania Junit i generuje arkusz raportu.

101 Zadania własności Ustawia własności do wartości ostatniego elementu ścieżki. Ładuje plik do własności. Tworzy lub modyfikuje pliki własności. Ustawia właściwość, jeżeli dany plik jest nowszy niż docelowy zestaw plików źródłowych.

102 Inne zadania tekst Echoes do System.out lub do pliku. Generuje kod dokumentacji za pomocą narzędzia javadoc. Wykonuje szereg instrukcji SQL poprzez JDBC do bazy danych.

103 Usuwanie, tworzenie i kopiowanie Najważniejsze elementy pliku build.xml

104 Komendy systemowe Ant umożliwia wykonywanie komend systemowych.

105 Apache MAVEN

106 Maven Producent: Apache Software Foundation Pierwsze wydanie: 25th June 2007 Aktualna wersja stabilna: 3.0.3

107 Literatura Maven: The Definitive Guide book/reference/public-book.html Developing with Eclipse and Maven n/download-book?file=books/m2eclipse-book.pdf Opisy wtyczek

108 Czym jest Apache Maven Narzędzie automatyzującym budowę programowania na platformę Java. Funkcjonalności realizowane poprzez wtyczki automatycznie pobierane przy ich pierwszym wykorzystaniu. Plik określający sposób budowy aplikacji nosi nazwę POM-u (ang. Project Object Model).f

109 Cele Mavena Budowanie oprogramowania ma zakończyć się osiągnięciem wybranego przez budującego celu. Dostępnych celów jest wiele. Pula celów nie jest bezpośrednio określona przez twórcę POM-a, lecz przez wtyczki rozszerzające funkcjonalność Mavena. Poszczególne cele mogą wymagać wcześniejszej realizacji innych celów, np. cel package (zbudowanie paczki dystrybucyjnej) wymaga uprzedniej realizacji compile (kompilacja kodów źródłowych) oraz test (uruchomienie testów automatycznych).

110 Cykle życia (1) Mianem głównego cyklu życia projektu określa się uszeregowanych kolejno osiem najważniejszych z punktu widzenia budowy aplikacji celów. Powodzenie każdego kolejnego celu uzależnione jest od pomyślnej realizacji celów znajdujących się wcześniej w cyklu: validate - sprawdzenie, czy projekt jest poprawny i czy wszystkie niezbędne informacje zostały określone compile - kod źródłowy jest kompilowany test - przeprowadzane są testy jednostkowe

111 Cykle życia (2) package - budowana jest paczka dystrybucyjna integration-test - zbudowany projekt umieszczany jest w środowisku testowym, gdzie przeprowadzane są testy integracyjne verify - sprawdzenie, czy paczka jest poprawna install - paczka umieszczana jest w repozytorium lokalnym - może być używana przez inne projekty jako zależność deploy - paczka umieszczana jest w repozytorium zdalnym (opublikowana)

112 Co to POM ? POM, czyli Project Object Model, to dokument XML-owy kompleksowo opisujący projekt. POM nie tylko precyzuje szczegóły budowy produktu, ale też może przechowywać informacje o zespole programistów, zastosowanych systemach wspomagających rozwój oprogramowania. W Mavenie dokument POM nosi nazwę pom.xml.

113 Przykład POM (1) src/main/resources

151 GENEROWANIE STRONY PROJEKTU

152 Generowanie strony projektowej (Site) Sekcja : konfiguracja raportów generowanych na potrzeby projektu org.apache.maven.plugins maven-project-info-reports-plugin org.apache.maven.plugins maven-javadoc-plugin 2.6 true

153 Generowanie strony projektowej (Site) W przypadku projektu wielomodułowego, strona będzie generowana z osobna dla każdego projektu. Raporty można zintegrować ustawiając wartość aggregate na true. Agregacja następuje dopiero po wykonaniu celu site:deploy Dla celu site:deploy należy skonfigurować distributionManagement, tzn miejsce w którym zostanie umieszczona strona projektu. Może być to także okalizacja na serwerze plików czy też www (transport np.: scp). Test file://d://javaProg//docs

154 Konfiguracja serwerów: przykład Plik pom.xml Test Test Site scp://nazwa_serwera/sciezka_do_np_public_html/ Plik settings.xml Test uzytkownik haslo

155 Informacje o projekcie: przykład org.apache.maven.plugins maven-project-info-reports-plugin index project-team dependencies dependency-convergence dependency-management plugin-management plugins summary scm

156 Listę członków zespołu projektowego bądź też organizacji należy umieścić w sekcji. Można też stworzyć dodatkową listę w sekcji dla osób bądź jednostek przekazujących coś na rzecz projektu. Jeżeli generowane są raporty z scm (np. changelog) to id powinno być zgodne z loginem w tym systemie. test test user Technical University of Lodz CET kierownik projektu pracownik

157 Informacje o projekcie: summary Dane podstawowe o projekcie Test Opis projektu Warto wpisać dane jednostki organizacyjnej. Informacja ta jest umieszczana dodatkowo w wielu raportach np.: javadoc Technical University of Lodz

158 Informacje o projekcie: scm Wyświetlane są podstawowe informacje o systemie scm użytym w projekcie, oraz jak z niego korzystać. Wymaga podania stosownych url w sekcji scm: scm:svn:svn://adres_repozytorium Można też w tej sekcji ustalić developerConnection dla scm. Ten url wykorzystywany jest przy operacjach zapisu connection jest tylko dla operacji oczytu url jest wykorzystywany w wielu raportach do podlinkowania plików źródłowych (o ile w ogóle system scm udostępnia pliki np. po http)

159 Informacje o projekcie: scm Skonfigurowanie sekcji scm pozwala z poziomu Maven wykonywać operacje w systemie scm np. commit, update itd. Wiele innych wtyczek bazuje na scm

160 Raporty na stronie projektowej W sekcji można dodać wiele wtyczek generujących pożyteczne raporty. We wcześniej przedstawionym przykładzie znajdował się maven- javadoc-plugin W większości z nich należy zwrócić uwagę na sposób kodowania źródeł i sposób kodowania generowanego raportu. Domyślnie przyjmowane jest ISO Do ustalenia tych wartości warto zdefiniować w pliku pom parametry np. czy też, jak w przykładzie na kolejnym slajdzie. Parametry te powinny być także użyte np. w konfiguracji maven- compiler-plugin

161 Problemy przy generowaniu strony Z uwagi na złożoność generowania strony projektowej, może pojawić się wyjątek OutOfMemoryError. Należy wtedy zmienić ustawienia maszyny wirtualnej dla maven set MAVEN_OPTS=-Xmx1024m -Xms512m - XX:PermSize=256m -XX:MaxPermSize=512m mvn site

162 PRACA Z REPOZYTORIUM

163 Konfiguracja klienta svn po ssh Założenia – Dostęp do repozytorium poprzez svn+ssh – Uwierzytelnianie z wykorzystaniem klucza prywatnego Potrzebne są następujące programy – klient subversion (np. Collabnet) – putty (do konfiguracji ssh) – plink (do utworzenia połączenia ssh) – puttygen (gdy chcemy generować klucze)

164 Konfiguracja klienta svn po ssh Wygodnie jest do PATH dodać ścieżkę do katalogu z zainstalowanymi programami putty, puttygen i plink (w tym przypadku nawet bardzo wskazane) oraz svn W profilu użytkownika w Application Data\Subversion (%APPDATA%\Subversion) znajduje się plik konfiguracyjny config. Ustawienia można także wprowadzić z poziomu rejestru – patrz plik README Domyślnie svn poszukuje ssh do nawiązania połączenia svn+ssh. Zmieniamy to na plink.exe w sekcji [tunnels] [tunnels] ssh = plink.exe

165 Konfiguracja połączenia svn po ssh Uruchomić putty Skonfigurować sesję – Session: hostname: connection type: SSH session name: nazwa_sesji – Connection/SSH Wybrać wersję protokołu – najlepiej v2 – Connection/SSH/Auth Wskazać lokalizację pliku z kluczem prywatnym Zapisać sesję z poziomu Session

166 Test i konfiguracja maven Wykonać dowolne polecenie svn na repozytorium np.: svn ci svn+ssh://nazwa_sesji/lokalizacja_repo Konfiguracja maven: scm:svn:svn+ssh://nazwa_sesji/lokalizacja_repo Wykonać polecenie: mvn scm:checkin -Dmessage="test" Jeżeli wszystko przebiegło pomyślnie oznacza to, że maven został prawidłowo skonfigurowany do pracy z repozytorium

167 BUDOWA PLANOWANEGO WYDANIA APLIKACJI

168 Konfiguracja wtyczki maven-release-plugin Przez „wydanie” rozumiemy utworzenie planowanej finalnej wersji projektu Jeżeli skonfigurowano projekt zgodnie z wcześniejszymi slajdami to jest on praktycznie gotów do użycia tej wtyczki Wtyczka nie wymaga wtedy dodatkowej konfiguracji, aczkolwiek można to zrobić. maven-release-plugin 2.0-beta-9

169 Cele wtyczki release:clean – usunięcie informacji (dodatkowych plików) po wykonaniu release:prepare release:prepare – przygotowanie wydania w SCM. release:rollback – wycofanie zmian z ostatniego wydania release:perform – wykonanie wydania z systemu SCM release:stage – wykonanie wydania do innego repozytorium albo katalogu release:branch – utworzenie rozgałęzienia aktualnego projektu z aktualizacją numerów wersji

170 Przygotowanie wydania, cel: prepare Sprawdzenie zgodności źródeł z repozytorium ( ) Zmiana numerów wersji w plikach pom.xml (część interaktywna, możliwy jest tryb wsadowy) Zmiana informacji w tak aby odpowiadała nowej lokalizacji wydania w repozytorium, np. w systemie svn katalog tags Wykonanie testów Zatwierdzenie zamian w repozytorium (tags) Podniesienie numerów wersji z jednoczesnym dodaniem SNAPSHOT Zatwierdzenie zmian w repozytorium dla wersji rozwojowej np. w systemie svn katalog trunk

171 Inne przydatne cele projektowe Po wykonaniu celu prepare dobrze jest wykonać clean, celem usunięcia tymczasowych kopii plików pom.xml i informacji o przygotowanym ostatnim wydaniu W przypadku problemów z dokończeniem przygotowania wydania, gdy wykonane zostały zmiany w repozytorium można wycofać te zmiany przy pomocy celu rollback Można jednak po dokonaniu poprawek w konfiguracji kontynuować przygotowanie wydania przy pomocy celu prepare (takie jest domyślne ustawienie dla wtyczki, które oczywiście można zmienić)

172 Wydanie projektu, cel: perform Pobranie ostatniego wydania projektu Wykonanie celów: – deploy – umieszczenie artefaktów projektowych w repozytorium maven – site-deploy – umieszczenie strony projektowej na dedykowanym serwerze

173 HUDSON

174 „Ręczna” integracja

175 Automatyczna integracja

176 Ciągła integracja CI, Ciągła integracja (ang. Continous Integration) – zestaw zaleceń i praktyk, które mają skrócić czas dostarczenia oprogramowania do użytkowników dzięki usprawnieniu integracji kodu.

177 CI - zalety Repozytorium kodu Automatyzacja build-ów Automatyzacja testów Commit codziennie, build co noc Izolacja środowiska testowego od produkcyjnego Szybkie build-y, wyniki dostępne dla każdego Automatyzacja instalacji

178 Systemy CI Hudson - https://hudson.dev.java.net Apache Continuum - CruiseControl - LuntBuild - TeamCity -

179 CI

180 CI

181 Hudson - instalacja i uruchomienie Instalacja: java -jar hudson.war deploy w kontenerze Tomcat Dostęp:

182 HUDSON - zalety Prosta instalacja, Prosta obsługa, Możliwość obsługi dowolnych projektów (Ant, Maven, Make), Powiadomienia przez RSS/ /komunikator, Build-y w środowisku rozproszonym, Wtyczki wyświetlające raporty, metryki itp., Wykresy w postaci trendów.

183 Wtyczki SCM - integracja z systemami zarządzania kodem (inne niż SVN, CVS), Build triggers - wyzwalacze, Build tools - integracja z narzędziami do buildów, Build wrappers - dodatkowe operacje przed / po buildzie, Build notifiers - dodatkowe powiadomienia, Slave controllers - dodatkowe opcje zarządzania rozproszeniem obliczeń, Build reports - raporty, statystyki, wykresy, External site integrations - integracja z systemami zewn. Np. JIRA, Artifact uploaders - zarządzanie artefaktami, Page decorators - ozdobniki.

184 Tworzenie zadania Hudson‘a (1) Mając już gotowy projekt wraz z działającym skryptem budującym należy utworzyć zadanie Hudsona: z głównego panelu sterowania Hudson wybieramy opcję New Job określamy nazwę dla tworzonego zadania wybieramy free-style jako rodzaj projektu i przechodzimy do następnego ekranu, gdzie wpiszemy pozostałe szczegóły wybieramy system kontroli wersji z którego będzie korzystał Hudson (w naszym przypadku będzie to Subversion) jako warunek wywołania procesu integracji (Build Triggers) wybieramy cykliczne odpytywanie repozytorium (Poll SCM) w harmonogramie wpisujemy łańcuch znaków zgodny z formatem crond (np. */2 * * * * – odpytywanie co 2 minuty)

185 Tworzenie zadania Hudson‘a (2) następnie definiujemy, co właściwie będzie oznaczać dla Hudson‘a zbudowanie aplikacji – w naszym przypadku chcemy, aby było to wywołanie przy pomocy Ant‘a domyślnego celu zdefiniowanego w skrypcie budowania (zaznaczamy Invoke Ant) przyszedł czas na określenie czynności, które zostaną wykonane po zakończeniu budowania aplikacji – zgodnie z wcześniejszymi ustaleniami będzie interesowało nas: zachowanie artefaktów (validator.jar) z procesu budowania (Archive the artifacts) opublikowanie wyników testów jednostkowych (Publish JUnit test result report) opublikowanie wyników pokrycia kodu testami (Record Emma coverage report) opublikowanie wyników sprawdzenia jakości kodu przy użyciu checkstyle‘a (Report violations) wysłanie informacji o integracji, która się nie powiodła ( Notification)

186 Dodatkowe zdania uzyskanie zbudowanej wersji aplikacji z konkretnego build‘a analiza zmienności w czasie różnych parametrów opisujących aplikację w celu określenia trendów (np. procentowe pokrycie testami kodu źródłowego) zatwierdzenie zmian w repozytorium, które spowodują niebudowanie się aplikacji spowoduje wysłanie maila na wskazany adres

187 Podsumowanie Hudson stanowił bardzo ważne ogniwo w procesie wytwarzania, dla większości standardowych zastosowań powinien być odpowiedni. pozostając bardzo intuicyjny oraz łatwy w konfiguracji dostarcza możliwości na zupełnie wystarczającym poziomie zaawansowania.


Pobierz ppt "Zarządzanie i integracja aplikacji Java EE Przemysław Nowak."

Podobne prezentacje


Reklamy Google