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
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 pojmowania
wiedzy. Zrób jak najlepiej za pierwszym razem, nie będzie trzeba
do 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 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.
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”
Potrzeba Założenia Technologie Projekt Realizacja EOP
12-factor app
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ą
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)
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, dla
mał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 (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
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)
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
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ę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
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
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 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
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 CI
2 Przygotowanie infrastruktury pod CI
3 Przygotowanie samego serwera CI
4 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 build
agent’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 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ść!
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
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.
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.
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"
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: linux
TEAMCITY_SERVER: "http://teamcity_server:8111" # your server
TEAMCITY_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, szukanie
wspó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, restart
itp).
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/ggodlewski
grzegorz@sorcerystudio.com
@GGodlewski

More Related Content

PPTX
2019.10.08 share con365 2019 open source in azure devops, on the example open...
PDF
University day 2
PDF
university day 1
PPTX
Use Azure DevOps to deploy Azure Function in Docker on Raspberry PI - dotNetC...
ODP
Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...
PDF
Using Docker in CI process
PPTX
The roles and function of educational technology in 2
PPTX
silla de trabajo desplazable para un estudiante con movilidad reducida
2019.10.08 share con365 2019 open source in azure devops, on the example open...
University day 2
university day 1
Use Azure DevOps to deploy Azure Function in Docker on Raspberry PI - dotNetC...
Koniec testowania na sposób “testerski”. Zmiana paradygmatu testowania oprogr...
Using Docker in CI process
The roles and function of educational technology in 2
silla de trabajo desplazable para un estudiante con movilidad reducida

Viewers also liked (20)

PDF
卒団ブログ
PDF
Audyt FATCA
DOC
Mah C V 2016
PPTX
Mi trabajo miguel angel
DOC
ALEC+ASIAMAH+DENKYIRAH
PPTX
Igot.final
PDF
THYMIO-130513
PPTX
My Evaluation Q.2
PDF
THE PORTFOLIO 2016
DOC
Resume 2016
DOC
Skin re gf complex
PPTX
Tecnologie per l'insegnamento
PDF
Reza fazeli portfolio
DOCX
Coalescence Excerpt
PPT
BVServices
DOCX
Proyecto de expresion oral
PPTX
Manuten o do_sistema_operativo-vitor_n_brega_guardado_automaticamente_1
PPTX
POL 215 tutors Absolute Tutors / pol215tutors.com
PPTX
Nowe normy kontroli w instytucjach finansowych
PPTX
La relacion arrendaticia
卒団ブログ
Audyt FATCA
Mah C V 2016
Mi trabajo miguel angel
ALEC+ASIAMAH+DENKYIRAH
Igot.final
THYMIO-130513
My Evaluation Q.2
THE PORTFOLIO 2016
Resume 2016
Skin re gf complex
Tecnologie per l'insegnamento
Reza fazeli portfolio
Coalescence Excerpt
BVServices
Proyecto de expresion oral
Manuten o do_sistema_operativo-vitor_n_brega_guardado_automaticamente_1
POL 215 tutors Absolute Tutors / pol215tutors.com
Nowe normy kontroli w instytucjach finansowych
La relacion arrendaticia
Ad

Similar to CI oraz CD w złożonym projekcie o małym budżecie (20)

PDF
Produkcja aplikacji internetowych
PPTX
DevOps - what I have learnt so far
PPT
Ciągła Integracja W Projekcie - Metodyka I Narzędzia
PDF
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
PPTX
Skok na naderwanym bungee, czyli agile bez automatyzacji
PPTX
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
PPTX
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
PPTX
Jak stworzyć udany system informatyczny
PPT
Extjs & netzke
PDF
Techniczna organizacja zespołu
PDF
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
PPTX
Ciągłe Dostarcznie - Wprowadzenie
PPTX
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
PDF
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
PDF
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
PDF
Praktyczne code reviews - PHPConPl
PDF
Tomasz Głogosz: SharePoint Framework - nowa jakość w client-side development
PPTX
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
PPTX
Testowanie na 101 sposobów
PPTX
Wprowadzenie do MEF w .NET 4.0
Produkcja aplikacji internetowych
DevOps - what I have learnt so far
Ciągła Integracja W Projekcie - Metodyka I Narzędzia
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
Jak stworzyć udany system informatyczny
Extjs & netzke
Techniczna organizacja zespołu
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Ciągłe Dostarcznie - Wprowadzenie
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Praktyczne code reviews - PHPConPl
Tomasz Głogosz: SharePoint Framework - nowa jakość w client-side development
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
Testowanie na 101 sposobów
Wprowadzenie do MEF w .NET 4.0
Ad

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

  • 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. 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. 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. Potrzeba Założenia Technologie Projekt Realizacja EOP
  • 5. Potrzeba Założenia Technologie Projekt Realizacja EOP
  • 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. 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. 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. Potrzeba Założenia Technologie Projekt Realizacja EOP 12-factor app
  • 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. 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. 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. 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. 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. 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. 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. 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. Potrzeba Założenia Technologie Projekt Realizacja EOP Sposób postrzegania produktu
  • 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. 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. Potrzeba Założenia Technologie Projekt Realizacja EOP Przepływ pracy
  • 22. Potrzeba Założenia Technologie Projekt Realizacja EOP Przepływ pracy
  • 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. Potrzeba Założenia Technologie Projekt Realizacja EOP Zatrudniamy agentów
  • 25. Potrzeba Założenia Technologie Projekt Realizacja EOP Zatrudniamy agentów
  • 26. Potrzeba Założenia Technologie Projekt Realizacja EOP Rozszerzanie obrazów
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Potrzeba Założenia Technologie Projekt Realizacja EOP No dobra, ale co w przypadku projektu spadkowego?
  • 40. Potrzeba Założenia Technologie Projekt Realizacja EOP Dziękuję za uwagę! http://linkedin.com/in/ggodlewski [email protected] @GGodlewski