Une pipeline sans queue ni tête - Acte 3

Julien Alborghetti - 2/6/2023, 11:14:31 AM0 commentaire

Amis Gaulois, bon retour parmi nous ! Non sans savoir que parfois les exceptions viennent confirmer les règles, il est temps de révéler la grande exception que j'évoque dans l'acte second. Un élément qui ne peut être forgé d'aucun objet-magique. L'élément que ni Luc Besson ni Bruce Willis n'oserait faire figurer dans cette Pipeline sans queue ni tête. J'ai nommé : la version. Non ! Pas l'aversion, n'exagérons rien, mais bien la version, la seule, l'unique, LA vraie. Au passage, tous ceux qui ont répondu Lilou peuvent sortir, votre prix de consolation est sur la table, en sortant à droite. Une belle encyclopédie Larousse. Et non, encore non ! Mon nom n'est pas Lepers. Et si votre aversion pour les exceptions se fait à nouveau sentir, et bien il parait prudent d'éviter de regarder en direction d'un miroir, de peur de n'y apercevoir d'affligeantes banalités. Mais non, je ne suis pas de mauvaise humeur ! Je cherche différents moyens pour ne plus être amené à divulguer des informations de la plus haute sensibilité sur des canaux publiques.


Je suis navré de la rudesse de cette reprise. Ces temps-ci, je suis un peu sur les nerfs. C'est sans doute lié à l'arrêt de mon auto-médication. Et au fait que je me sente de plus en plus seul. Les autres effets secondaires sont désormais supportables, et les médecins ont bon espoir que j'écrive progressivement de nouvelles phrases à la deuxième personne du pluriel. En attendant, la solitude s'accroche à mes soirées comme ce morceau de scotch obstiné, s'accroche de doigts en doigts, à chaque tentative de s'en débarrasser. Pour dire vrai, seul l'abandon à l'écriture m'apporte un tant soit peu de réconfort. Alors restez ! De manière publique ou non, continuons. Suivons la voie de briques dorées, et poursuivons ensemble, les folles aventures de la Pipeline sans queue ni tête.


## Un instant


Comment diable peut-on distribuer quel contenu que ce soit, sans version ? Au-delà de n'avoir strictement aucun sens, c'est carrément une hérésie. Pourquoi renoncé à la traçabilité, alors que l'Agilité et le DevOps suggèrent tous deux de tout conserver, de tout archiver, et naturellement, de versionner tout ce qui est conservable.


J'ai maintes et maintes fois prescrit à mes stagiaires de tout mettre dans un contrôleur de source. Absolument tout : le code, la liste des dépendances, les tests, la doc, et même les outils qui permettent d'exporter la liste des changements. On y colle tout dans ces contrôleurs de source ! Le code de conduite, le guide de contribution, les contrats associés au Pull Request, et même l'adresse du médecin le plus proche, et le numéro des pompiers. On ne sait jamais !


Et comme si cela n'était pas suffisant, en plus de tout archiver, il faut archiver de manière conventionnelle. Pas le droit de coller les étiquettes n'importe comment, ou dans un autre sens. Même pour les étiquettes, il faut suivre des règles strictes. Et ces règles bien sûr, doivent figurées dans le contrôleur de source. Depuis tant d'année que nous nous devons, bons développeurs que nous sommes, de cultiver une sorte de maniaquerie de l'archivage, il nous faut renoncer à versionner notre précieuse Pipeline ! J'en perd la tête, et bientôt les légumes ! Alors par pitié, abrégez cette souffrance, et expliquez-vous !


Explication, me voici ! En réalité les objets-magiques ne doivent pas décrire la version car celle-ci est déjà intégrée à cette précieuse Pipeline. La pauvre, elle n'a ni queue ni tête, vous n'allez pas en plus lui arracher la version, comme vous l'avez arrachée à ce pauvre Henri, en plein chant ! Souvenez-vous.


> Qu'elles m'admirent qu'elles me tuent ! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuu !

> Qu'elles s'arrachent ma vers... ! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuu Huuuuuuuuuuuuuuuuuuuuuuuuuuuuu !


L'humour amadoue parfois les confidences, alors, découvrons par quelle prouesse cette version ne doit donc figurer nul part, et pourtant être disponible en tout lieu, en tout script, en toute tâche. Une version qui échappe à la perception comme à l'intelligible, et qui pourtant, surpasse le reste des objets-magiques. Alors, serions-nous en présence...


D'une réminiscence-version


Eh bien oui ! Il nous faudra trouver un moyen de ne jamais écrire cette version, et pourtant, de la rendre disponible en tout point de l'esprit. Je révèlerais bien comment réaliser une telle prouesse, mais ces derniers temps la mémoire me fait cruellement défaut. Aussi longtemps puisais-je m'en souvenir, cette version nous accompagnait tout au long de la conception de cette précieuse Pipeline. Était-elle en tête ou en queue de ce bolide qui à vive allure, nous conduit droit vers sa disparition tragique. Tout jurait-il que cette version s'est bel et bien dématérialisée, comme par enchantement. Quelle règle de la validation enchantée a bien pu dézinguer cette version ? Qui d'entre nous l'a limogée pendant ses congés ? Ne sachant que faire d'autre, nous avons invoquer cette version, de différentes manières...


- bash: |

  echo "${{ version }} es-tu là ?"

  echo "${{ majeure }} es-tu là ?"


> Je ne vois ni la version qui poudroie, ni la majeur qui verdoie.


Sœur Anne, met la en veilleuse, s'il te plait.


> Si tu es là tape trois fois...


- job: MadameIrma

  steps:

  - bash: |

    echo "$(version) es-tu là ?"

    echo "$(majeure) es-tu là ?"

    echo "$(mineure) es-tu là ?"

  env:

    version: ${{ format('{0}.{1}', variables.majeure, variables.mineure }}

    majeur: ${{ variables.majeure }}

    mineur: ${{ variables.mineure }}


Ou pas !


> De soie rouge ou de tissu blanc ? Accrochée au rétroviseur es-tu là ?


- job: MadameSeena

  dependsOn: RéminiscenceVersion

  steps:

  - bash: |

      echo "$(version) es-tu là ?"

      echo "$(majeure) es-tu là ?"

      echo "$(mineure) es-tu là ?"

      echo "$(patchée) es-tu là ?"

    env:

      version: $[ dependencies.RéminiscenceVersion.outputs['Version.MajeurMineurePatchée'] ]

      majeure: $[ dependencies.RéminiscenceVersion.outputs['Version.Majeure'] ]

      mineure: $[ dependencies.RéminiscenceVersion.outputs['Version.Mineure'] ]

      patchée: $[ dependencies.RéminiscenceVersion.outputs['Version.Patchée'] ]


C'est alors que la version est apparut. Elle était bien parmi nous. Sans que personne ne comprenne par quelle supercherie, par quelle astuce. Elle persistait. Mieux encore, à chaque lancement de pipeline, elle se transformait. Progressivement elle évoluait. Parfois sa majeure augmentait. D'autres fois sa mineure s'incrémentait d'un pas. Et toujours son dernier numéro subissait d'étranges mutations. Cette version est pleine de surprises. Elle demeure pourtant en harmonie avec l'équipe. Si immatérielle soit-elle. Sans qu'aucun de nous ne puisse l'influencer, nous avons appris à nous y habituer, à parfois même, la deviner.


Elle disparait sans cesse, mais cultive une dépendance à l'apparition. Elle disparait, mais se matérialise pourtant en l'environnement de toute tâche. Alors nous avons trouvé une belle manière de l'affichée. Et avec elle toutes les versions du monde, en caractères dupliqués, symboles de la magnificence de celle que l'on reconnait au milieu de toutes, la réminiscence-version de notre Pipeline sans queue ni tête. Je ne suis pas prêt de l'oubliée. Elle était ainsi.



> Qui a dit que cette version sonne comme une vessie de catin géante !

> Enfin ! Un peu de dignité dans vos calembours. Tout de même !


Rappelons qu'il n'y a pas de DevOps sans Rex, alors effectuons un retour d'expérience interactif


Appréciez-vous ce conte ? Des objets magiques qui décrivent tous les scénarios d'un imaginaire conceptuellement professionnel. Une validation enchantée qui vous enveloppe d'effets protecteurs multiples. Enchantement qui de par ses propres commentaires, permet un rêve d'observabilité. Un songe bien au-delà des nuages, avec en guise de sémaphore, une réminiscence-version. Seule lueur qui nous rappelle, lorsque l'on regarde l'immensité du ciel, qu'au loin, se tient encore l'espoir, d'une réalité cohérente.


Vous avez bien raisons. L'univers lui-même est un mystère, qui renferme bien des mystères. Et vous vous demandez peut-être ce qui fait le succès faramineux de cette précieuse Pipeline dont on ne peut apercevoir pourtant ni la queue, ni la tête. Patience, j'y viens. Car il me faut encore parler des actes de cette précieuse Pipeline, qui pour le moment ne semble avoir compilé aucune source, et encore moins déployé le moindre artéfact. Serait-elle insensible à l'état de l'art ? Cet art insufflé par les pipelines de formation avant abattage fiscal ? Cela parait improbable. Mais peut-être est-il temps de vous parler enfin du corps de cette Pipeline sans queue ni tête, de parler...


Du Modèle de Facette à Facettes Modelantes


En effet, les objets magiques ne sont pas les seuls concernés par ce rêve d'observabilité qui résulte de leur validation enchantée. Ils ne sont en fait que la première facette de ce modèle. Et toutes les autres facettes ont le droit au rêve et à l'enchantement. Toutes les facette participent à l'observabilité du modèle. Et le modèle lui même valide chaque facette. Pourquoi changer un modèle qui gagne ? Mieux vaut ne pas se voiler la facette. Nous allons le garder.


Qui a validé le premier modèle ? Qui à modéliser la première facette ? Quelle était la facette du premier modèle ? Ces réponses n'ont aucune espèce d'importance. C'est pour cela que cette précieuse Pipeline n'a nul besoin d'une queue, et encore moins de sa tête. Elle fonctionne en réalité avec un subtil assemblage de Modèle de Facette à Facettes Modelantes. Car les facettes ne sont pas seulement partie intégrantes de ce modèle. Elles construisent le modèle. Aussi vrai que la mode modèle nos top-modèles, nos facettes façonnent ce modèle.


Tous les secrets ne conservent pas leur état par vigilante précaution à ne pas être divulgués. Certains le restent, tapis discrètement dans l'ombre de l'incompréhension.


Bonne nouvelle, il est grand temps d'une nouvelle interlude


> Pourquoi MVVM est-il un modèle aussi solide ?


Le YAML peut nous aider à répondre à cette question existentielle.


parameters:

- name: mvvm

  type: magic

- name: discours


${{ if startsWith(parameters.discours, 'Rassurez-vous, ce modèle est simple' }}:

  "voici une supercherie énoncée par un charlatant": error


steps:

- step: Conseil@1

  ne dites plus: c'est casse pied de tout déclarer trois fois

  apprenez à: vous satisfaire de cette triple occasion

  occasions:

  - occasion: d'obtenir un modèle ou chaque objet à sa place

  - occasion: de savoir que chaque place procure une responsabilité unique

  - occasion: d'être en mesure de faire évoluer sereinement le modèle

  un discours plus solide: https://en.wikipedia.org/wiki/SOLID


- step: AdopteUnModèle@0

  model: ${{ parameters.mvvm }}


Dans l'espoir que cette interlude vous permettra d'y voir plus clair dans cette sombre histoire... Et aussi mince soit cet espoir, voici...


Le retour de le Modèle de Facette à Facettes Modelantes


Rassurez-vous, ce modèle est simple. Toutes les facettes qui le composent sont construites sur le même modèle. C'est l'essence même du Modèle de Facette à Facettes Modelantes. Chaque opération donne naissance à plusieurs fichiers. Chaque fichier possède une responsabilité bien précise : de définition, de validation, d'orchestration, ou d'exécution. Chaque responsabilité est explicitée par l'arborescence du fichier dans le modèle. Et toutes les opérations suivent le même modèle. Car il est simplement impossible d'ajouter une opération à ce modèle, sans qu'elle ne possède toutes les facettes requises. Toutes les facettes de cette Pipeline sans queue ni tête s'emboitent donc parfaitement les unes aux autres, et sont absorbées dans le modèle. Les facettes éligibles au modèle deviennent donc le Modèle de Facette à Facettes Modelantes.


Bien que cette approche paraisse extravagante, elle permet en réalité de faire converger la manière de concevoir les facettes. Et chaque facette procure une lecture simples et intuitive, à qui l'observe à la bonne échelle. Et si certaines facettes viennent à se complexifier avec le temps, alors cette complexité donnera lieu à de nouvelles segmentations de facettes. Dans l'objectif de revenir vers un modèle ou chaque facette reflète sa responsabilité de manière unique. La position de la facette dans le modèle est un élément capital à la compréhension. Tout comme la position de l'observateur de ce modèle, détermine la pertinence des facettes existantes... comme des facettes manquantes.


Le projet se prépare


De la compréhension du Modèle de Facette à Facettes Modelantes, nait la notion d'anti-facette. Vous approchez progressivement du secret ultime de cette Pipeline sans queue ni tête, qui à la manière de l'Univers, est constitué de matière, comme d'anti-matière ; de facettes comme d'anti-facettes. Et toutes nous rappellent.


Que l'usage vient du vide.


Et l'Univers, comme la précieuse Pipeline ont tous deux besoin d'être partiellement vides. Sans ce vide, sans cette place laissée à l'anti-facette, l'Univers tout entier, et par conséquent notre précieuse Pipeline, seraient inutilisables. Et si vous cultivez encore l'espoir d'utiliser, vous aussi, un jour, cette Pipeline sans queue ni tête. Il vous faudra admettre que certaines facettes de son anatomie sont statistiquement vides.


D'une manière ou d'une autre, ce ne serait sans doute pas la première entité de l'Histoire, à avoir la tête vide. Dans un sens ou dans l'autre, ce ne serait pas non plus la première entité de l'Univers à posséder à la place de la queue, un orifice. Afin d'obtenir de plus amples incertitudes sur ces propositions insolentes, comme sur les mystères que nous réserve l'Univers, il vous faudra, tristement, patienter.


Excuse-nous, Henri !


Julien


Commentaires :

Aucun commentaires pour le moment


Laissez un commentaire :

Réalisé par
Expaceo