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
Jan 22, 2018
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
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.
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ć.
Potrzeba Założenia Technologie Projekt Realizacja EOP
Potrzeba Założenia Technologie Projekt Realizacja EOP
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.
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.
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”
Potrzeba Założenia Technologie Projekt Realizacja EOP
12-factor app
Rysunek 1 : http://12factor.net
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ą
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)
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
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)
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
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
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)
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
Potrzeba Założenia Technologie Projekt Realizacja EOP
Sposób postrzegania produktu
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
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
Potrzeba Założenia Technologie Projekt Realizacja EOP
Przepływ pracy
Potrzeba Założenia Technologie Projekt Realizacja EOP
Przepływ pracy
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
Potrzeba Założenia Technologie Projekt Realizacja EOP
Zatrudniamy agentów
Potrzeba Założenia Technologie Projekt Realizacja EOP
Zatrudniamy agentów
Potrzeba Założenia Technologie Projekt Realizacja EOP
Rozszerzanie obrazów
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)
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
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 -->
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ść!
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
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.
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.
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"
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
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"
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
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.
Potrzeba Założenia Technologie Projekt Realizacja EOP
No dobra, ale co w przypadku projektu spadkowego?
Potrzeba Założenia Technologie Projekt Realizacja EOP
Dziękuję za uwagę!
http://linkedin.com/in/[email protected]
@GGodlewski