CI oraz CD w złożonym projekcie o małym budżecie
-
Upload
grzegorz-godlewski -
Category
Small Business & Entrepreneurship
-
view
255 -
download
1
Transcript of CI oraz CD w złożonym projekcie o małym budżecie
![Page 1: CI oraz CD w złożonym projekcie o małym budżecie](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/1.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/2.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/3.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/4.jpg)
Potrzeba Założenia Technologie Projekt Realizacja EOP
![Page 5: CI oraz CD w złożonym projekcie o małym budżecie](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/5.jpg)
Potrzeba Założenia Technologie Projekt Realizacja EOP
![Page 6: CI oraz CD w złożonym projekcie o małym budżecie](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/6.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/7.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/8.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/9.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/10.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/11.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/12.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/13.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/14.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/15.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/16.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/17.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/18.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/19.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/20.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/21.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/22.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/23.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/24.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/25.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/26.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/27.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/28.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/29.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/30.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/31.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/32.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/33.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/34.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/35.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/36.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/37.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/38.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/39.jpg)
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](https://reader031.fdocument.pub/reader031/viewer/2022030319/58e681521a28ab6a5b8b4eb5/html5/thumbnails/40.jpg)
Potrzeba Założenia Technologie Projekt Realizacja EOP
Dziękuję za uwagę!
http://linkedin.com/in/[email protected]
@GGodlewski