ci oraz cd w złożonym projekcie o małym budżecie

40
Potrzeba Zalożenia Technologie Projekt Realizacja EOP CI oraz CD w zlożonym projekcie o malym budżecie Historia oparta na faktach G. Godlewski 28 lutego 2016

Upload: grzegorz-godlewski

Post on 22-Jan-2018

255 views

Category:

Small Business & Entrepreneurship


1 download

TRANSCRIPT

Page 1: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

CI oraz CD w złożonym projekcie o małymbudżecie

Historia oparta na faktach

G. Godlewski

28 lutego 2016

Page 2: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

O autorze

W wolnym czasie programuję pracując nad swoimi pomysłami,trenuję karate, muzykuję i param się serowarstwem.

Page 3: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Podstawowe problemy

Zawsze brakuje:

Pieniędzy

Ludzi

Czasu

Wiedzy

Doświadczenia

Ludzie posiadają ograniczone możliwości uczenia się i pojmowaniawiedzy. Zrób jak najlepiej za pierwszym razem, nie będzie trzebado tego wracać.

Page 4: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Page 5: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Page 6: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Zakres do automatyzacji

Testy jednostkowe (co piszę)

Testy funkcjonalne (co klikam)

Składniki jakościowe (nightly build, code coverage, phpmd,phpcs, jshint, jslint, ...)

Przygotowanie aplikacji do testów (deployment itp)

Wszystko co powtarzalne i wykonywane często!

Miejsc do szukania oszczędności czasu przez należy poszukiwaćciągle.

Page 7: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Continuous Integration

Martin Fowler:Continuous Integration is a software development

practice where members of a team integrate theirwork frequently, usually each person integrates at leastdaily - leading to multiple integrations per day. Eachintegration is verified by an automated build (includingtest) to detect integration errors as quickly as possible.

Page 8: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Continuous Delivery

Martin Fowler:A common question we hear is “what is the difference

between Continuous Delivery and ContinuousDeployment?” Both terms are similar and were coinedaround the same time. I see the difference as a businessdecision about frequency of deployment into production.Continuous Delivery is about keeping your applicationin a state where it is always able to deploy intoproduction. Continuous Deployment is actuallydeploying every change into production, every day ormore frequently.

A gdy nie jesteśmy pewni?

Automatyzacja do etapu staging, a potem ”promote to production”

Page 9: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

12-factor app

Rysunek 1 : http://12factor.net

Page 10: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Kodeks postępowania

Stosowanie zasada Pareta

Duże operacje mają być wykonywane jedną linijką - 3działania i więcej - do skryptu

Rozwiązania mają być ładne, zgrabne, poprawne i lekkie wutrzymaniu - „this small”

Małe i luźno powiązane elementy łatwiej się utrzymuje

Powtarzalność redukuje złożoność, stwórz konwencję i się jejtrzymaj

Projektuj i działaj w oparciu o kontrakty

Co się da i ma sens, przenoś do konfiguracji zudokumentowaną wartością domyślną

Page 11: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

PHP

7.0.3 - nowość, nowość nowość!

composer - zarządzanie zależnościami

phing - kontrakt pomiędzy projektem a systemem CI

wszystko z czym można eksperymentować (PHP DataStructures itp)

Page 12: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Silex

Bardzo mały footprint

Kompatybilny z najnowszym PHP

Dostarcza łatwej obsługi Request i Response

Na etapie budowania prostych API nie potrzebuję nic więcej

Ładnie się integruje z pozostałymi komponentami Symfony

Page 13: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

TeamCity

Wersja darmowa:

3 build agent’y

20 build configurations

Duże możliwości w zakresie konfiguracji (parametry buildów,szablony konfiguracji, definiowanie zależności etc)

Page 14: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Git

Bo wszystko inne to herezja

BitBucket - prywatne repozytoria za darmo do 5 osób, dlamałych zespołów idealne rozwiązanie

TeamCity VCS root bardzo ładnie się integruje i wspiera Git

Page 15: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Bash / Make

Stosowanie podejścia: configure, make, make install (tematzamknięty w 3 krokach)

Skrypty wspomagające / upraszczające uruchamianie /restartowanie aplikacji

Każde zadanie wymagające co najmniej 3 kroków należyzłożyć do 1 skryptu

Page 16: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Docker

Przeprowadzanie procesu CI wewnątrz izolowanychkontenerów (docker in docker, sic!)

Zapewnienie ‘opakowania dla produktu‘, w którym będziewysyłany na serwer

Prywatny Docker Hub (run in docker) - musimy gdzieśudostępniać budowane obrazy

Rozszerzanie dostępnych obrazów i ich dostosowanie donaszych potrzeb

Docker Compose w celu uruchamiania grup kontenerów (wszczególności 1 element)

Page 17: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Ansible

Opisanie sposobu dostarczenia produktu do odbiorcy(deployment na serwer)

Zarządzanie infrastrukturą (zapewnienie odpowiedniejkonfiguracji)

Bardzo dobra dokumentacja

Bardzo duża liczba modułów - jeszcze nie trafiłem nakonieczność pisania własnych

Page 18: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Sposób postrzegania produktu

Page 19: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Cykl życia produktu

Produkcja - składanie z części, diagnostyka, usunięciezbędnych elementów

Pakowanie - gotowy produkt złożony tylko z częścifinałowych pakowany jest w pudełko / kontener

Dostarczenie - przekazanie do odbiorcy - pod wskazanyadres, w określony sposób

Każdy z etapów procesu ma jasno określone granice - wejście /wyjście

Page 20: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Kompletne rozwiązanie

W przypadku produktu złożonego z wielu komponentów, możemyposłużyć się analogią do zakupu zestawu kuchennego:

Wszystkie pudełka zawierają komponenty produktyspełniające szereg wymogów

Wiemy jak komponenty mają być ze sobą połączone

Wiemy jak komponenty powinny być rozmieszczone docelowow infrastrukturze klienta

Page 21: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Przepływ pracy

Page 22: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Przepływ pracy

Page 23: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Repozytoria

W pracy z dużą liczbą repozytoriów może pomóc zastosowaniekonwencji:

Szablon

(1 ) [ p r o j ]− source−[x ]( 2 ) [ p r o j ]− image−[x ]( 3 ) [ p r o j ]− image−[x]−dev

1 Kod źródłowy produktu2 Kod źródłowy obrazu, który będzie zawierał gotowy produkt3 Kod źródłowy deweloperskiej wersji obrazu dla produktu

Przykład

foo−source−s e r v i c e−paymentfoo−image−s e r v i c e−paymentfoo−image−s e r v i c e−payment−dev

Page 24: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Zatrudniamy agentów

Page 25: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Zatrudniamy agentów

Page 26: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Rozszerzanie obrazów

Page 27: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Plan działań

1 Przygotowanie projektu (projektów) do CI2 Przygotowanie infrastruktury pod CI3 Przygotowanie samego serwera CI4 Opracowanie konfiguracji (Build Configurations)

Page 28: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Przygotowanie projektu

Pełna dowolność użycia narzędzia: make, phing, ant, maven -dosłownie cokolwiek, byle by z głową.

Jedną komendą powinniśmy być w stanie (zadanie dla buildagent’a):

Podłączyć wszystkie wymagane zależności

Przeprowadzić diagnostykę

Zdemontować zależności niewymagane przez odbiorcę

Przygotować paczkę do dystrybucji

Page 29: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Budowanie samego projektu

<?xml version="1.0"?><project name="Project name" default="build">

<target name="build"><phingcall target="clean" /><phingcall target="configure" /><phingcall target="dependencies-dev" /><phingcall target="tests" /><phingcall target="assets" /><phingcall target="dependencies-dist" /><phingcall target="package" />

</target>

<!-- Further targets -->

Page 30: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Budowanie samego projektu

Plik build.xml zawiera opis wszystkich operacji - stanowi pomostpomiędzy projektem, a agentem.

Wykonywanie build’u

$ phing

Domyślny build target: build.

W każdym komponencie systemu (serwisie etc), który będziebudowany przez serwer CI należy stosować to samo podejście -powtarzalność redukuje złożoność!

Page 31: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Przygotowanie infrastruktury

1 Odpowiedni kernel (już od 3.10!)2 Odpowiednie moduły kernela (aufs, devicemapper itp - zależy

od distro)3 Zainstalowany docker4 Zainstalowany docker-compose

Page 32: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Pułapka Docker i DeviceMapper

Jeżeli używacie sterownika devicemapper, zwróćcie uwagę abyUdev Sync Supported było ustawionena true.

Page 33: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Przygotowanie serwera

Docker Hub (registry)

Serwer TeamCity (sjoerdmulder/teamcity)

Agenty TeamCity (sjoerdmulder/teamcity-agent)

W rzeczywistym zastosowaniu powinniśmy mieć swójwyspecjalizowany obraz agent’a, rozszerzający wspomniany wyżej.

Page 34: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Docker Hub

hub:restart: alwaysimage: registry:2ports:- "5000:5000"environment:TERM: linuxREGISTRY_HTTP_TLS_CERTIFICATE: :)REGISTRY_HTTP_TLS_KEY: :)REGISTRY_AUTH: htpasswdREGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswdREGISTRY_AUTH_HTPASSWD_REALM: Registry Realmvolumes:- "/home/docker-distro/registry/data:/var/lib/registry"- "/etc/ssl/certs:/certs"- "/etc/ssl/private:/keys"- "/home/docker-distro/registry/auth:/auth"

Page 35: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

TeamCity Server

server:image: "sjoerdmulder/teamcity:latest"ports:- "8111:8111"

volumes:- "/home/teamcity/server/data:/var/lib/teamcity"

environment:TERM: linux

Page 36: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

TeamCity Agent

agent:image: "sjoerdmulder/teamcity:latest"ports:- "9090:9090"

volumes:- "/var/run/docker.sock:/var/run/docker.sock" # docker in docker- "/usr/bin/docker:/usr/bin/docker"- "/usr/bin/docker:/usr/local/bin/docker"- "/home/teamcity/agent/work:/opt/buildAgent/work" # work directories- "/home/teamcity/agent/composer:/opt/composer/cache" # composer cache- "/home/teamcity/agent/docker:/home/teamcity/.docker" # hub auth keys

environment:TERM: linuxTEAMCITY_SERVER: "http://teamcity_server:8111" # your serverTEAMCITY_AGENT_NAME: "Alpha"AGENT_HOME_ON_HOST: "/home/teamcity/agent"

Page 37: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Konfigurowanie serwera

Zdefiniować VCS roots, które będą używane

Określenie parametrów konfiguracji (nawet komend, szukaniewspólnych mianowników

Zdefiniowanie konfiguracji build’u

Artefakty!

Zdefiniowanie zależności między konfiguracjami

Zdefiniowanie triggerów buildów

Page 38: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Wdrażanie

Zadanie dla Ansible:

Przygotowanie docker-compose.yml z odpowiednią wersjąobrazu do wdrożenia

Przygotowanie skryptów pomocniczych (start, stop, restartitp).

Uruchomienie przy pomocy skryptu pomocniczego

Wszystkie dodatkowe zadania (ustawienie monitorowania itp).

Wasza infrastruktura wymusi konkretne kroki.

Page 39: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

No dobra, ale co w przypadku projektu spadkowego?

Page 40: CI oraz CD w złożonym projekcie o małym budżecie

Potrzeba Założenia Technologie Projekt Realizacja EOP

Dziękuję za uwagę!

http://linkedin.com/in/[email protected]

@GGodlewski