Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

286 views

Published on

Jak zorganizować sobie Continuous Integration i Continuous Delivery w projekcie o niezwykle małym budżecie

W trakcie prezentacji dotknięte zostaną następujące zagadnienia:
- sposób organizacji projektu pod kątem wprowadzania CI / CD
- użycie kontenerów w celu przeprowadzania wyżej wymienionych procesów
- zalecenia odnośnie stosowania narzędzi takich jak TeamCity, Docker, Ansible, Git, Make, skrypty Bash, Phing itp.
- wskazanie pułapek o których trzeba pamiętać

  • Be the first to comment

  • Be the first to like this

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

  1. 1. Potrzeba Założenia Technologie Projekt Realizacja EOP CI oraz CD w złożonym projekcie o małym budżecie Historia oparta na faktach G. Godlewski 28 lutego 2016
  2. 2. 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.
  3. 3. 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 pojmowania wiedzy. Zrób jak najlepiej za pierwszym razem, nie będzie trzeba do tego wracać.
  4. 4. Potrzeba Założenia Technologie Projekt Realizacja EOP
  5. 5. Potrzeba Założenia Technologie Projekt Realizacja EOP
  6. 6. 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.
  7. 7. 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 their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible.
  8. 8. 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 Continuous Deployment?” Both terms are similar and were coined around the same time. I see the difference as a business decision about frequency of deployment into production. Continuous Delivery is about keeping your application in a state where it is always able to deploy into production. Continuous Deployment is actually deploying every change into production, every day or more frequently. A gdy nie jesteśmy pewni? Automatyzacja do etapu staging, a potem ”promote to production”
  9. 9. Potrzeba Założenia Technologie Projekt Realizacja EOP 12-factor app
  10. 10. Potrzeba Założenia Technologie Projekt Realizacja EOP Kodeks postępowania Stosowanie zasada Pareta Duże operacje mają być wykonywane jedną linijką - 3 działania i więcej - do skryptu Rozwiązania mają być ładne, zgrabne, poprawne i lekkie w utrzymaniu - „this small” Małe i luźno powiązane elementy łatwiej się utrzymuje Powtarzalność redukuje złożoność, stwórz konwencję i się jej trzymaj Projektuj i działaj w oparciu o kontrakty Co się da i ma sens, przenoś do konfiguracji z udokumentowaną wartością domyślną
  11. 11. 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 Data Structures itp)
  12. 12. 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
  13. 13. 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)
  14. 14. Potrzeba Założenia Technologie Projekt Realizacja EOP Git Bo wszystko inne to herezja BitBucket - prywatne repozytoria za darmo do 5 osób, dla małych zespołów idealne rozwiązanie TeamCity VCS root bardzo ładnie się integruje i wspiera Git
  15. 15. Potrzeba Założenia Technologie Projekt Realizacja EOP Bash / Make Stosowanie podejścia: configure, make, make install (temat zamknięty w 3 krokach) Skrypty wspomagające / upraszczające uruchamianie / restartowanie aplikacji Każde zadanie wymagające co najmniej 3 kroków należy złożyć do 1 skryptu
  16. 16. Potrzeba Założenia Technologie Projekt Realizacja EOP Docker Przeprowadzanie procesu CI wewnątrz izolowanych kontenerów (docker in docker, sic!) Zapewnienie ‘opakowania dla produktu‘, w którym będzie wysyłany na serwer Prywatny Docker Hub (run in docker) - musimy gdzieś udostępniać budowane obrazy Rozszerzanie dostępnych obrazów i ich dostosowanie do naszych potrzeb Docker Compose w celu uruchamiania grup kontenerów (w szczególności 1 element)
  17. 17. Potrzeba Założenia Technologie Projekt Realizacja EOP Ansible Opisanie sposobu dostarczenia produktu do odbiorcy (deployment na serwer) Zarządzanie infrastrukturą (zapewnienie odpowiedniej konfiguracji) Bardzo dobra dokumentacja Bardzo duża liczba modułów - jeszcze nie trafiłem na konieczność pisania własnych
  18. 18. Potrzeba Założenia Technologie Projekt Realizacja EOP Sposób postrzegania produktu
  19. 19. Potrzeba Założenia Technologie Projekt Realizacja EOP Cykl życia produktu Produkcja - składanie z części, diagnostyka, usunięcie zbędnych elementów Pakowanie - gotowy produkt złożony tylko z części finałowych pakowany jest w pudełko / kontener Dostarczenie - przekazanie do odbiorcy - pod wskazany adres, w określony sposób Każdy z etapów procesu ma jasno określone granice - wejście / wyjście
  20. 20. Potrzeba Założenia Technologie Projekt Realizacja EOP Kompletne rozwiązanie W przypadku produktu złożonego z wielu komponentów, możemy posłużyć się analogią do zakupu zestawu kuchennego: Wszystkie pudełka zawierają komponenty produkty spełniające szereg wymogów Wiemy jak komponenty mają być ze sobą połączone Wiemy jak komponenty powinny być rozmieszczone docelowo w infrastrukturze klienta
  21. 21. Potrzeba Założenia Technologie Projekt Realizacja EOP Przepływ pracy
  22. 22. Potrzeba Założenia Technologie Projekt Realizacja EOP Przepływ pracy
  23. 23. Potrzeba Założenia Technologie Projekt Realizacja EOP Repozytoria W pracy z dużą liczbą repozytoriów może pomóc zastosowanie konwencji: 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 produktu 2 Kod źródłowy obrazu, który będzie zawierał gotowy produkt 3 Kod źródłowy deweloperskiej wersji obrazu dla produktu Przykład foo−source−s e r v i c e −payment foo−image−s e r v i c e −payment foo−image−s e r v i c e −payment−dev
  24. 24. Potrzeba Założenia Technologie Projekt Realizacja EOP Zatrudniamy agentów
  25. 25. Potrzeba Założenia Technologie Projekt Realizacja EOP Zatrudniamy agentów
  26. 26. Potrzeba Założenia Technologie Projekt Realizacja EOP Rozszerzanie obrazów
  27. 27. Potrzeba Założenia Technologie Projekt Realizacja EOP Plan działań 1 Przygotowanie projektu (projektów) do CI 2 Przygotowanie infrastruktury pod CI 3 Przygotowanie samego serwera CI 4 Opracowanie konfiguracji (Build Configurations)
  28. 28. 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 build agent’a): Podłączyć wszystkie wymagane zależności Przeprowadzić diagnostykę Zdemontować zależności niewymagane przez odbiorcę Przygotować paczkę do dystrybucji
  29. 29. 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 -->
  30. 30. Potrzeba Założenia Technologie Projekt Realizacja EOP Budowanie samego projektu Plik build.xml zawiera opis wszystkich operacji - stanowi pomost pomiędzy projektem, a agentem. Wykonywanie build’u $ phing Domyślny build target: build. W każdym komponencie systemu (serwisie etc), który będzie budowany przez serwer CI należy stosować to samo podejście - powtarzalność redukuje złożoność!
  31. 31. 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 docker 4 Zainstalowany docker-compose
  32. 32. Potrzeba Założenia Technologie Projekt Realizacja EOP Pułapka Docker i DeviceMapper Jeżeli używacie sterownika devicemapper, zwróćcie uwagę aby Udev Sync Supported było ustawionena true.
  33. 33. 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ój wyspecjalizowany obraz agent’a, rozszerzający wspomniany wyżej.
  34. 34. Potrzeba Założenia Technologie Projekt Realizacja EOP Docker Hub hub: restart: always image: registry:2 ports: - "5000:5000" environment: TERM: linux REGISTRY_HTTP_TLS_CERTIFICATE: :) REGISTRY_HTTP_TLS_KEY: :) REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm volumes: - "/home/docker-distro/registry/data:/var/lib/registry" - "/etc/ssl/certs:/certs" - "/etc/ssl/private:/keys" - "/home/docker-distro/registry/auth:/auth"
  35. 35. 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
  36. 36. 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: linux TEAMCITY_SERVER: "http://teamcity_server:8111" # your server TEAMCITY_AGENT_NAME: "Alpha" AGENT_HOME_ON_HOST: "/home/teamcity/agent"
  37. 37. 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, szukanie wspólnych mianowników Zdefiniowanie konfiguracji build’u Artefakty! Zdefiniowanie zależności między konfiguracjami Zdefiniowanie triggerów buildów
  38. 38. 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, restart itp). Uruchomienie przy pomocy skryptu pomocniczego Wszystkie dodatkowe zadania (ustawienie monitorowania itp). Wasza infrastruktura wymusi konkretne kroki.
  39. 39. Potrzeba Założenia Technologie Projekt Realizacja EOP No dobra, ale co w przypadku projektu spadkowego?
  40. 40. Potrzeba Założenia Technologie Projekt Realizacja EOP Dziękuję za uwagę! http://linkedin.com/in/ggodlewski grzegorz@sorcerystudio.com @GGodlewski

×