SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (20)

卒団ブログ
卒団ブログ卒団ブログ
卒団ブログ
 
Audyt FATCA
Audyt FATCAAudyt FATCA
Audyt FATCA
 
Mah C V 2016
Mah C V 2016Mah C V 2016
Mah C V 2016
 
Mi trabajo miguel angel
Mi trabajo miguel angelMi trabajo miguel angel
Mi trabajo miguel angel
 
ALEC+ASIAMAH+DENKYIRAH
ALEC+ASIAMAH+DENKYIRAHALEC+ASIAMAH+DENKYIRAH
ALEC+ASIAMAH+DENKYIRAH
 
Igot.final
Igot.finalIgot.final
Igot.final
 
THYMIO-130513
THYMIO-130513THYMIO-130513
THYMIO-130513
 
My Evaluation Q.2
My Evaluation Q.2My Evaluation Q.2
My Evaluation Q.2
 
THE PORTFOLIO 2016
THE PORTFOLIO 2016THE PORTFOLIO 2016
THE PORTFOLIO 2016
 
Resume 2016
Resume 2016Resume 2016
Resume 2016
 
Skin re gf complex
Skin re gf complexSkin re gf complex
Skin re gf complex
 
Tecnologie per l'insegnamento
Tecnologie per l'insegnamentoTecnologie per l'insegnamento
Tecnologie per l'insegnamento
 
Reza fazeli portfolio
Reza fazeli portfolioReza fazeli portfolio
Reza fazeli portfolio
 
Coalescence Excerpt
Coalescence ExcerptCoalescence Excerpt
Coalescence Excerpt
 
BVServices
BVServicesBVServices
BVServices
 
Proyecto de expresion oral
Proyecto de expresion oralProyecto de expresion oral
Proyecto de expresion oral
 
Manuten o do_sistema_operativo-vitor_n_brega_guardado_automaticamente_1
Manuten o do_sistema_operativo-vitor_n_brega_guardado_automaticamente_1Manuten o do_sistema_operativo-vitor_n_brega_guardado_automaticamente_1
Manuten o do_sistema_operativo-vitor_n_brega_guardado_automaticamente_1
 
POL 215 tutors Absolute Tutors / pol215tutors.com
POL 215 tutors Absolute Tutors / pol215tutors.comPOL 215 tutors Absolute Tutors / pol215tutors.com
POL 215 tutors Absolute Tutors / pol215tutors.com
 
Nowe normy kontroli w instytucjach finansowych
Nowe normy kontroli w instytucjach finansowychNowe normy kontroli w instytucjach finansowych
Nowe normy kontroli w instytucjach finansowych
 
La relacion arrendaticia
La relacion arrendaticiaLa relacion arrendaticia
La relacion arrendaticia
 

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

Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
DevOps - what I have learnt so far
DevOps - what I have learnt so far DevOps - what I have learnt so far
DevOps - what I have learnt so far Wojciech Barczyński
 
Ciągła Integracja W Projekcie - Metodyka I Narzędzia
Ciągła Integracja W Projekcie - Metodyka I NarzędziaCiągła Integracja W Projekcie - Metodyka I Narzędzia
Ciągła Integracja W Projekcie - Metodyka I NarzędziaPaweł Harajda
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...Infoshare
 
Skok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacjiSkok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacjiWitold Bołt
 
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiInfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiJIT Solutions
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzkeGaldoMedia
 
Techniczna organizacja zespołu
Techniczna organizacja zespołuTechniczna organizacja zespołu
Techniczna organizacja zespołuintive
 
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]Droptica
 
Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieArtur Radosz
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVCQuick-Solution
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wojciech Barczyński
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiGrzegorz Bartman
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Tomasz Głogosz: SharePoint Framework - nowa jakość w client-side development
Tomasz Głogosz: SharePoint Framework - nowa jakość w client-side developmentTomasz Głogosz: SharePoint Framework - nowa jakość w client-side development
Tomasz Głogosz: SharePoint Framework - nowa jakość w client-side developmentSharePoint Saturday Warsaw
 
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...Michal Furmankiewicz
 
Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Maciej Zbrzezny
 

Ähnlich wie CI oraz CD w złożonym projekcie o małym budżecie (20)

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

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 grzegorz@sorcerystudio.com @GGodlewski