ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék patakino@elte.hu Neumann Konferencia
Mi az a DevOps? Development & Operations
Alapok Szoftverfejlesztés: csapatmunka Csapatmunka támogatása szoftveresen Verziókövetés Build eszközök Continuous Integration (CI) server-ek Release-ek elkészítése/kiadása/tárolása Szoftverek automatikus beüzemelése (deployment) Modern deployment felületek: cloud-ok, konténerek
Problémák A verziókövetés nem garantálja, hogy a repository-ban lévő kód korrekt Honnan derül ki, hogy korrekt-e? Mikor update-lhetik-e a saját másolatukat a fejlesztők? A forráskód mely részét update-lhetik a fejlesztők? Melyik revision-re álljunk vissza, ha az aktuális verzió nem jó? Mi legyen, ha egyik fejlesztői gépen működik egy funkcionalitás, másikon nem? Mikor romlott el, mióta nem jó? Ki a felelőse a problémának? Kinek szóljunk? Egy hiba kijavítása elront-e más funkcionalitást? Hogyan állítható össze egy demó gyorsan?
Continuous Integration szoftverfejlesztési gyakorlat XP fejlesztési módszertan CI eszközök, build server-ek http://martinfowler.com/articles/continuousintegration.html
CI Ciklus
CI Eszközök / Rendszerek CruiseControl Hudson / Jenkins IBM Rational Team Concert Microsoft Team Foundation Server stb.
Jenkins CI eszköz, rendszer Bővíthető, nyílt forrású CI szerver http://jenkins-ci.org/ Jenkins 1 vs Jenkins 2
Job-ok
Jobok futtatása SCM, Software configuration management ( * /5 * * * *) Másik job befejeződésével vagy meghívásával (pipeline) Timer, cron job jelleggel (00 23 * * *) Manuálisan indítva
Console output
Test trend
Test futtatás
Plugin-ok
Release-ek
DevOps alapok
Alkalmazások architektúrájának változása Ford. egységek tárgykódok futtatható Ford. egységek tárgykódok so-k/dll-ek + futtatható Ford. egységek artifact-ok + külön üzemeltethető rendszerek (pl. adatbázisok) Ford. egységek microservice-ek, amelyek hálózaton keresztül kommunikálnak, külön üzemeltethetőek (konfigurációk)
DevOps pipeline
DevOps eszközök, DevOps toolchain
Bevezetés CI DevOps Összefoglalás DevOps eszközök, DevOps toolchain
Speciális eszközök Statikus elemzők Code coverage Performance testing Memory leak detector License-ek ellenőrzése Vulnerability analysis tools, security testing
Speciális eszközök Iaas/PaaS vagrant Deployment eszközök Application Release Automation Configuration Management: pl. Ansible, Puppet, Chef Logging/monitoring: pl. elk-stack/efk-stack Slack
Problémák, lehetőségek Feedback eljuttatása a fejlesztőkhöz Roll-back folyamatok High availability (HA) Health check/self-healing/scalability Canary testing Blue-green deployment Netflix, PagerDuty: ChaosMonkey
Modern deployment környezetek Cloud Private cloud (pl. OpenStack) Public cloud (pl. AWS) Linux containers (LXC) docker kubernetes Mesos
OpenStack komponensek CLI/REST/dashboard compute glance cinder neutron heat mistral stb.
OpenStack
Docker
Kubernetes
Összefoglalás DevOps: a CI kibővítése, Development & Operations CI: Megkönnyíteni a csoportos szoftverfejlesztést DevOps: automatizált deployment, monitoring, feedback DevOps: új deployment felületek és eszközök
Összefoglalás