SlideShare une entreprise Scribd logo
1  sur  59
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
Antony GUILLOTEAU
@aguilloteau
Takeuchi et Nonaka
(1982)
TODO
Design Code Test Deploy
Design Code Test DeployCode Test Code Test Code Test
Waterfall
Agile
DevOps
Design
Design Code Test Deploy
Waterfall
Design Code Test DeployCode Test Code Test Code Test
Agile
Les 4 valeurs du Manifeste Agile
(2001)
#1 Les individus et leurs interactions
plus que les processus et les outils
#2 Des logiciels opérationnels
plus qu’une documentation exhaustive
#3 La collaboration avec les clients plus
que la négociation contractuelle
#4 L’adaptation au changement plus
que le suivi d’un plan
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
Livrer rapidement
Développer avec la cible
TODO
Monitorer
pour prévenir
Un produit stable
Être résilient
29% des entreprises ont adopté une
démarche DevOps
17% sont en phase de réflexion ou
d’expérimentation
19% utilisent la démarche DevOps pour
toutes leurs applications
Le DevOps en France
Etude IDC – Octobre 2016
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
Agile Development
Continuous Integration
Continuous Delivery
Continuous Deployment
Continuous Operations
DevOps
PORTAI
L
VENTE
PartenairePartenaire
Partenaire
ClientClient
Client
3 équipes SCRUM
Usine logicielle d’entreprise
Livraison tous les 2 sprints
50 Millions de commandes en base
15 Millions de requêtes / jour
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
Agile Development
Continuous Integration
Continuous Delivery
Continuous Deployment
Continuous Operations
DevOps
Automatisation des tests fonctionnels
Plan Code Build Test Release Deploy Operate
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)
}
Zucchini pour suivre les exécutions des
scénarios Cucumber
Automatisation des tests de performance
Plan Code Build Test Release Deploy Operate
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)
}
Agile Development
Continuous Integration
Continuous Delivery
Continuous Deployment
Continuous Operations
DevOps
Architecture multi-composant
ComposantComposant Composant
Plan Code Build Test Release Deploy Operate
Extrait code orchestrateur de release
public 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();
}
});
}
}
Agile Development
Continuous Integration
Continuous Delivery
Continuous Deployment
Continuous Operations
DevOps
Suivi des mises en production
Plan Code Build Test Release Deploy Operate
Agile Development
Continuous Integration
Continuous Delivery
Continuous Deployment
Continuous Operations
DevOps
Supervision et centralisation des logs
Plan Code Build Test Release Deploy Operate
Exemple de requête Spark
val 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
Plan Code Build Test Release Deploy Operate
Aujourd’hui
Une prise de recul
Taux de dispo de 99,5 %
5 bugs bloquants découverts en production
Livraison tous les 2 sprints
Les activités d’un développeur c’est
Agile Development
Continuous Integration
Continuous Delivery
Continuous Deployment
Continuous Operations
DevOps
DevOps
Agile Development
Continuous Integration
Continuous Delivery
Continuous Deployment
Continuous Operations
Le DevOps c’est du dév …
Et avant tout une philosophie
https://goo.gl/forms/YCZbdwMNStBqGgZq2
Merci pour votre feedback

Contenu connexe

Tendances

DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011Henri Gomez
 
Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014Jonathan Martin
 
Meetup DevOps / WebOps Nîmes 20161020
Meetup DevOps / WebOps Nîmes 20161020Meetup DevOps / WebOps Nîmes 20161020
Meetup DevOps / WebOps Nîmes 20161020NimeOps
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Adrien Blind
 
[Oldies] Club client D2SI : DevOps
[Oldies] Club client D2SI : DevOps [Oldies] Club client D2SI : DevOps
[Oldies] Club client D2SI : DevOps Devoteam Revolve
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOpsJeoffrey Bauvin
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOpsMicrosoft
 
Microsoft DevOps Day 2015 02122015 - L'expérience du groupe produit Visual St...
Microsoft DevOps Day 2015 02122015 - L'expérience du groupe produit Visual St...Microsoft DevOps Day 2015 02122015 - L'expérience du groupe produit Visual St...
Microsoft DevOps Day 2015 02122015 - L'expérience du groupe produit Visual St...Samuel Metias
 
Journée DevOps : La boite à outil d'une équipe DevOps
Journée DevOps : La boite à outil d'une équipe DevOpsJournée DevOps : La boite à outil d'une équipe DevOps
Journée DevOps : La boite à outil d'une équipe DevOpsPublicis Sapient Engineering
 
DevOps, quel futur pour les Ops ?
DevOps, quel futur pour les Ops ?DevOps, quel futur pour les Ops ?
DevOps, quel futur pour les Ops ?Ludovic Piot
 
CloudExpo Europe 2017 - DevOps entre client et fournisseur
CloudExpo Europe 2017 - DevOps entre client et fournisseurCloudExpo Europe 2017 - DevOps entre client et fournisseur
CloudExpo Europe 2017 - DevOps entre client et fournisseurLudovic Piot
 
DEVOPS - La synthèse
DEVOPS - La synthèseDEVOPS - La synthèse
DEVOPS - La synthèseCOMPETENSIS
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéZenika
 
#1 cloud-infra-talk- l ops-du-devops
#1 cloud-infra-talk- l ops-du-devops#1 cloud-infra-talk- l ops-du-devops
#1 cloud-infra-talk- l ops-du-devopsEmmanuel Roldan
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryDamien Goldenberg
 
What's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsWhat's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsZenikaOuest
 
NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryZenika
 

Tendances (20)

DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
 
Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014
 
Meetup DevOps / WebOps Nîmes 20161020
Meetup DevOps / WebOps Nîmes 20161020Meetup DevOps / WebOps Nîmes 20161020
Meetup DevOps / WebOps Nîmes 20161020
 
REX Devops Docker
REX Devops DockerREX Devops Docker
REX Devops Docker
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
 
[Oldies] Club client D2SI : DevOps
[Oldies] Club client D2SI : DevOps [Oldies] Club client D2SI : DevOps
[Oldies] Club client D2SI : DevOps
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOps
 
Introduction à DevOps
Introduction à DevOpsIntroduction à DevOps
Introduction à DevOps
 
Microsoft DevOps Day 2015 02122015 - L'expérience du groupe produit Visual St...
Microsoft DevOps Day 2015 02122015 - L'expérience du groupe produit Visual St...Microsoft DevOps Day 2015 02122015 - L'expérience du groupe produit Visual St...
Microsoft DevOps Day 2015 02122015 - L'expérience du groupe produit Visual St...
 
Journée DevOps : La boite à outil d'une équipe DevOps
Journée DevOps : La boite à outil d'une équipe DevOpsJournée DevOps : La boite à outil d'une équipe DevOps
Journée DevOps : La boite à outil d'une équipe DevOps
 
DevOps, quel futur pour les Ops ?
DevOps, quel futur pour les Ops ?DevOps, quel futur pour les Ops ?
DevOps, quel futur pour les Ops ?
 
Presentation-DEVOPS-par-GDG
Presentation-DEVOPS-par-GDGPresentation-DEVOPS-par-GDG
Presentation-DEVOPS-par-GDG
 
CloudExpo Europe 2017 - DevOps entre client et fournisseur
CloudExpo Europe 2017 - DevOps entre client et fournisseurCloudExpo Europe 2017 - DevOps entre client et fournisseur
CloudExpo Europe 2017 - DevOps entre client et fournisseur
 
DEVOPS - La synthèse
DEVOPS - La synthèseDEVOPS - La synthèse
DEVOPS - La synthèse
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery Avancé
 
#1 cloud-infra-talk- l ops-du-devops
#1 cloud-infra-talk- l ops-du-devops#1 cloud-infra-talk- l ops-du-devops
#1 cloud-infra-talk- l ops-du-devops
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous Delivery
 
What's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsWhat's Next Replay - IC / Jenkins
What's Next Replay - IC / Jenkins
 
NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous Delivery
 
REX Openshift à la Poste
REX Openshift à la PosteREX Openshift à la Poste
REX Openshift à la Poste
 

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

Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaPrésentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaZenika
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsNicolas Mussat
 
Self-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et GitlabSelf-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et GitlabJulien Wittouck
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...MongoDB
 
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018Cedric Girard
 
ASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAFrédéric Sagez
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Julien Dubois
 
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...Publicis Sapient Engineering
 
Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...Publicis Sapient Engineering
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache MavenArnaud Héritier
 
Devops for mobile iOS/Android
Devops for mobile iOS/AndroidDevops for mobile iOS/Android
Devops for mobile iOS/AndroidCedric Gatay
 
Déploiement automatique d'app iOS et/ou Android
Déploiement automatique d'app iOS et/ou AndroidDéploiement automatique d'app iOS et/ou Android
Déploiement automatique d'app iOS et/ou AndroidFlorian Chauveau
 
Les méthodes agiles dans TFS
Les méthodes agiles dans TFSLes méthodes agiles dans TFS
Les méthodes agiles dans TFSDenis Voituron
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesVincent Composieux
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueVincent Composieux
 

Similaire à Au secours, mon chef m'a demandé de passer au DevOps (20)

Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - ZenikaPrésentation Gradle au LyonJUG par Grégory Boissinot - Zenika
Présentation Gradle au LyonJUG par Grégory Boissinot - Zenika
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
 
Self-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et GitlabSelf-Service infrastructure pour GCP avec Terraform et Gitlab
Self-Service infrastructure pour GCP avec Terraform et Gitlab
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
Des mises à jour? Emmenez votre application Stitch encore plus loin grâce aux...
 
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
Devoteam REX OpenShift DevOps - Red Hat Roadshow Paris - avril 2018
 
Versioning avec Git
Versioning avec GitVersioning avec Git
Versioning avec Git
 
ASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSA
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
 
Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...Paris Container Day 2016 : Architecture microservices hautement disponible au...
Paris Container Day 2016 : Architecture microservices hautement disponible au...
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Devops for mobile iOS/Android
Devops for mobile iOS/AndroidDevops for mobile iOS/Android
Devops for mobile iOS/Android
 
Déploiement automatique d'app iOS et/ou Android
Déploiement automatique d'app iOS et/ou AndroidDéploiement automatique d'app iOS et/ou Android
Déploiement automatique d'app iOS et/ou Android
 
Les méthodes agiles dans TFS
Les méthodes agiles dans TFSLes méthodes agiles dans TFS
Les méthodes agiles dans TFS
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, Kubernetes
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 

Plus de antony_guilloteau

Scrum cook and go, les astuces de Rémy
Scrum cook and go, les astuces de RémyScrum cook and go, les astuces de Rémy
Scrum cook and go, les astuces de Rémyantony_guilloteau
 
Devops, ça change quoi pour moi développeur ?
Devops, ça change quoi pour moi développeur ?Devops, ça change quoi pour moi développeur ?
Devops, ça change quoi pour moi développeur ?antony_guilloteau
 
Devops chez Voyages-Sncf.com
Devops chez Voyages-Sncf.comDevops chez Voyages-Sncf.com
Devops chez Voyages-Sncf.comantony_guilloteau
 
Scrum : from basic to scaling
Scrum : from basic to scalingScrum : from basic to scaling
Scrum : from basic to scalingantony_guilloteau
 

Plus de antony_guilloteau (6)

Scrum cook and go, les astuces de Rémy
Scrum cook and go, les astuces de RémyScrum cook and go, les astuces de Rémy
Scrum cook and go, les astuces de Rémy
 
Kanban style
Kanban styleKanban style
Kanban style
 
Scrum cook and go
Scrum cook and goScrum cook and go
Scrum cook and go
 
Devops, ça change quoi pour moi développeur ?
Devops, ça change quoi pour moi développeur ?Devops, ça change quoi pour moi développeur ?
Devops, ça change quoi pour moi développeur ?
 
Devops chez Voyages-Sncf.com
Devops chez Voyages-Sncf.comDevops chez Voyages-Sncf.com
Devops chez Voyages-Sncf.com
 
Scrum : from basic to scaling
Scrum : from basic to scalingScrum : from basic to scaling
Scrum : from basic to scaling
 

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

  • 1. Au secours, mon chef m'a demandé de passer au DevOps !
  • 2.
  • 3.
  • 4. 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
  • 6.
  • 7.
  • 10. Design Code Test Deploy Design Code Test DeployCode Test Code Test Code Test Waterfall Agile
  • 11.
  • 12. DevOps Design Design Code Test Deploy Waterfall Design Code Test DeployCode Test Code Test Code Test Agile
  • 13. Les 4 valeurs du Manifeste Agile (2001)
  • 14. #1 Les individus et leurs interactions plus que les processus et les outils
  • 15. #2 Des logiciels opérationnels plus qu’une documentation exhaustive
  • 16. #3 La collaboration avec les clients plus que la négociation contractuelle
  • 17. #4 L’adaptation au changement plus que le suivi d’un plan
  • 18. 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
  • 20.
  • 25. 29% des entreprises ont adopté une démarche DevOps 17% sont en phase de réflexion ou d’expérimentation 19% utilisent la démarche DevOps pour toutes leurs applications Le DevOps en France Etude IDC – Octobre 2016
  • 26. 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
  • 27. Agile Development Continuous Integration Continuous Delivery Continuous Deployment Continuous Operations DevOps
  • 29. 3 équipes SCRUM Usine logicielle d’entreprise Livraison tous les 2 sprints
  • 30. 50 Millions de commandes en base 15 Millions de requêtes / jour
  • 31. 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
  • 32. Agile Development Continuous Integration Continuous Delivery Continuous Deployment Continuous Operations DevOps
  • 33. Automatisation des tests fonctionnels Plan Code Build Test Release Deploy Operate
  • 34. 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) }
  • 35. Zucchini pour suivre les exécutions des scénarios Cucumber
  • 36. Automatisation des tests de performance Plan Code Build Test Release Deploy Operate
  • 37. 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) }
  • 38. Agile Development Continuous Integration Continuous Delivery Continuous Deployment Continuous Operations DevOps
  • 39. Architecture multi-composant ComposantComposant Composant Plan Code Build Test Release Deploy Operate
  • 40.
  • 41. Extrait code orchestrateur de release public 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(); } }); } }
  • 42. Agile Development Continuous Integration Continuous Delivery Continuous Deployment Continuous Operations DevOps
  • 43. Suivi des mises en production Plan Code Build Test Release Deploy Operate
  • 44.
  • 45. Agile Development Continuous Integration Continuous Delivery Continuous Deployment Continuous Operations DevOps
  • 46.
  • 47. Supervision et centralisation des logs Plan Code Build Test Release Deploy Operate
  • 48.
  • 49. Exemple de requête Spark val 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
  • 50. Plan Code Build Test Release Deploy Operate
  • 51.
  • 53. Taux de dispo de 99,5 % 5 bugs bloquants découverts en production Livraison tous les 2 sprints
  • 54. Les activités d’un développeur c’est
  • 55. Agile Development Continuous Integration Continuous Delivery Continuous Deployment Continuous Operations DevOps
  • 56. DevOps Agile Development Continuous Integration Continuous Delivery Continuous Deployment Continuous Operations
  • 57.
  • 58. Le DevOps c’est du dév … Et avant tout une philosophie

Notes de l'éditeur

  1. Remettre DevOps dans le contexte d’agilité Grand principes REX dans mes équipes
  2. L'opéra de Sydney 1963  1973 (10 ans de retard) 7 millions $  102 millions $ (+1457%)
  3. Cycle en V, interprétation
  4. Constat après 30 ans de projets IT
  5. Fervant défenseur du software craftmanship Mon leitmotiv : que tout le monde travaille ensemble en partageant un objectif commun
  6. Scrum master Voyages-sncf Agilité à l’échelle de l’entreprise depuis 2012 (Chaîne Youtube VSC) DevOps objectif d'entreprise depuis plus d'1 an
  7. Co-fondateur cabinet de conseil Pb en entreprise => manque de communication #Agilité #Innovation #Management3.0 #Design #DevOps #Facilitation
  8. Honda leader ➔ Yamaha menace Honda ➔ Honda : 30 nouveaux modèles de moto en 6 mois Imprimante portable Epson Brother en -2ans ➔ 4 ans avant Résultat : la performance dév. nouveaux produits complexes = équipes de petites tailles et auto-organisés, avec des objectifs, et non des tâches.
  9. Conclusion : les équipes ont besoin d'autonomie pour atteindre l'excellence. Equipes autonomes et pluri-disciplinaires pour éviter dépendances externes et goulot d’étranglement
  10. Agilité rapprochement métier / dév
  11. Dev & Ops : des objectifs orthogonaux - Dev (développement) : évolution des systèmes - Ops (exploitation) : garants stabilité et disponibilité des systèmes
  12. DevOps rapprochement dév / ops
  13. 17 spécialistes dont Ken Schwaber et Jeff Sutherland (SCRUM), Martin Fowler (Design Pattern), Kent Beck (Junit) Lecture 16 ans après avec l’œil DevOps
  14. Interaction dev et ops plutôt que ticket JIRA
  15. Une usine plutôt que des procédures de livraison et d'installation
  16. Collaboration avec les Ops plutôt qu’une négociation via DAT en début de projet
  17. Scalling à la demande Modification d’architecture
  18. Coopération : Construire et MCO en commun Livraison : Rapidité du TTM avec fiabilité et stabilité du produit Elaboration : les PF ne doivent pas être un frein à l’innovation et l’innovation de doit pas mettre en péril les PF
  19. - « Idéalement le client voulait mettre en prod … hier » - Mise en production annuelle  Euronet - Concurrence mondiale et plus locale - Être réactif et se différencier (TTM court, expérimentation) - Utilisateurs cross fuseaux horaires ➔ pas de créneau sans downtime pour les installations - Usine logicielle performante pour livrer rapidement et être réactif
  20. Livrer rapidement mais sans faire de régression et s’assurer du bon fonctionnement (fonctionnel et technique)
  21. Environnement similaire du dév à la prod, conf de prod jusqu’aux env de dév Avoir connaissance de l’environnement de production (architecture technique, configuration) infrastructure as a service : Les dév ne sont plus ralentis par la mise à disposition d’environnement Les dev ne ralentissent plus les Ops avec des demandes d’actions sans valeur ajoutée infrastructure as Code (docker) et autres solutions
  22. Etre sensibilisé aux logs : informations, niveau, process derrière chaque niveau  exemple XLLog et déclenchement PAD Le développeur est à mi-chemin entre la connaissance métier et la connaissance technique. Définir et produire des indicateurs pertinents (impact sur le code)
  23. Feature toggle : pas cher si prévu de suite => être sensibiliser et sensibiliser lors des sprints plannings Dark launch OU Canary releases : concevoir son application tel quelle
  24. Loi de Murphy : “Tout ce qui est susceptible de mal tourner tournera nécessairement mal” Se préoccuper de la résilience (ex l’envoi mail) Cf conf de Quentin Cloudbees Faire référence à la conf précédente Netflix OSS
  25. Selon IDC, pourcentage va passer à 50% en 2017 http://www.channelnews.fr/devops-a-vent-poupe-lhexagone-70853
  26. Démarche de transformation : Optimiser ce qui nous prend du temps (Build, Test, Release) Prendre le feedback des Ops (Deploy et Operate) Amélioration continue sur tout le cycle
  27. REX de mon équipe
  28. Portail de distribution offre SNCF Plusieurs clients sur plateforme commune (VSC, BLS, Train line, ...) Plusieurs partenaires (central SNCF, IdCAB, ...)
  29. Sprint de 3 semaines, Dév à Nantes / Ops à Lille Usine logicielle basée sur Jenkins, Rundeck, Puppet TTM 9 semaines sortie de dév
  30. Toutes les commandes de la SNCF Requêtes : devis, vente et après-vente => cible à 75M
  31. Pouvoir tester de manière continue
  32. Démarche BDD pour documenter  nécessite de connaître les cas d’usage Patrimoine de +2500 scénarios Test en continu et priorisation
  33. C’est du code Anecdote un testeur  un développeur avec expertise test
  34. Développement de Zucchini à l’initiative par Pierre
  35. Test de performance  nécessite de connaître les cas d’usage les plus utilisés et les volumétries Test en continu  Pipeline Jenkins 2 Développement outils envoi rapport par mail
  36. C’est du code
  37. Pouvoir builder et releaser de manière continue
  38. Pas micro-service mais muti-composants 1 GIT par composant
  39. Truck factor sur l’intégrateur  rôle tournant sur chaque équipe Intégrateur  développeur mais expertise intégration Résultat : - Difficulté pour release globale à partir de l’usine  création outil maison - Contribution à l’usine logicielle pour spécificités (ex Mongo, Kafka)
  40. C’est du code Citer aussi pipeline Jenkins 2
  41. Pouvoir déployer de manière continue
  42. Accompagner les mises en production : participer aux réunions en amont, connaître les process de MEP Suivre les dashboard : être attentif et réactif
  43. Bon là c’est pas du code
  44. Opérer de manière continue
  45. Fin de l’équipe supervision  Construction des boards et centralisation des logs  Tir de charge Création communauté, 2 mois pour monter en compétences
  46. Création des boards grafana / Montée en compétence sur les différents frameworks (Spark pour map reduce) Contribution à la communauté
  47. Exemple de rapports Grafana
  48. C’est du code
  49. Travail pour rationnaliser les scénarios Gatling Difficulté pour montée en compétence sur l’analyse de métriques JVM Croyance team member multi compétent tombe à l’eau
  50. A l’instar de Netflix en prod Mise en œuvre des chaos monkeys => communauté Plan Reprise Activité sur 2 sites Ex : intervention volontaire en prod
  51. Après 2 ans
  52. Toujours dispo même quand les partenaires sont down Peu d’anomalies découvertes (surtouts fonctionnelles)  rapidité pour patcher Livre bien tous les 2 sprints
  53. Mais c’est quand même du code
  54. Scalabilité (VSC ODV 30 billets/s, 1 TGV 20s)  on y est pas Infra as code  Docker ? Démarche lean  commit to prod Gestion des perturbation dans les équipes  gérer le build et le run Team member multi-compétents  perte expertise, montée en compétence nouveaux NoOps  est-ce qu’on veut aller vers cela ? CONCLUSION : perpétuelle remise en question
  55. Anecdote recrutement  la philosophie n’est pas là  Anecdote matthieu REDIS  feedback de la prod, la philosophie est là 
  56. Devise FCNA : « Celui qui cesse vouloir devenir meilleur cesse déjà d’être bon »