continuous deploymentlichota.pl/continuous_deployment_072017.pdfcontinuous deployment na...
TRANSCRIPT
![Page 1: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/1.jpg)
CONTINUOUS DEPLOYMENTna przykładzie aplikacji w Django
Wojciech Lichota - STX NextLipiec 2017
![Page 3: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/3.jpg)
![Page 4: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/4.jpg)
1. Wstęp
2. Workflow
3. Narzędzia
4. Wyzwania
![Page 5: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/5.jpg)
1. Wstęp
2. Workflow
3. Narzędzia
4. Wyzwania
![Page 6: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/6.jpg)
development testing
Iterative Deployment
development testing
testing testing
DEPLOYMENT
![Page 7: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/7.jpg)
developmenttesting
checkdeploy
Continuous Deployment
![Page 8: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/8.jpg)
![Page 9: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/9.jpg)
STX Next RMS
![Page 10: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/10.jpg)
RMS Team
![Page 11: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/11.jpg)
1. Wstęp
2. Workflow
3. Narzędzia
4. Wyzwania
![Page 12: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/12.jpg)
GIT Workflow
★ jeden branch główny (master)
★ feature branch (oddzielny branch na każdą historyjkę)
★ pull requesty
![Page 13: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/13.jpg)
QA Workflow
unittests code Review testingCI
branch
Developer
Developer
Developer testerautomatic
![Page 14: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/14.jpg)
Deploy Workflow
merge
deploy checkbackup
tester
testerautomaticautomatic
automatictesterDeveloper
![Page 15: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/15.jpg)
1. Wstęp
2. Workflow
3. Narzędzia
4. Wyzwania
![Page 16: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/16.jpg)
Konkurs
![Page 17: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/17.jpg)
JENKINScontinuous integration
Instancje:
★ testing - dla każdego z testerów, na feature branch★ staging - z danymi testowymi★ PR-testing - automatyczne budowanie każdego pull requesta★ live - z danymi produkcyjnymi
![Page 18: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/18.jpg)
JENKINScontinuous integration
Przydatne wtyczki Jenkinsa
★ Violations Plugin - pep8, pylint★ Post build task Plugin - kroki po prawidłowym buildzie
(np. uruchomienie Fabrica)★ Matrix Authorization Strategy Plugin - uprawnienia
(np. kto może wrzucać na produkcję)★ Github Plugin - automatyczne tagowanie★ GitHub Pull Request Builder - automatyczne budowanie PR
Dodatki do Django wspomagające integrację z Jenkinsem:
★ django-nose - raporty odpalenia unittestów(opcja --with-xunit)
★ nosexcover - raport pokrycia testami(opcja --with-xcover)
![Page 19: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/19.jpg)
DOCKER
BUILDOUT
★ Tworzy reprodukowalne środowisko★ Odseparowane sandboxy★ Uproszczenie komend
(opcje uruchomienia w konfiguracji buildouta)
Przydatne recepty:
★ djangorecipe★ collective.recipe.template★ buildout.recipe.uwsgi★ mr.developer
![Page 20: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/20.jpg)
★ Przygotowuje wszystkie zasoby frontendowe
Przykładowe zadania:
★ łączenie plików JS/CSS★ kopiowanie plików (np. obrazków z bibliotek do projektu)★ kompresja JS/CSS★ obfuskacja JS (tylko live)★ uruchomienie jshint, compass
WEBPACKmodulebundler
![Page 21: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/21.jpg)
FABRICremote
execution★ Spięcie kilku komend (np. odpalenie buildout, webpacka,
restarty serwerów) w jedno polecenie★ Uruchomienie wybranych komend na zdalnych serwerach
(poprzez ssh)
![Page 22: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/22.jpg)
SENTRYerror
aggregation★ Zbieranie wszystkich błędów występujących w aplikacji★ Rozwiązanie On-Premise (self hosted)★ Łatwa konfiguracja poprzez bibliotekę Raven★ Wygodne powiadomienia
![Page 23: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/23.jpg)
1. Wstęp
2. Workflow
3. Narzędzia
4. Wyzwania
![Page 24: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/24.jpg)
Restarty aplikcji
Problem Rozwiązanie
Kilka instancji na wspólnym Apache i mod_wsgi. Restart jednej instancji wpływa na chwilową niedostępność innych.
Osobny uWSGI dla każdej instancji.
PROTIP
Użyj Master FIFO do zarządzania procesem uWSGI.while lsof uwsgi_ctl; do
echo Q > uwsgi_ctl
done
![Page 25: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/25.jpg)
Baza danych
Problem Rozwiązanie
Dwa otwarte pull requesty i w obu migracja zmieniająca ten sam model.Utrzymywanie wstecznych migracji, brak konfliktów.
Instancja testing zawsze na świeżej kopii bazy danych.Plik migrations/version.txt z ostatnim numerem migracji.
PROTIP
# drop all tablespsql rms_testing -t -c "select 'drop table \"' || tablename || '\" cascade;' from pg_tables where schemaname = 'public'" | psql rms_testing# copy tablespg_dump rms_staging | psql rms_testing
![Page 26: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/26.jpg)
Revert na live
Problem Rozwiązanie
Jeżeli wrzutka na live spowoduje błędy, potrzebny jest szybki sposób przywrócenia i uruchomienia poprzedniej wersji.
★ Tagowanie kodu★ Backup bazy danych★ wrzutki tylko w godzinach
gdy admin jest “pod ręką”★ Automatyzacja revertu
PROTIP
# backup dbpg_dump -C rms > ~/rms_backup_$(date +"%Y%m%d%H%M").psql
Używaj narzędzia do monitoringu - np. Sentry, Nagios, NewRelic.
![Page 27: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/27.jpg)
Podsumowanie
★ Przedstawione rozwiązanie wystarczające dla niekrytycznych aplikacji
★ Szybciej nowa rzecz na produkcji★ Większa ilość pracy dla testera, mniej dla
dewelopera★ Zawsze zakładaj problemy (jeżeli coś się może
zepsuć - to na pewno się zepsuje)
![Page 28: CONTINUOUS DEPLOYMENTlichota.pl/continuous_deployment_072017.pdfCONTINUOUS DEPLOYMENT na przykładzie aplikacji w Django Wojciech Lichota - STX Next Lipiec 2017](https://reader034.vdocuments.mx/reader034/viewer/2022051810/601bf958a32a6716064549f5/html5/thumbnails/28.jpg)
PYTANIA?