DevOps Jef De Smedt ẞeta VZW
Beta VZW Opleidingen werkzoekenden sinds 1993 Opleidingen werknemers ism Cevora sinds 2001 Cursusuren 9:00-12:30 13:00 16:30 Cevora: zie presentatie
Kennismaking Naam Bedrijf(naam + activiteiten) Functie Ervaring met development, operations, devops Verwachtingen
Doelgroep Dev Ops
Cargo Cult
Overzicht Inleiding Evoluties in software productie Concepten en termen Wat is DevOps Overzicht tools
Definities Devops is a cultural movement that changes how individuals think about their work, values the diversity of work done, supports intentional processes that accelerate the rate by which businesses realize value, and measures the effect of social and technical change. Jennifer Davis, Katherine Daniels Effective Devops
Definities DevOps (a clipped compound of development and operations) is a term used to refer to a set of practices that emphasizes the collaboration and communication of both software developers and other information-technology (IT) professionals while automating the process of software delivery and infrastructure changes. Wikipedia
Vacatures Devops Engineer Ervaring met Puppet, Script- en automatiseringservaring met PHP, Python, Shell, Ervaring met Linux/BSD-systeembeheer Devopsy disciplines: Continuous Integration, Continuous deployment, Infrastructure as code deployment & automation engineer, helpt de ontwikkelteams in taken zoals release branching, build configuraties, deployments, automatiseert zoveel als mogelijk d.m.v. bash scripting / Jenkins / Amazon Opsworks,
Software ontwikkeling Programcode.wikidot.com
10+ deploys Per Day: Dev and Ops Cooperation at Flickr (Velocity conference, 2009)
En in 2016
Gartner hype cycle Jeremykemp at English Wikipedia [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons
Development Operations Nerd Little bit weird Thinks all the time Sits closer to the boss Bastard operator from Hell Pulls levers and turns knobs Easily excited Yells a lot in emergencies Mr. Spock: By NBC Television (ebay item photo front photo back press release) [Public domain], via Wikimedia Commons Mr. Scott: By NBC Television (ebay item photo front photo back) [Public domain], via Wikimedia Commons
Evolutie van software productie Waterval model
Evolutie van software productie: ITIL By Annant2015 (Own work) [CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0)], via Wikimedia Commons
Evolutie van software productie: Scrum Scrum is één van de technieken die deel kunnen uitmaken van Agile Software development By Lakeworks (Own work) [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC BY-SA 4.0-3.0-2.5-2.0-1.0 (http://creativecommons.org/licenses/by-sa/4.0-3.0-2.5-2.0-1.0)], via Wikimedia Commons
Evolutie van software productie: Lean Eliminate waste Amplify learning Decide as late as possible Deliver as fast as possible Empower the team Build integrity in See the whole Half afgewerkt werk Onnodige features Opnieuw dingen moeten leren Onnodige overdrachten tussen afdelingen Task switching Vertragingen Fouten Mary & Thomas Poppendieck Mustafasari from tr [GFDL (http://www.gnu.org/copyleft/fdl.html), GFDL (http://www.gnu.org/copyleft/fdl.html) or CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0/)], via Wikimedia Commons
The three ways Systems thinking: flow Amplify feedback Culture of Continual experimentation and learning
Flow Dev Ops
Feedback Dev Ops
Experiment Dev Ops
CAMS Culture Automation Measurement Sharing
Concepten en termen (pag 10) (Dev) Versiecontrole Test Driven development Application Deployment Continuous Integration Continuous Delivery Continuous Deployment
Concepten en termen(pag 11) (Ops) Configuration Management Cloud Computing Infrastructure Automation Artefact beheer Containers
En dan devops Code Build Integrate Test Release Deploy Operate Agile Continuous Integration Continuous Delivery Continuous Deployment DevOps
Foute ideeën over DevOps DevOps gaat alleen over de samenwerking tussen ontwikkelaars en systeembeheerders Er is een DevOps team Er zijn DevOps ingenieurs er is maar één manier om aan DevOps te doen DevOps gaat over tools/automation
De vier pijlers van DevOps Devops Collaboration Affinity Tools Scaling
De vier pijlers van DevOps Devops Tools Collaboration Affinity Scaling
De vier pijlers van DevOps Collaboration Affinity Scaling
Tools: alles is code Continuous Delivery Source code control Code building tools Code testing Deployment Monitoring Issues tracking
Continuous delivery: build Developers Versiebeheer Buildserver Artefact repository Ontwikkelen in een omgeving die zoveel mogelijk op productie lijkt + deployment servers Bewaren van code Maar ook bewaren van configuraties van servers Continuous integration: Wijziging van code => code kopiëren, compileren, testen Bewaren van resultaat van builds + versie informatie + resultaat van package managers
Continuous delivery: test en productie tester Test server Staging server Production server Integratie testen, performance testen Test omgeving moet zoveel mogelijk lijken op productie. Krijgen code van artefact repository Laatste stap voor productie. Kopie van productieserver In het ideale geval vervangen we de productie servers door een staging server
Continuous integration Single source repository Automate the build Make build self testing Everyone commits to the mainline every day Every commit builds the mainline on an integration machine Keep the build fast Make it easy for everyone to get the latest executable Make sure everyone can see what is happening Test in a clone of the production environment Automate deployment
Continuous delivery doesn t mean every change is deployed to production ASAP. It means every change is proven to be deployable at any time. Carl Caum Tweet 2013
Software architectuur Architectuur moet kleine veranderingen mogelijk maken Principe separation of concerns (modulair) Weinig coupling, veel cohesion tussen modules Tier architectuur: presentation, application, data access Tegenwoordig ook dikwijls micro services waarbij de verschillende lagen uitgesplitst zijn in kleinere services Ook de testability van code is tegenwoordig belangrijk om automatische testing mogelijk te maken (test driven devel helpt)
Everything is code Devs schrijven code (dat is dus zeker code) Ops schrijven in een devops omgeving ook code: alle configuratie moet uitgedrukt worden in code (niets meer op papier of in de hoofden) Elke wijziging in de configuratie moet gebeuren via code => niemand mag aanloggen op een server om het risico van wijzigingen buiten het configuratiemanagement systeem te vermijden. => versiebeheer van code is heel belangrijk Controle over wat wordt aanvaard: via pull requests
Source code control: git flow
Versies: semver.org Elke artefact moet een versienummer hebben Een versienummer bestaat uit: Major: nieuw nummer => grote veranderingen in code Minor: nieuw nummer => backward compatible (geen veranderingen in interface) Bug fix: nieuw nummer => bug fix die wordt uitgebracht, geen wijziging in functionaliteit Build: nieuw nummer => nieuwe build
Code building Code compileren Linting Unit testing Generatie van artefacten voor deployment Tools: Make (C, C++) Maven, ant (Java) Grunt (JavaScript) MSBuild (.Net) Build server: Jenkins (opvolger van Hudson), Travis CI, Buildbot, Go, Gitlab Resultaat is een package:.ear/war/jar(java),.rpm(red hat),.deb (debian),.msi(windows),.dmg(apple)
Code building: dependencies Afhankelijk van Artefacts zijn afhankelijk van ander artefacts, meer nog: van een bepaalde versie van een artefact artefact1 artefact2 We kunnen alle artefacten (+ hun versies) bewaren in de repository Tools zoals maven(java), grunt(javascript), nuget(.net) kunnen informatie uit een repository halen Artefact2 V1 artefact3 Artefact2 V2
Continuous integration De bedoeling van integration is dat alle code(en configuratie) wordt samengevoegd tot één geheel. Een integratie wordt automatisch gebuild en wordt vervolgens getest (regression testing, manuele testing) Wanneer integrations te ver van elkaar liggen, loopt men het risico dat er grote discrepanties optreden die moeilijk op te lossen zijn Soms is er een mentale barrière bij developers om hun code te laten integreren. In een Devops omgeving moet code integreren even natuurlijk zijn als code builden (opleiding: bij Etsy deployen nieuwe medewerkers al op de eerste dag code in productie)
Code quality Unit tests kunnen automatisch uitgevoerd worden na een succesvolle build Maar we kunnen ook de kwaliteit van software laten testen (meestal via nightly builds omdat het toch meer resources vraagt) Via een dashboard kunnen mensen op de hoogte worden gehouden van de kwaliteit
Configuration management tools Chef Puppet Ansible SaltStack Cloudformation Terraform Code Open Source Open Source Open Source Open Source Closed Source Open Source Cloud All All All All Alleen AWS All Type Config Mgmt Config Mgmt Config Mgmt Config Mgmt Orchestration Orchestration Infrastructure Mutable Mutable Mutable Mutable Immutable Immutable Language Procedural Declarative Procedural Declarative Declarative Declarative Architecture Client/Server Client/Server Client only Client/Server Client only Client only