TravisCI & Continuous Delivery,czyli o tym, jak dostarczać szybciej
Maciek Papież, XSolve
Zacznijmy trochę filozoficznie...
“Programista bez wiary jestjak podróżnik bez celu”
"Ja nie wierzę, że po tychmerdżach wszystko zadziała"
Gandalf Szary
Continuous Integration
Martin Fowler pisze...
Continous Integration ma miejsce wtedy, gdy:
1. Build jest zautomatyzowany.
2. Każdy commit z mastera jest budowany.
3. Każdy developer commituje do mastera codziennie.
https://wiki.jenkins-ci.org/download/attachments/73533111/multi-branch.png?version=3
Jenkins może wszystko.
https://wiki.jenkins-ci.org/download/attachments/43713848/Failure.JPG?version=1
Ale kto potrafi go skonfigurować?
3 osobyRosiu, Kamil Zieliński, ja.
Łatwy w konfiguracji
Jest usługą świadczoną w chmurze
Jest bardzo rozpowszechnionyszczególnie wśród OSS
1) Wybierz swoją platformę(php / java / nodejs /
objective-c / go / python...)
2) Zaplanuj swój build● jak ściągnąć zależności?● jak uruchomić testy?
3) Stwórz .travis.yml w repo
4) Podepnij repozytorium do Travisa
Co tam można zrobić?
Budowanie Pull Requestów - out-of-box
Notyfikacje na Slacka - 2 linie
Szyfrowanie wrażliwych danych
Usługi - po 1 liniiDostępne:
● MySQL● PostgreSQL● MongoDB● Apache Cassandra● Elasticsearch● Redis● RabbitMQ● Neo4J● SQLite3
Przykładowa konfiguracja:
(...)
services:- mysql- mongodb- redis
(...)
Tyle, nic więcej ;)
Build matrix
PHP 5.5 PHP 5.6 PHP 7
MySQL 5.5 OK OK FAIL
MySQL 5.6 OK OK FAIL
MySQL 5.5 MySQL 5.6 PostgreSQL 9.3
JDK 7 OK OK OK
JDK 8 FAIL FAIL OK
Kontenery Dockera
Cache'owanie zależnościale sprytne!
Część 2. Ciekawsza ;)
Continuous delivery
Continuous deliveryvs.
Continuous deployment
Delivered!=
Released, deployed
Build pipeline
http://dzikowski.github.io/assets/img/posts/continuous-delivery-deployment-sm.jpg
AWS CodeDeploy
● lekka usługa służąca do deploymentu
● źródło danych - S3 / Github
● inicjalizowanie instalacji
● łatwo podpiąć instancje EC2, można też on-premise
● proste i logiczne skryptowanie przebiegu instalacji
Best practice
● artefakt (np. zip) jest generowany na samym początku
procesu i jest “nieświadomy” środowiska
● rozdzielenie konfiguracji od kodu
● wersjonowanie kodu, konfiguracji, infrastruktury,
schematów bazy danych
● zero manualnych ingerencji w środowisko TEST/PROD
Best practice
● skorzystanie z kontenerów może ułatwić zarządzanie
jednorodnością środowisk
● korzystaj z chmury i jej możliwości
● naucz się AWS CLI ;D
● database refactoring
Database refactoring
● baza danych musi zawsze wspierać wersje
N i N-1 aplikacji
● cel: zero downtime deployments
● http://databaserefactoring.com/ - gotowe przepisy
Database refactoring
Dzięki za uwagę!Pytania?