{"id":27185,"date":"2022-07-21T10:12:50","date_gmt":"2022-07-21T08:12:50","guid":{"rendered":"https:\/\/digatus.com\/ci-cd-avance-avec-azure-devops\/"},"modified":"2025-11-27T11:42:17","modified_gmt":"2025-11-27T10:42:17","slug":"ci-cd-avance-avec-azure-devops","status":"publish","type":"post","link":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/","title":{"rendered":"CI\/CD avanc\u00e9 avec Azure DevOps"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"27185\" class=\"elementor elementor-27185 elementor-13299\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a014c68 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a014c68\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d36618b\" data-id=\"d36618b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-59dfede elementor-widget elementor-widget-text-editor\" data-id=\"59dfede\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s<\/strong><\/p><h5>Qu&rsquo;est-ce qu&rsquo;Azure DevOps ?<\/h5><p>Azure DevOps est une plateforme web de Microsoft qui fournit des outils pour divers domaines dans l&rsquo;environnement des projets informatiques :<\/p><ul><li><em>Azure Boards<\/em> pour la gestion de projet<\/li><li><em>Azure Pipelines<\/em> pour CI\/CD<\/li><li><em>Azure Repos<\/em> pour la gestion du code source<\/li><li><em>Azure Test Plans<\/em> pour les tests manuels<\/li><li><em>Azure Artifacts<\/em> pour la gestion des artefacts<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d7b47e5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d7b47e5\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8d59e06\" data-id=\"8d59e06\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6c82f5f elementor-widget elementor-widget-image\" data-id=\"6c82f5f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"768\" height=\"512\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Azure-DevOps-768x512.png\" class=\"attachment-medium_large size-medium_large wp-image-27187\" alt=\"\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Azure-DevOps-768x512.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Azure-DevOps-300x200.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Azure-DevOps.png 788w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f53c9b9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f53c9b9\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ef99a8e\" data-id=\"ef99a8e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c35c145 elementor-widget elementor-widget-text-editor\" data-id=\"c35c145\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Les outils s&rsquo;interconnectent, par exemple, les \u00e9l\u00e9ments de travail d&rsquo;Azure Boards peuvent \u00eatre li\u00e9s aux demandes d&rsquo;extraction dans Azure Repos. Avant qu&rsquo;une demande d&rsquo;extraction ne puisse \u00eatre fusionn\u00e9e, un pipeline dans Azure Pipelines doit confirmer l&rsquo;exactitude du code et finalement, il t\u00e9l\u00e9charge un artefact vers Azure Artifacts.<br>Dans cette s\u00e9rie d&rsquo;articles, nous n&rsquo;utiliserons qu&rsquo;Azure Repos et Azure Pipelines. <\/p><h5>Le premier pipeline CI &#8211; Go et Docker<\/h5><p>Notre premier cas d&rsquo;utilisation est un microservice en Go, qui doit \u00eatre install\u00e9 via Docker. Nous allons cr\u00e9er un pipeline CI qui devra faire ce qui suit : <\/p><ul><li>Construire et tester le microservice Go<\/li><li>Construire une image Docker<\/li><li>T\u00e9l\u00e9verser l&rsquo;image Docker dans un registre Docker<\/li><\/ul><p>Azure DevOps offre deux possibilit\u00e9s pour cr\u00e9er des pipelines : via une interface graphique ou via des fichiers YAML, qui sont enregistr\u00e9s dans le d\u00e9p\u00f4t Git. Habituellement, ce fichier est valid\u00e9 dans le r\u00e9pertoire racine du d\u00e9p\u00f4t Git sous le nom azure-pipelines.yaml (mais le nom est librement choisi). Comme nous d\u00e9veloppons nos pipelines en \u00e9quipe, que nous voulons les documenter, suivre les changements et r\u00e9utiliser des sections, nous optons pour la variante avanc\u00e9e avec les fichiers YAML.  <\/p><p>Le microservice a une structure tr\u00e8s simple : il d\u00e9marre simplement un serveur HTTP avec un point de terminaison REST :<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7d6d2df elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7d6d2df\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b529bed\" data-id=\"b529bed\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3bf8f60 elementor-widget elementor-widget-image\" data-id=\"3bf8f60\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"768\" height=\"180\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/go.mod_-768x180.png\" class=\"attachment-medium_large size-medium_large wp-image-27188\" alt=\"go.mod_\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/go.mod_-768x180.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/go.mod_-300x70.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/go.mod_.png 912w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e979bf1 elementor-widget elementor-widget-image\" data-id=\"e979bf1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"768\" height=\"410\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main.go_-768x410.png\" class=\"attachment-medium_large size-medium_large wp-image-27189\" alt=\"main.go\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main.go_-768x410.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main.go_-300x160.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main.go_.png 912w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93ad43a elementor-widget elementor-widget-image\" data-id=\"93ad43a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"314\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Dockerfile-768x314.png\" class=\"attachment-medium_large size-medium_large wp-image-27190\" alt=\"Dockerfile\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Dockerfile-768x314.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Dockerfile-300x123.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Dockerfile.png 911w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-26c1dcc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"26c1dcc\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a6bf6af\" data-id=\"a6bf6af\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-43521e8 elementor-widget elementor-widget-text-editor\" data-id=\"43521e8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Maintenant, passons \u00e0 la partie passionnante : le pipeline CI. Dans Azure DevOps, la partie ex\u00e9cutable d&rsquo;un pipeline se compose d&rsquo;\u00e9tapes (Stages), une \u00e9tape se compose de t\u00e2ches (Jobs) et une t\u00e2che se compose d&rsquo;\u00e9tapes (Steps). Pour notre cas simple, une \u00e9tape avec une t\u00e2che est tout \u00e0 fait suffisante. La fonctionnalit\u00e9 d&rsquo;une \u00e9tape est d\u00e9crite au moyen d&rsquo;une t\u00e2che (Task), par exemple, il existe une <em>t\u00e2che Go<\/em>, une <em>t\u00e2che Docker<\/em> et une <em>t\u00e2che de v\u00e9rification Git<\/em>. Avec les t\u00e2ches <em>Bash<\/em> ou <em>PowerShell<\/em>, il est possible d&rsquo;ex\u00e9cuter ses propres scripts. Pour des cas d&rsquo;utilisation plus complexes, il est \u00e9galement possible de d\u00e9velopper ses propres t\u00e2ches en TypeScript. Comme le processus de construction est d\u00e9j\u00e0 enti\u00e8rement d\u00e9fini dans le Dockerfile, nous n&rsquo;avons besoin que de <em>docker build<\/em> et <em>docker push<\/em> comme \u00e9tapes de construction. Pour cela, nous utilisons la t\u00e2che Docker.       <\/p><p>En plus du processus de construction proprement dit, nous pouvons d\u00e9finir dans le pipeline<\/p><ul><li>quels \u00e9v\u00e9nements d\u00e9clencheront automatiquement le pipeline.<\/li><li>quelles variables et groupes de variables doivent \u00eatre utilis\u00e9s.<\/li><li>si le pipeline doit \u00eatre param\u00e9tr\u00e9.<\/li><li>si d&rsquo;autres d\u00e9p\u00f4ts Git doivent \u00eatre v\u00e9rifi\u00e9s.<\/li><\/ul><p>Tous ces param\u00e8tres peuvent \u00e9galement \u00eatre omis, dans ce cas le pipeline sera automatiquement d\u00e9clench\u00e9 pour chaque Push Git, n&rsquo;aura pas de variables ni de param\u00e8tres et seul le propre d\u00e9p\u00f4t Git sera v\u00e9rifi\u00e9. C&rsquo;est aussi le comportement que nous voulons pour notre pipeline. <\/p><p>Au sein du pipeline, nous avons acc\u00e8s \u00e0 certaines variables pr\u00e9d\u00e9finies qui nous renseignent, entre autres, sur le nom, l&rsquo;organisation et le commit v\u00e9rifi\u00e9 du d\u00e9p\u00f4t Git. Une liste de toutes les variables pr\u00e9d\u00e9finies est disponible <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/pipelines\/build\/variables?view=azure-devops&amp;tabs=yaml\">ici<\/a>. Bien entendu, il est \u00e9galement possible de d\u00e9finir ses propres variables lors de l&rsquo;ex\u00e9cution et ainsi de transmettre des donn\u00e9es entre les \u00e9tapes. Nous utilisons   <\/p><ul><li><span style=\"color: #59bb2f;\">$(Build.SourcesDirectory)<\/span>, le chemin sur l&rsquo;agent de construction o\u00f9 le d\u00e9p\u00f4t Git est v\u00e9rifi\u00e9 comme pr\u00e9fixe de chemin pour l&rsquo;acc\u00e8s aux fichiers.<\/li><li><span style=\"color: #59bb2f;\">$(Build.Repository.Name)<\/span>, le nom du d\u00e9p\u00f4t Git comme nom pour l&rsquo;image Docker.<\/li><li><span style=\"color: #59bb2f;\">$(Build.SourceVersion), le hash de commit en tant que balise pour l&rsquo;image Docker<\/span><\/li><\/ul><p>La d\u00e9finition finale du pipeline se pr\u00e9sente donc comme suit :<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4c2cc61 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4c2cc61\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-613b5d6\" data-id=\"613b5d6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e6c547a elementor-widget elementor-widget-image\" data-id=\"e6c547a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"468\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines-yaml-768x468.png\" class=\"attachment-medium_large size-medium_large wp-image-27191\" alt=\"azure_pipeline_yaml\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines-yaml-768x468.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines-yaml-300x183.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines-yaml.png 913w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c0a9211 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c0a9211\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-67516c6\" data-id=\"67516c6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4c5f82a elementor-widget elementor-widget-text-editor\" data-id=\"4c5f82a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Nous avons sp\u00e9cifi\u00e9 \u00ab docker-hub \u00bb comme ContainerRegistry cible. Il s&rsquo;agit d&rsquo;une r\u00e9f\u00e9rence \u00e0 ce que l&rsquo;on appelle une connexion de service, qui d\u00e9crit de mani\u00e8re g\u00e9n\u00e9rale une connexion \u00e0 un service externe dans Azure DevOps. Ainsi, le pipeline peut l&rsquo;utiliser sans qu&rsquo;aucune information d&rsquo;identification ne doive \u00eatre stock\u00e9e directement dans le pipeline. Pour cr\u00e9er une nouvelle connexion de service, nous allons dans les \u00ab Param\u00e8tres du projet \u00bb et l\u00e0, sous \u00ab Pipelines \u00bb &#8211;&gt; \u00ab Connexions de service \u00bb. Nous cr\u00e9ons une connexion \u00e0 un registre Docker dans Docker Hub. La condition pr\u00e9alable est un compte Docker (gratuit). Bien entendu, nous pourrions \u00e9galement utiliser n&rsquo;importe quel autre registre Docker.      <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7889591 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7889591\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8821294\" data-id=\"8821294\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-21b43ed elementor-widget elementor-widget-image\" data-id=\"21b43ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"450\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker-Registry-768x450.png\" class=\"attachment-medium_large size-medium_large wp-image-27192\" alt=\"docker_registry\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker-Registry-768x450.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker-Registry-300x176.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker-Registry-1024x600.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker-Registry.png 1328w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a28546a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a28546a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-23eea8a\" data-id=\"23eea8a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a4d99c0 elementor-widget elementor-widget-text-editor\" data-id=\"a4d99c0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ensuite, nous devons saisir nos informations d&rsquo;identification pour le compte Docker Hub. Important : un jeton d&rsquo;acc\u00e8s doit \u00eatre cr\u00e9\u00e9 au pr\u00e9alable dans Docker Hub comme mot de passe. <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-495160b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"495160b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-80d8f69\" data-id=\"80d8f69\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-38f9930 elementor-widget elementor-widget-image\" data-id=\"38f9930\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"488\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker_ID-768x488.png\" class=\"attachment-medium_large size-medium_large wp-image-27193\" alt=\"Docker-ID\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker_ID-768x488.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker_ID-300x191.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker_ID-1024x650.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Docker_ID.png 1332w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-11b0511 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"11b0511\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3d27b3e\" data-id=\"3d27b3e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d58c368 elementor-widget elementor-widget-text-editor\" data-id=\"d58c368\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Apr\u00e8s avoir commit\u00e9 tous les fichiers, il ne nous reste plus qu&rsquo;\u00e0 cr\u00e9er le pipeline dans l&rsquo;interface d&rsquo;Azure DevOps et \u00e0 faire r\u00e9f\u00e9rence \u00e0 notre azure-pipelines.yaml. Pour ce faire, nous cliquons sur \u00ab Cr\u00e9er un pipeline \u00bb sous \u00ab Pipelines \u00bb : <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9a7dae9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9a7dae9\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f8c068b\" data-id=\"f8c068b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9ef7a3e elementor-widget elementor-widget-image\" data-id=\"9ef7a3e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"499\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Create_Pipeline-768x499.png\" class=\"attachment-medium_large size-medium_large wp-image-27194\" alt=\"\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Create_Pipeline-768x499.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Create_Pipeline-300x195.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Create_Pipeline-1024x666.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Create_Pipeline.png 1055w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8b88cc6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8b88cc6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2e56b4f\" data-id=\"2e56b4f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2619d5b elementor-widget elementor-widget-text-editor\" data-id=\"2619d5b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tNotre azure-pipelines.yaml se trouve dans Azure Repos :\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-11f664f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"11f664f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c7861f5\" data-id=\"c7861f5\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ad5ca5b elementor-widget elementor-widget-image\" data-id=\"ad5ca5b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"525\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure_pipeline-768x525.png\" class=\"attachment-medium_large size-medium_large wp-image-27195\" alt=\"azure_pipeline\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure_pipeline-768x525.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure_pipeline-300x205.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure_pipeline-1024x700.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure_pipeline.png 1065w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7f74973 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7f74973\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b6bfce3\" data-id=\"b6bfce3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b9e2c83 elementor-widget elementor-widget-text-editor\" data-id=\"b9e2c83\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tApr\u00e8s avoir s\u00e9lectionn\u00e9 le bon d\u00e9p\u00f4t Git (dans notre cas \u00ab example-go-project \u00bb), Azure DevOps reconna\u00eet automatiquement notre azure-pipelines.yaml, car c&rsquo;est le seul fichier YAML.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-58ccbbb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"58ccbbb\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-76126f6\" data-id=\"76126f6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-55869c6 elementor-widget elementor-widget-image\" data-id=\"55869c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"504\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/data_storage-1-768x504.png\" class=\"attachment-medium_large size-medium_large wp-image-27196\" alt=\"\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/data_storage-1-768x504.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/data_storage-1-300x197.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/data_storage-1-1024x672.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/data_storage-1-1536x1008.png 1536w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/data_storage-1.png 1591w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b79b3b8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b79b3b8\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ce07633\" data-id=\"ce07633\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cfdcef5 elementor-widget elementor-widget-text-editor\" data-id=\"cfdcef5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tUn clic bien r\u00e9fl\u00e9chi sur \u00ab Ex\u00e9cuter \u00bb et nous pouvons enfin voir les fruits de notre travail :\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8471cc0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8471cc0\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9e9bb34\" data-id=\"9e9bb34\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-149142e elementor-widget elementor-widget-image\" data-id=\"149142e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"398\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/build-768x398.png\" class=\"attachment-medium_large size-medium_large wp-image-27197\" alt=\"\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/build-768x398.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/build-300x155.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/build-1024x531.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/build.png 1401w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-feec094 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"feec094\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-38f1e8f\" data-id=\"38f1e8f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c6f846c elementor-widget elementor-widget-text-editor\" data-id=\"c6f846c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tComme nous pouvons le constater, l&rsquo;image Docker a \u00e9t\u00e9 construite et automatiquement t\u00e9l\u00e9charg\u00e9e vers Docker Hub :\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5b212fd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5b212fd\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7d651fc\" data-id=\"7d651fc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5328517 elementor-widget elementor-widget-image\" data-id=\"5328517\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"765\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/docker_hub-768x765.png\" class=\"attachment-medium_large size-medium_large wp-image-27198\" alt=\"docker_hub\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/docker_hub-768x765.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/docker_hub-300x300.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/docker_hub-1024x1020.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/docker_hub-150x150.png 150w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/docker_hub.png 1150w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ca578ad elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ca578ad\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8c921be\" data-id=\"8c921be\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b1e1914 elementor-widget elementor-widget-text-editor\" data-id=\"b1e1914\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tUn test rapide dans un shell local confirme que tout a fonctionn\u00e9 parfaitement et que l&rsquo;image Docker peut maintenant \u00eatre utilis\u00e9e partout :\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-791bb4a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"791bb4a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0210835\" data-id=\"0210835\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ed92285 elementor-widget elementor-widget-image\" data-id=\"ed92285\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"69\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test-768x69.png\" class=\"attachment-medium_large size-medium_large wp-image-27200\" alt=\"\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test-768x69.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test-300x27.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test-1024x92.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test-1536x137.png 1536w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test.png 1800w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8c0c31e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8c0c31e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8759023\" data-id=\"8759023\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-04e24be elementor-widget elementor-widget-text-editor\" data-id=\"04e24be\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5>Tests unitaires et couverture de code<\/h5><p>Tout bon pipeline comprend \u00e9galement des tests automatis\u00e9s. C&rsquo;est pourquoi nous allons maintenant \u00e9tendre notre projet Go avec un test unitaire et inclure une \u00e9tape dans le pipeline qui ex\u00e9cute les tests. Si les tests \u00e9chouent, le pipeline doit s&rsquo;arr\u00eater et l&rsquo;image Docker ne doit \u00eatre ni construite ni pouss\u00e9e.  <\/p><p>Notre premier test lance une requ\u00eate HTTP au serveur autonome et v\u00e9rifie la r\u00e9ponse :<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fb8c6a4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fb8c6a4\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e723c65\" data-id=\"e723c65\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7c2e1e1 elementor-widget elementor-widget-image\" data-id=\"7c2e1e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"468\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main_test.go_-768x468.png\" class=\"attachment-medium_large size-medium_large wp-image-27199\" alt=\"main_test.go\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main_test.go_-768x468.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main_test.go_-300x183.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main_test.go_.png 912w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-43b57b6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"43b57b6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bc4a2bd\" data-id=\"bc4a2bd\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9797d9d elementor-widget elementor-widget-text-editor\" data-id=\"9797d9d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Le test fonctionne d\u00e9j\u00e0 localement :<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-aa09d70 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"aa09d70\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-11ea49f\" data-id=\"11ea49f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ff24ea4 elementor-widget elementor-widget-image\" data-id=\"ff24ea4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"187\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_run-768x187.png\" class=\"attachment-medium_large size-medium_large wp-image-27201\" alt=\"\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_run-768x187.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_run-300x73.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_run-1024x250.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_run-1536x375.png 1536w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_run.png 1877w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6eebefb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6eebefb\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6fdfa8b\" data-id=\"6fdfa8b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f1be3db elementor-widget elementor-widget-text-editor\" data-id=\"f1be3db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Nous allons maintenant ajouter les tests au pipeline. Azure DevOps propose deux t\u00e2ches pr\u00e9d\u00e9finies pour les projets Go : <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/pipelines\/tasks\/tool\/go-tool?view=azure-devops\">GoTool <\/a>et <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/pipelines\/tasks\/build\/go?view=azure-devops\">Go<\/a>. Avec GoTool, nous s\u00e9lectionnons la version de Go pour le pipeline, avec Go, nous pouvons ensuite ex\u00e9cuter n&rsquo;importe quelle commande Go. Avant d&rsquo;ex\u00e9cuter les tests, nous construisons notre projet Go. M\u00eame si ce n&rsquo;est pas absolument n\u00e9cessaire, cela aide \u00e0 d\u00e9terminer si une erreur se produit d\u00e9j\u00e0 lors de la construction (erreur syntaxique) ou seulement lors de l&rsquo;ex\u00e9cution des tests (erreur s\u00e9mantique). Deux \u00e9tapes sont n\u00e9cessaires pour la construction : go mod download pour t\u00e9l\u00e9charger les biblioth\u00e8ques et go build pour compiler. Les tests sont ensuite ex\u00e9cut\u00e9s avec go test. Nous \u00e9tendons donc le pipeline comme suit :       <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fbcc75e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fbcc75e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5c3f0ee\" data-id=\"5c3f0ee\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a5cebce elementor-widget elementor-widget-image\" data-id=\"a5cebce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"907\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-2-768x907.png\" class=\"attachment-medium_large size-medium_large wp-image-27202\" alt=\"\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-2-768x907.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-2-254x300.png 254w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-2.png 792w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-84ec043 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"84ec043\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3e79aef\" data-id=\"3e79aef\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-067bb68 elementor-widget elementor-widget-text-editor\" data-id=\"067bb68\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tApr\u00e8s avoir commit\u00e9 et pouss\u00e9, le pipeline devrait d\u00e9marrer automatiquement, construire l&rsquo;application et ex\u00e9cuter le test :\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fc3a113 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fc3a113\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-841e86b\" data-id=\"841e86b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7c585f0 elementor-widget elementor-widget-image\" data-id=\"7c585f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"461\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_successfull-768x461.png\" class=\"attachment-medium_large size-medium_large wp-image-27203\" alt=\"test_successfull\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_successfull-768x461.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_successfull-300x180.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_successfull-1024x615.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_successfull.png 1164w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-126cd75 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"126cd75\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-beadcf5\" data-id=\"beadcf5\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-df077ff elementor-widget elementor-widget-text-editor\" data-id=\"df077ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tNous commen\u00e7ons \u00e0 avoir une bonne compr\u00e9hension de CI et de sa mise en \u0153uvre dans Azure DevOps. Pour nous assurer que le cas n\u00e9gatif fonctionne \u00e9galement, nous allons maintenant modifier le code pour que le test \u00e9choue : \t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c06edc7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c06edc7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a1e904b\" data-id=\"a1e904b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1ee824b elementor-widget elementor-widget-image\" data-id=\"1ee824b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"144\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main.go-2-768x144.png\" class=\"attachment-medium_large size-medium_large wp-image-27205\" alt=\"main.go\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main.go-2-768x144.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main.go-2-300x56.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/main.go-2.png 794w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-623ec50 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"623ec50\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d4d688e\" data-id=\"d4d688e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0e6e0da elementor-widget elementor-widget-text-editor\" data-id=\"0e6e0da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tComme pr\u00e9vu, le pipeline \u00e9choue et s&rsquo;arr\u00eate avant que l&rsquo;image Docker ne soit construite :\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5bfc617 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5bfc617\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-24ff154\" data-id=\"24ff154\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2631911 elementor-widget elementor-widget-image\" data-id=\"2631911\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"464\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_failed-768x464.png\" class=\"attachment-medium_large size-medium_large wp-image-27204\" alt=\"test_failed\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_failed-768x464.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_failed-300x181.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_failed-1024x618.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_failed.png 1153w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c636742 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c636742\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ed15861\" data-id=\"ed15861\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b1db171 elementor-widget elementor-widget-text-editor\" data-id=\"b1db171\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Pour v\u00e9rifier pr\u00e9cis\u00e9ment quel test a \u00e9chou\u00e9 et pourquoi, nous devons consulter le journal. Avec un seul test, ce n&rsquo;est pas un probl\u00e8me, mais si nous avons des centaines de tests, nous n&rsquo;avons pas le temps de faire d\u00e9filer des milliers de lignes ici pour trouver les tests qui ont \u00e9chou\u00e9. De plus, nous ne voyons pas imm\u00e9diatement quel pourcentage de tests a \u00e9chou\u00e9. Heureusement, Azure DevOps offre ici une interface pour fournir les r\u00e9sultats des tests au format XML JUnit. Pour pouvoir l&rsquo;utiliser, nous devons cependant convertir la sortie de <em>go test<\/em> dans ce format.    <\/p><p>Fort heureusement, quelqu&rsquo;un d&rsquo;autre a d\u00e9j\u00e0 fait ce travail pour nous et a \u00e9crit un outil Go correspondant : <a href=\"https:\/\/github.com\/jstemmer\/go-junit-report.\">https:\/\/github.com\/jstemmer\/go-junit-report.<\/a> Nous nous int\u00e9ressons \u00e9galement \u00e0 la couverture des tests. Ici aussi, il existe une interface d&rsquo;Azure DevOps et des outils pr\u00eats \u00e0 l&#8217;emploi pour la conversion au bon format. <\/p><p>Pour ce processus complexe dans son ensemble, nous cr\u00e9ons une t\u00e2che Bash qui accomplira les actions suivantes : Tout d&rsquo;abord, elle t\u00e9l\u00e9chargera les outils n\u00e9cessaires, puis ex\u00e9cutera les tests, tout en m\u00e9morisant le code de retour pour une utilisation ult\u00e9rieure. En effet, nous souhaitons utiliser le code de retour de <em>go test<\/em> comme code de retour pour l&rsquo;ensemble de l&rsquo;\u00e9tape, afin qu&rsquo;Azure DevOps puisse d\u00e9terminer si l&rsquo;\u00e9tape a \u00e9chou\u00e9 ou non. Cependant, avant cela, nous devons encore pr\u00e9parer le rapport et la couverture, tant en cas de succ\u00e8s que d&rsquo;\u00e9chec. Ensuite, nous ajouterons les deux t\u00e2ches <em>PublishTestResults<\/em> et <em>PublishCodeCoverageResults<\/em>. Il est important d&rsquo;ajouter ici la <em>condition: succeededOrFailed()<\/em>. Normalement, les \u00e9tapes suivantes ne sont pas ex\u00e9cut\u00e9es si une \u00e9tape \u00e9choue (c&rsquo;est-\u00e0-dire que la valeur par d\u00e9faut est <em>condition: succeeded()<\/em>), mais avec <em>condition: succeededOrFailed()<\/em>, elles sont ex\u00e9cut\u00e9es m\u00eame si les \u00e9tapes pr\u00e9c\u00e9dentes ont \u00e9chou\u00e9, contrairement \u00e0 <em>condition: always()<\/em>, mais pas si le pipeline a \u00e9t\u00e9 annul\u00e9 manuellement.     <\/p><p>Note en marge, si les builds doivent s&rsquo;ex\u00e9cuter sur un agent de build auto-h\u00e9berg\u00e9 : la t\u00e2che <em>PublishCodeCoverageResults<\/em> n\u00e9cessite qu&rsquo;un runtime .NET soit install\u00e9 sur l&rsquo;agent de build.<\/p><p>Voici maintenant le pipeline finalis\u00e9 :<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f39d221 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f39d221\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7c6a463\" data-id=\"7c6a463\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4561c7e elementor-widget elementor-widget-image\" data-id=\"4561c7e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1077\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-3-1-768x1077.png\" class=\"attachment-medium_large size-medium_large wp-image-27212\" alt=\"azure-pipelines.yaml\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-3-1-768x1077.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-3-1-214x300.png 214w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-3-1-730x1024.png 730w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-3-1-1095x1536.png 1095w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/azure-pipelines.yaml-3-1.png 1127w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f15d925 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f15d925\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-caa7956\" data-id=\"caa7956\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3d7ed36 elementor-widget elementor-widget-text-editor\" data-id=\"3d7ed36\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tApr\u00e8s l&rsquo;ex\u00e9cution r\u00e9ussie du build, nous observons d\u00e9sormais les r\u00e9sultats des tests et la couverture pr\u00e9sent\u00e9s graphiquement dans deux nouveaux onglets :\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2965c15 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2965c15\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-86505ef\" data-id=\"86505ef\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4906fa2 elementor-widget elementor-widget-image\" data-id=\"4906fa2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"447\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Test_report-768x447.png\" class=\"attachment-medium_large size-medium_large wp-image-27207\" alt=\"test_report\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Test_report-768x447.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Test_report-300x175.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Test_report-1024x596.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/Test_report.png 1320w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0e15433 elementor-widget elementor-widget-image\" data-id=\"0e15433\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"537\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/success-768x537.png\" class=\"attachment-medium_large size-medium_large wp-image-27208\" alt=\"success\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/success-768x537.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/success-300x210.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/success-1024x716.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/success.png 1319w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f89d651 elementor-widget elementor-widget-image\" data-id=\"f89d651\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"537\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_report_2-768x537.png\" class=\"attachment-medium_large size-medium_large wp-image-27209\" alt=\"test_report\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_report_2-768x537.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_report_2-300x210.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_report_2-1024x716.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_report_2.png 1322w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d39ee8f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d39ee8f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2aa26d6\" data-id=\"2aa26d6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7bd5b84 elementor-widget elementor-widget-text-editor\" data-id=\"7bd5b84\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tDe m\u00eame, en cas d&rsquo;\u00e9chec d&rsquo;un test, nous obtenons un message d\u00e9taill\u00e9 sur l&rsquo;erreur :\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9de3a4f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9de3a4f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b3bbe36\" data-id=\"b3bbe36\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b62ea2f elementor-widget elementor-widget-image\" data-id=\"b62ea2f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"538\" src=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_fail-768x538.png\" class=\"attachment-medium_large size-medium_large wp-image-27210\" alt=\"test_fail_report\" srcset=\"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_fail-768x538.png 768w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_fail-300x210.png 300w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_fail-1024x717.png 1024w, https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/test_fail.png 1318w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-014c826 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"014c826\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f138d1a\" data-id=\"f138d1a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4e0cf9d elementor-widget elementor-widget-text-editor\" data-id=\"4e0cf9d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5>Conclusion<\/h5><p>Azure DevOps offre une excellente opportunit\u00e9 de cr\u00e9er rapidement et confortablement des pipelines. L&rsquo;interface graphique est \u00e9pur\u00e9e et facile \u00e0 comprendre, ce qui la rend particuli\u00e8rement recommandable pour les d\u00e9butants dans le domaine du DevOps. \u00c0 cet effet, la cr\u00e9ation de pipelines via l&rsquo;interface graphique Drop est particuli\u00e8rement appropri\u00e9e. La connexion \u00e0 des services externes est \u00e9galement simple et rapide \u00e0 r\u00e9aliser. N\u00e9anmoins, gr\u00e2ce au passage \u00e0 la syntaxe YAML pour les pipelines, il convient \u00e9galement aux cas d&rsquo;utilisation plus complexes. Ainsi, il est possible de d\u00e9finir des pipelines d&rsquo;une complexit\u00e9 presque illimit\u00e9e. Dans cet article, nous n&rsquo;avons examin\u00e9 jusqu&rsquo;\u00e0 pr\u00e9sent qu&rsquo;une fraction des fonctionnalit\u00e9s d&rsquo;Azure DevOps.      <\/p><p>Dans la partie 2, nous allons :<\/p><ul><li>Int\u00e9grer un autre projet Go, y compris un pipeline, en tant que d\u00e9pendance dans notre premier projet Go.<\/li><li> Cr\u00e9er un mod\u00e8le de pipeline r\u00e9utilisable pour de futurs pipelines.<\/li><li>Int\u00e9grer un algorithme de versionnement intelligent selon le Semantic Versioning dans le pipeline.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>L&rsquo;id\u00e9e de cette s\u00e9rie d&rsquo;articles est n\u00e9e d&rsquo;une situation chez un client o\u00f9 nous avons introduit le CI\/CD car la charge de travail manuelle n&rsquo;\u00e9tait plus g\u00e9rable. Les instructions suivantes sont donc fra\u00eechement issues de la pratique. Par souci de simplicit\u00e9, nous avons abr\u00e9g\u00e9 le long processus d&rsquo;essais et de recherche d&rsquo;erreurs pour ne pr\u00e9senter ici que le r\u00e9sultat final. Les extraits de code sont exemplaires, mais suffisants pour pr\u00e9senter la fonctionnalit\u00e9.   <\/p>\n","protected":false},"author":2,"featured_media":27186,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[164],"tags":[172,170],"class_list":["post-27185","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-article-fr","tag-cloud-fr","tag-developpement-de-logiciels"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>CI\/CD avanc\u00e9 avec Azure DevOps - digatus<\/title>\n<meta name=\"description\" content=\"Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s. Un guide pratique pour votre propre d\u00e9veloppement avec Azure DevOps.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CI\/CD avanc\u00e9 avec Azure DevOps\" \/>\n<meta property=\"og:description\" content=\"Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s. Un guide pratique.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/\" \/>\n<meta property=\"og:site_name\" content=\"digatus\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-21T08:12:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-27T10:42:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/de.digatus.com\/wp-content\/uploads\/2022\/07\/CICD-Azure-DevOps-1024x535.png\" \/>\n<meta name=\"author\" content=\"Annabell Renner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"CI\/CD avanc\u00e9 avec Azure DevOps\" \/>\n<meta name=\"twitter:description\" content=\"Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s. Un guide pratique.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/de.digatus.com\/wp-content\/uploads\/2022\/07\/CICD-Azure-DevOps-1024x535.png\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Annabell Renner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/\"},\"author\":{\"name\":\"Annabell Renner\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#\\\/schema\\\/person\\\/4902929f286856c9caf9575e10acd69e\"},\"headline\":\"CI\\\/CD avanc\u00e9 avec Azure DevOps\",\"datePublished\":\"2022-07-21T08:12:50+00:00\",\"dateModified\":\"2025-11-27T10:42:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/\"},\"wordCount\":1933,\"publisher\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/digatus.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/CI_CD_DevOps_Azure.png\",\"keywords\":[\"Cloud\",\"D\u00e9veloppement de logiciels\"],\"articleSection\":[\"Article\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/\",\"url\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/\",\"name\":\"CI\\\/CD avanc\u00e9 avec Azure DevOps - digatus\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/digatus.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/CI_CD_DevOps_Azure.png\",\"datePublished\":\"2022-07-21T08:12:50+00:00\",\"dateModified\":\"2025-11-27T10:42:17+00:00\",\"description\":\"Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s. Un guide pratique pour votre propre d\u00e9veloppement avec Azure DevOps.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/#primaryimage\",\"url\":\"https:\\\/\\\/digatus.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/CI_CD_DevOps_Azure.png\",\"contentUrl\":\"https:\\\/\\\/digatus.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/CI_CD_DevOps_Azure.png\",\"width\":950,\"height\":633,\"caption\":\"ci_cd_devops_azure\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/ci-cd-avance-avec-azure-devops\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/digatus.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CI\\\/CD avanc\u00e9 avec Azure DevOps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/digatus.com\\\/fr\\\/\",\"name\":\"digatus\",\"description\":\"Transforming IT, Empowering Business.\",\"publisher\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/digatus.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#organization\",\"name\":\"digatus\",\"url\":\"https:\\\/\\\/digatus.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/digatus.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Logo_digatus_green_web_rgb.png\",\"contentUrl\":\"https:\\\/\\\/digatus.com\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Logo_digatus_green_web_rgb.png\",\"width\":1200,\"height\":312,\"caption\":\"digatus\"},\"image\":{\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/digatus.com\\\/fr\\\/#\\\/schema\\\/person\\\/4902929f286856c9caf9575e10acd69e\",\"name\":\"Annabell Renner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f260d8c39a817b4f01ed758cefc9933458252cc43e8c4c292328cc6009d4fea2?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f260d8c39a817b4f01ed758cefc9933458252cc43e8c4c292328cc6009d4fea2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f260d8c39a817b4f01ed758cefc9933458252cc43e8c4c292328cc6009d4fea2?s=96&d=mm&r=g\",\"caption\":\"Annabell Renner\"},\"url\":\"https:\\\/\\\/digatus.com\\\/fr\\\/author\\\/annabell\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CI\/CD avanc\u00e9 avec Azure DevOps - digatus","description":"Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s. Un guide pratique pour votre propre d\u00e9veloppement avec Azure DevOps.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/","og_locale":"fr_FR","og_type":"article","og_title":"CI\/CD avanc\u00e9 avec Azure DevOps","og_description":"Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s. Un guide pratique.","og_url":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/","og_site_name":"digatus","article_published_time":"2022-07-21T08:12:50+00:00","article_modified_time":"2025-11-27T10:42:17+00:00","og_image":[{"url":"https:\/\/de.digatus.com\/wp-content\/uploads\/2022\/07\/CICD-Azure-DevOps-1024x535.png","type":"","width":"","height":""}],"author":"Annabell Renner","twitter_card":"summary_large_image","twitter_title":"CI\/CD avanc\u00e9 avec Azure DevOps","twitter_description":"Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s. Un guide pratique.","twitter_image":"https:\/\/de.digatus.com\/wp-content\/uploads\/2022\/07\/CICD-Azure-DevOps-1024x535.png","twitter_misc":{"\u00c9crit par":"Annabell Renner","Dur\u00e9e de lecture estim\u00e9e":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/#article","isPartOf":{"@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/"},"author":{"name":"Annabell Renner","@id":"https:\/\/digatus.com\/fr\/#\/schema\/person\/4902929f286856c9caf9575e10acd69e"},"headline":"CI\/CD avanc\u00e9 avec Azure DevOps","datePublished":"2022-07-21T08:12:50+00:00","dateModified":"2025-11-27T10:42:17+00:00","mainEntityOfPage":{"@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/"},"wordCount":1933,"publisher":{"@id":"https:\/\/digatus.com\/fr\/#organization"},"image":{"@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/#primaryimage"},"thumbnailUrl":"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/CI_CD_DevOps_Azure.png","keywords":["Cloud","D\u00e9veloppement de logiciels"],"articleSection":["Article"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/","url":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/","name":"CI\/CD avanc\u00e9 avec Azure DevOps - digatus","isPartOf":{"@id":"https:\/\/digatus.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/#primaryimage"},"image":{"@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/#primaryimage"},"thumbnailUrl":"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/CI_CD_DevOps_Azure.png","datePublished":"2022-07-21T08:12:50+00:00","dateModified":"2025-11-27T10:42:17+00:00","description":"Partie 1 : Go, Docker et agents de compilation auto-h\u00e9berg\u00e9s. Un guide pratique pour votre propre d\u00e9veloppement avec Azure DevOps.","breadcrumb":{"@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/#primaryimage","url":"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/CI_CD_DevOps_Azure.png","contentUrl":"https:\/\/digatus.com\/wp-content\/uploads\/2022\/07\/CI_CD_DevOps_Azure.png","width":950,"height":633,"caption":"ci_cd_devops_azure"},{"@type":"BreadcrumbList","@id":"https:\/\/digatus.com\/fr\/ci-cd-avance-avec-azure-devops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/digatus.com\/fr\/"},{"@type":"ListItem","position":2,"name":"CI\/CD avanc\u00e9 avec Azure DevOps"}]},{"@type":"WebSite","@id":"https:\/\/digatus.com\/fr\/#website","url":"https:\/\/digatus.com\/fr\/","name":"digatus","description":"Transforming IT, Empowering Business.","publisher":{"@id":"https:\/\/digatus.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/digatus.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/digatus.com\/fr\/#organization","name":"digatus","url":"https:\/\/digatus.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/digatus.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/digatus.com\/wp-content\/uploads\/2025\/01\/Logo_digatus_green_web_rgb.png","contentUrl":"https:\/\/digatus.com\/wp-content\/uploads\/2025\/01\/Logo_digatus_green_web_rgb.png","width":1200,"height":312,"caption":"digatus"},"image":{"@id":"https:\/\/digatus.com\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/digatus.com\/fr\/#\/schema\/person\/4902929f286856c9caf9575e10acd69e","name":"Annabell Renner","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/f260d8c39a817b4f01ed758cefc9933458252cc43e8c4c292328cc6009d4fea2?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f260d8c39a817b4f01ed758cefc9933458252cc43e8c4c292328cc6009d4fea2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f260d8c39a817b4f01ed758cefc9933458252cc43e8c4c292328cc6009d4fea2?s=96&d=mm&r=g","caption":"Annabell Renner"},"url":"https:\/\/digatus.com\/fr\/author\/annabell\/"}]}},"_links":{"self":[{"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/posts\/27185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/comments?post=27185"}],"version-history":[{"count":1,"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/posts\/27185\/revisions"}],"predecessor-version":[{"id":27213,"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/posts\/27185\/revisions\/27213"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/media\/27186"}],"wp:attachment":[{"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/media?parent=27185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/categories?post=27185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digatus.com\/fr\/wp-json\/wp\/v2\/tags?post=27185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}