Initiation de la transition DevOps :
Orientation cloud / SaaS pour l'outillage :
Poursuivre la transition DevOps :
« DevOps est un ensemble de pratiques qui visent à réduire le Time to Market et à améliorer la qualité des produits logiciels, en réinventant la coopération entre DEV et OPS. DevOps, c’est un modèle d’organisation, une culture, un assemblage de processus, d’outils et de patterns »
Octo Technology, 2018
L'audit ne couvre pas les dimensions culturelle et organisationnelle de la transition DevOps.
Accélération du processus permettant d'apporter de la valeur à l'utilisateur
Automatisation
Outillage
Déploiement continu
Automatisation / Outillage
CI / CD
La mise en place de DevOps à la DSI de la ville de Nouméa s’arrête aujourd’hui à l’intégration continue
«
L'intégration continue est un ensemble de pratiques utilisées en génie logiciel consistant à vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression dans l'application développée.
»
Source Wikipédia
Objectifs :
Structurant
La transition DevOps est abordée de manière progressive et a permis de mettre en place les premiers éléments de l'automatisation du processus de production logicielle très rapidement.
Le fonctionnement de l'ensemble de cette chaine de production est opérationnel et partagé par l'ensemble des collaborateurs.
Les équipes travaillent au renforcement continu des pratiques (en cours : testing, logging...)
Il faut envisager de renforcer les pratiques sur :
La frontière entre les bonnes pratiques et les points de vigilance peut être ténue. Il revient à la DSI de la Ville de Nouméa de déterminer les priorités qu'elle souhaite adopter en regard des actions proposées.
Les points dits structurants sont des points à fort impact sur ce qui est déjà mis en place et dans la perspective de poursuivre l'industrialisation de la fabrique logicielle.
Ils sont au nombre de deux :
L’utilisation de Git et en particulier le modèle de branches n’est pas clairement défini et les pratiques des développeurs ne sont pas homogènes.
La formalisation d'un modèle de branches est structurant dans la mise en oeuvre de la fabrique logicielle par la contextualisation des opérations à déclencher en se rapprochant des différents environnements à adresser :
Le modèle de branche proposé repose sur le modèle Git Flow et est outillé.
Il peut ouvrir des champs supplémentaires d'automatisation de tâches connexes comme :
Déploiement des applications
Les procédures de déploiement des applications sont différentes entre le cycle d'intégration et les cycles suivants (qualification et production).
Déploiement des applications
L'expression « bonnes pratiques » désigne, dans un milieu professionnel donné, un ensemble de comportements qui font consensus et qui sont considérés comme indispensables par la plupart des professionnels du domaine.
langages
Utilisation de :
- Java, et
- Kotlin
Même si cela est nativement possible, il faut rester vigilant sur le mixage de ces deux langages pour lesquels l'interopérabilité n'est pas garantie à 100%.
Langages
testing
La stratégie de test est actuellement définie comme suit :
"(…)
Tests unitaires
(…)"
testing
La définition a une portée limitée et le second point contestable. Les tests ne doivent pas être mis en oeuvre en vue d'obtenir un bon score sur un indicateur, mais pour vérifier le bon fonctionnement de l'application.
Plus globalement, l'assurance qualité sur l'ensemble d'un projet n'est pas clairement définie (mais il y a des travaux en cours sur la partie testing).
testing
testing
Type de test | Granularité | Complexité | Exemple d’outillage |
---|---|---|---|
Test unitaire | Très fine : une unité logique de code | Très simple | xUnit |
Test d’intégration | Une partie de l’application rassemblant plusieurs unités logiques de code | Simple | xUnit |
Test d’architecture | Fonction de la portée des tests | Simple | ArchUnit |
Test de bout en bout | Application complétement intégrée | Complexe | ZATS (spécifique ZK) |
TestCafe | |||
Test de montée en charge | Application et environnement de test à l’identique de la production | Complexe | Outils spécialisés |
testing
Apache Maven
Les projets sont pilotés à l'aide de l'outil Maven.
Son utilisation peut être renforcée pour :
Apache Maven
Maven
Spring Boot
Ce point est à mettre en rapport aux procédures de déploiement des applications dans les différents environnements et concerne la gestion de la configuration desdites applications d'une part, et l'utilisation des outils de monitoring fournis par le framework Spring d'autre part.
Il faut utiliser tous les apports du framework Spring, ici encore avec l'objectif d'homogénéiser les pratiques et de sécuriser les configurations.
Spring Boot
Java - le type Enumeration
Le choix de la DSI de la ville de Nouméa est de stocker en base les valeurs des énumérations Java et de contrôler au démarrage des applications la cohérence de ces données avec les valeurs de chaque type Enumeration.
Il faut noter qu'une méthode de neutralisation de la vérification au démarrage a été mise en place !
Java - le type Enumeration
Cette stratégie, si elle reste possible, est un contresens vis-à-vis du langage Java : "An enum type is a special data type that enables for a variable to be a set of predefined constants.".
Elle impose une double maintenance avec d'éventuels redressements de données par l'utilisation de l'ordinal (mécanisme interne au type Enumeration).
Java - le type Enumeration
Message de commit Git
Les messages de commit Git ont une importance souvent sous-estimée. Leur rédaction, et surtout leur précision est insuffisamment formalisée.
La documentation de l'outil fournit des éléments à mettre en oeuvre dans les messages de commit, et ce même s'il n'y contraint pas.
Message de commit Git
Exemple de modèle :
type(subject | scope): short description
[ (optional)
Long description
(what & why instead of how)
]
[ (optional)
- link to ticketing tool
- breaking changes
]
Message de commit Git
README.md
Le fichier README est le point d'entrée pour toute personne devant intervenir sur un projet (au même titre que le reste de la documentation).
Toute documentation incluse dans le projet doit "vivre" avec le projet.
Elle devrait donner des indications telles que :
README.md
README.md - exemple
README.md
Les points suivants, sans minimiser leur importance, sont des points de vigilance.
Version de Java à élever vers la 11 LTS.
Si le modèle en couches de l'architecture applicative doit être mis en oeuvre de manière stricte, il est possible d'en valider le respect par des tests spécialisés (cf. slide sur la partie testing).
Architecture applicative
Les bases de données de la DSI de la ville de Nouméa sont des bases PostgreSQL.
Les tests utilisent une base H2 exécutée en mémoire et en mode de compatibilité PostgreSQL.
Il est ici aussi possible de renforcer les tests en vérifiant en préalable à l'exécution d'autres tests que les migrations de bases de données effectuées à l'aide de l'outil liquibase sont opérationnelles.
L'utilisation de liquibase doit répondre aux règles :
Base de données
Les environnements de développement intégrés permettent de prendre en charge :
- des greffons (plugins),
- des configurations relatives aux conventions et normes de développement
- ...
EDI
La stratégie de transition DevOps doit être partagée par l’ensemble des collaborateurs. Elle peut être découpée en étapes, chacune d’entre-elles en objectifs si possible timeboxés.
Les procédures et automatismes déjà en place doivent être revus et corrigés des bonnes pratiques, en particulier dans le processus de développement, dans le but d’homogénéiser ces automatismes et de s’aligner au plus tôt à la cible.
Les choix effectués, aussi bien dans les pratiques que pour l’outillage, doivent être conduits par les besoins et non l’inverse. Une attention particulière doit être apportée à l’utilisation d’outils en mode SaaS, pour lesquels les évolutions ne sont pas maîtrisées, au regard de la stabilité – et donc de la maîtrise - du processus dans le temps.