au secours, mon chef m'a demandé de passer au devops

59
Au secours, mon chef m'a demandé de passer au DevOps !

Upload: antonyguilloteau

Post on 16-Apr-2017

66 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Au secours, mon chef m'a demandé de passer au DevOps

Au secours, mon chef m'a demandé de passer au

DevOps !

Page 2: Au secours, mon chef m'a demandé de passer au DevOps
Page 3: Au secours, mon chef m'a demandé de passer au DevOps
Page 4: Au secours, mon chef m'a demandé de passer au DevOps

32% des projets sont réussis 84% des projets dépassent le délai 64% des fonctionnalités développées ne sont pas utilisées

Source : Chaos report 2009

Les projets cycles en V

Page 5: Au secours, mon chef m'a demandé de passer au DevOps

Antony GUILLOTEAU@aguilloteau

Page 6: Au secours, mon chef m'a demandé de passer au DevOps
Page 7: Au secours, mon chef m'a demandé de passer au DevOps
Page 8: Au secours, mon chef m'a demandé de passer au DevOps

Takeuchi et Nonaka(1982)

Page 9: Au secours, mon chef m'a demandé de passer au DevOps

TODO

Page 10: Au secours, mon chef m'a demandé de passer au DevOps

Design Code Test Deploy

Design Code Test DeployCode Test Code Test Code Test

Waterfall

Agile

Page 11: Au secours, mon chef m'a demandé de passer au DevOps
Page 12: Au secours, mon chef m'a demandé de passer au DevOps

DevOpsDesign

Design Code Test Deploy

Waterfall

Design Code Test DeployCode Test Code Test Code Test

Agile

Page 13: Au secours, mon chef m'a demandé de passer au DevOps

Les 4 valeurs du Manifeste Agile(2001)

Page 14: Au secours, mon chef m'a demandé de passer au DevOps

#1 Les individus et leurs interactions plus que les processus et les outils

Page 15: Au secours, mon chef m'a demandé de passer au DevOps

#2 Des logiciels opérationnels plus qu’une documentation exhaustive

Page 16: Au secours, mon chef m'a demandé de passer au DevOps

#3 La collaboration avec les clients plus que la négociation contractuelle

Page 17: Au secours, mon chef m'a demandé de passer au DevOps

#4 L’adaptation au changement plus que le suivi d’un plan

Page 18: Au secours, mon chef m'a demandé de passer au DevOps

Les objectifs du DevOps

#1 Améliorer la coopération entre Dev et Ops#2 Améliorer la livraison du produit#3 Fluidifier l’élaboration du produit

Page 19: Au secours, mon chef m'a demandé de passer au DevOps

Livrer rapidement

Page 20: Au secours, mon chef m'a demandé de passer au DevOps
Page 21: Au secours, mon chef m'a demandé de passer au DevOps

Développer avec la cible

Page 22: Au secours, mon chef m'a demandé de passer au DevOps

TODO

Monitorer pour prévenir

Page 23: Au secours, mon chef m'a demandé de passer au DevOps

Un produit stable

Page 24: Au secours, mon chef m'a demandé de passer au DevOps

Être résilient

Page 25: Au secours, mon chef m'a demandé de passer au DevOps

29% des entreprises ont adopté une démarche DevOps17% sont en phase de réflexion ou d’expérimentation19% utilisent la démarche DevOps pour toutes leurs applications

Le DevOps en France

Etude IDC – Octobre 2016

Page 26: Au secours, mon chef m'a demandé de passer au DevOps

https://www.linkedin.com/pulse/dynamics-devops-adoption-dr-pallab-saha

Plan Code Build Test Release Deploy Operate

Agile Development

Continuous Integration

Continuous Delivery

Continuous Operations

Continous Deployment

Page 27: Au secours, mon chef m'a demandé de passer au DevOps

Agile Development

Continuous Integration

Continuous Delivery

Continuous Deployment

Continuous Operations

DevOps

Page 28: Au secours, mon chef m'a demandé de passer au DevOps

PORTAIL

VENTE

Partenaire

Partenaire

Partenaire

ClientClient

Client

Page 29: Au secours, mon chef m'a demandé de passer au DevOps

3 équipes SCRUM

Usine logicielle d’entreprise

Livraison tous les 2 sprints

Page 30: Au secours, mon chef m'a demandé de passer au DevOps

50 Millions de commandes en base

15 Millions de requêtes / jour

Page 31: Au secours, mon chef m'a demandé de passer au DevOps

Des croyances• Les équipes sont pluridisciplinaires• D’entreprise : Tendre vers le DevOps, les

équipes sont autonomes dans la mise en œuvre

• Personnelles : team member multi-compétents

Page 32: Au secours, mon chef m'a demandé de passer au DevOps

Agile Development

Continuous Integration

Continuous Delivery

Continuous Deployment

Continuous Operations

DevOps

Page 33: Au secours, mon chef m'a demandé de passer au DevOps

Automatisation des tests fonctionnels

Plan Code Build Test Release Deploy Operate

Page 34: Au secours, mon chef m'a demandé de passer au DevOps

Exemple de code cucumber

Scénario: LT103-03-01-Recherche de solution multi-GO avec la date de départ sans tarif à condition d'aller-retour  Soit une recherche de solutions train aller-retour sur un trajet multi GO  Quand j'appelle le service de recherche de solutions tarifaires pour l'aller  Alors des solutions sont remontées  Et des solutions régionales "Pays de Loire" sont présentes

Alors(~'^des solutions (nationales|régionales) (?:"([^"]*)" ?|) sont présentes$'){ String go, String region ->

    if (region == null) {        assert false, "Il faut indiquer une région"    }

    // Récupération de l'OD à partir de son nom fonctionnel    GOsData gOsData = GOsData.getGOsData(go)   searchSolutionsAssertor.assertProposalsContainGo(gOsData.connector)}

Page 35: Au secours, mon chef m'a demandé de passer au DevOps

Zucchini pour suivre les exécutions des scénarios Cucumber

Page 36: Au secours, mon chef m'a demandé de passer au DevOps

Automatisation des tests de performance

Plan Code Build Test Release Deploy Operate

Page 37: Au secours, mon chef m'a demandé de passer au DevOps

Exemple de scénario Gatling

Object SearchScenario {

private val category = csv("category.csv").random private val keyword = csv("keyword.csv").random

val scn : ScenarioBuilder = scenario("Search") .exec().feed(keyword).randomSwitch( 80d -> exec(http("Search by keyword").get("/search?q=${keyword}").check(status.is(200))), 20d -> exec(http("Search by category").get("/search?q=${category}").check(status.is(200))) )}

class GatlingSimulation extends Simulation { val httpConf = http.baseURL("http://localhost:8080/").userAgentHeader("Gatling").disableCaching setUp( SearchScenario.scn.inject(rampUsersPerSec(1) to(20) during(5 minutes)) ).protocols(httpConf)}

Page 38: Au secours, mon chef m'a demandé de passer au DevOps

Agile Development

Continuous Integration

Continuous Delivery

Continuous Deployment

Continuous Operations

DevOps

Page 39: Au secours, mon chef m'a demandé de passer au DevOps

Architecture multi-composant

ComposantComposant Composant

Plan Code Build Test Release Deploy Operate

Page 40: Au secours, mon chef m'a demandé de passer au DevOps
Page 41: Au secours, mon chef m'a demandé de passer au DevOps

Extrait code orchestrateur de releasepublic void createReleaseBranch(Delivery delivery, Execution execution) throws Exception { for (DeliveredComponent component : delivery.getComponents()) { FullGitRepo gitRepo = new FullGitRepo(configuration.getWorkspace(), component.getComponent());

execution.executeOnce(component.getComponent().getName(), "create release branch", () -> { gitRepo.createBranch(computeReleaseBranchName(delivery.getReleaseVersion()), delivery.getBranch()); if (!delivery.isDryRun()) { gitRepo.push(); } });

execution.executeOnce(component.getComponent().getName(), "update pom for next snapshot", () -> { gitRepo.switchToBranch(delivery.getBranch()); gitRepo.hardReset(); File pomFile = gitRepo.findFile("pom.xml"); Properties mavenProps = new Properties(); mavenProps.setProperty("developmentVersion", delivery.getNextSnapshotVersion().toString()); dependenciesService.updateDependenciesInPom(delivery, component, pomFile, delivery.getNextSnapshotVersion()); gitRepo.add("."); gitRepo.commit("[ReleaseTool] update module and dependencies versions in pom.xml to " + delivery.getNextSnapshotVersion()); if (!delivery.isDryRun()) { gitRepo.push(); } }); }}

Page 42: Au secours, mon chef m'a demandé de passer au DevOps

Agile Development

Continuous Integration

Continuous Delivery

Continuous Deployment

Continuous Operations

DevOps

Page 43: Au secours, mon chef m'a demandé de passer au DevOps

Suivi des mises en production

Plan Code Build Test Release Deploy Operate

Page 44: Au secours, mon chef m'a demandé de passer au DevOps
Page 45: Au secours, mon chef m'a demandé de passer au DevOps

Agile Development

Continuous Integration

Continuous Delivery

Continuous Deployment

Continuous Operations

DevOps

Page 46: Au secours, mon chef m'a demandé de passer au DevOps
Page 47: Au secours, mon chef m'a demandé de passer au DevOps

Supervision et centralisation des logs

Plan Code Build Test Release Deploy Operate

Page 48: Au secours, mon chef m'a demandé de passer au DevOps
Page 49: Au secours, mon chef m'a demandé de passer au DevOps

Exemple de requête Sparkval ref_rdd = sc.textFile("/user/logflmp1/2017-02-01/*/log_haproxy*.log")

case class HaProxyLine(frontend: String, backend: String, instance : String, timestamp8601: String, errorCode: String, elapsedTimeMs: String)

val haProxyLines = ref_rdd.map(s => s.split(" ")).map( s => HaProxyLine( s(3).substring(3).replace("~", ""), s(4).substring(0, s(4).lastIndexOf("/")), s(4).substring(s(4).lastIndexOf("/") + 1), s(2), s(6), s(7)) ).toDF().registerTempTable("haproxylines")

val columnsGlobalStats = s"frontEnd, backEnd, instance, splitToGroup(timestamp8601), splitToTZ(timestamp8601)"

val columnsErrors = s"$columnsGlobalStats, errorCode"

val dataFrame = sqlContext.sql( "select frontEnd, backEnd, instance, splitToGroup(timestamp8601), splitToTZ(timestamp8601),

count(*), avg(elapsedTimeMs) " + "from haproxylines group by $columnsGlobalStats") val dataFrameError = sqlContext.sql( "select $columnsErrors, count(*), avg(elapsedTimeMs) " + "from haproxylines where errorCode >= 400 group by $columnsErrors")

val rdd = dataFrame.rdd

Page 50: Au secours, mon chef m'a demandé de passer au DevOps

Plan Code Build Test Release Deploy Operate

Page 51: Au secours, mon chef m'a demandé de passer au DevOps
Page 52: Au secours, mon chef m'a demandé de passer au DevOps

Aujourd’huiUne prise de recul

Page 53: Au secours, mon chef m'a demandé de passer au DevOps

Taux de dispo de 99,5 %

5 bugs bloquants découverts en production

Livraison tous les 2 sprints

Page 54: Au secours, mon chef m'a demandé de passer au DevOps

Les activités d’un développeur c’est

Page 55: Au secours, mon chef m'a demandé de passer au DevOps

Agile Development

Continuous Integration

Continuous Delivery

Continuous Deployment

Continuous Operations

DevOps

Page 56: Au secours, mon chef m'a demandé de passer au DevOps

DevOps

Agile Development

Continuous Integration

Continuous Delivery

Continuous Deployment

Continuous Operations

Page 57: Au secours, mon chef m'a demandé de passer au DevOps
Page 58: Au secours, mon chef m'a demandé de passer au DevOps

Le DevOps c’est du dév …Et avant tout une philosophie

Page 59: Au secours, mon chef m'a demandé de passer au DevOps

https://goo.gl/forms/YCZbdwMNStBqGgZq2

Merci pour votre feedback