{"id":80098,"date":"2021-08-16T11:31:08","date_gmt":"2021-08-16T09:31:08","guid":{"rendered":"https:\/\/jfrog.com\/?p=80098"},"modified":"2021-08-16T11:32:51","modified_gmt":"2021-08-16T09:32:51","slug":"5-best-practices-for-golang-ci-cd","status":"publish","type":"post","link":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/","title":{"rendered":"5\u00a0Meilleures Pratiques pour du CI\/CD avec GoLang"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone size-full wp-image-47300\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GlangCICDemail.png\" alt=\"\" width=\"864\" height=\"300\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GlangCICDemail.png?speedsize=w_864 864w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GlangCICDemail.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GlangCICDemail.png?speedsize=w_768 768w\" sizes=\"(max-width: 864px) 100vw, 864px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Pour les d\u00e9veloppeurs utilisant des langages \u00e9tablis de longue date comme Java, JavaScript ou Python, la meilleure fa\u00e7on d\u2019assembler des workflow d\u2019int\u00e9gration et de livraison continues (CI\/CD) avec <\/span><a href=\"https:\/\/jfrog.com\/fr\/artifactory\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Artifactory <\/span><\/a><span style=\"font-weight: 400\">est assez famili\u00e8re. Un ensemble mature de syst\u00e8mes de gestion des d\u00e9pendances pour ces langages et <a href=\"https:\/\/jfrog.com\/fr\/container-registry\/\" target=\"_blank\" rel=\"noopener noreferrer\">des solutions de conteneurs comme Docker<\/a> fournissent une feuille de route claire.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Mais si vous programmez vos applications en GoLang, est-il difficile de mettre en place un syst\u00e8me CI\/CD avec la m\u00eame efficacit\u00e9\u00a0?<\/span><\/p>\n<p><span style=\"font-weight: 400\">Il s\u2019av\u00e8re que le processus est bien plus facile, notamment gr\u00e2ce aux derni\u00e8res innovations de Go. Avec<\/span><span style=\"font-weight: 400\">\u00a0<\/span><a href=\"https:\/\/jfrog.com\/fr\/integration\/go-registry\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">le support natif d\u2019Artifactory pour GoLang,<\/span><\/a><span style=\"font-weight: 400\"> le chemin vers un CI\/CD de qualit\u00e9 est beaucoup plus d\u00e9gag\u00e9.<\/span><\/p>\n<span class='bctt-click-to-tweet'><span class='bctt-ctt-text'><a href='https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fjfrog.com%2Ffr%2Fblog%2F5-best-practices-for-golang-ci-cd%2F&#038;text=%C2%AB&#038;via&quot;&quot;&#038;related&quot;&quot;' target='_blank'rel=\"noopener noreferrer\">\u00ab <\/a><\/span><a href='https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fjfrog.com%2Ffr%2Fblog%2F5-best-practices-for-golang-ci-cd%2F&#038;text=%C2%AB&#038;via&quot;&quot;&#038;related&quot;&quot;' target='_blank' class='bctt-ctt-btn'rel=\"noopener noreferrer\">Click To Tweet<\/a><\/span>\n<h1><span style=\"font-weight: 400\">Meilleures Pratiques<\/span><\/h1>\n<p><span style=\"font-weight: 400\">Chez JFrog, nous sommes de grands fans de GoLang, que nous utilisons comme langage pour plusieurs de nos solutions phares. Et nous pratiquons aussi ce que nous recommandons, en utilisant Artifactory au c\u0153ur de notre CI\/CD. Voici quelques-unes des pratiques que nous pouvons recommander\u00a0:<\/span><\/p>\n<h2><span style=\"font-weight: 400\">1. Utiliser des Modules Go<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Contrairement \u00e0 de nombreux langages de programmation \u00e9tablis, les premi\u00e8res versions de GoLang ne fournissaient pas de m\u00e9canisme commun permettant de g\u00e9rer les d\u00e9pendances versionn\u00e9es. Au lieu de cela, l\u2019\u00e9quipe Go a encourag\u00e9 d\u2019autres personnes \u00e0 d\u00e9velopper des outils additionnels pour le contr\u00f4le de version des packages Go.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Cela a chang\u00e9 avec la sortie de Go\u00a01.11 en ao\u00fbt\u00a02018, avec la prise en charge des <\/span><span style=\"font-weight: 400\">modules Go<\/span><span style=\"font-weight: 400\">. Les modules Go, qui constituent d\u00e9sormais la solution de gestion des d\u00e9pendances native de GoLang, sont des collections de packages Go apparent\u00e9s qui sont versionn\u00e9s ensemble comme une seule entit\u00e9. Cela permet aux d\u00e9veloppeurs de partager du code sans avoir \u00e0 le t\u00e9l\u00e9charger de fa\u00e7on r\u00e9p\u00e9t\u00e9e.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Un module Go est d\u00e9fini par un fichier <code>go.mod<\/code> qui se trouve dans le r\u00e9pertoire racine du projet et qui sp\u00e9cifie le nom du module ainsi que ses d\u00e9pendances. La d\u00e9pendance d\u2019un module est repr\u00e9sent\u00e9e par son nom et son <\/span><a href=\"https:\/\/semver.org\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">num\u00e9ro de version<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Si vous n\u2019avez pas encore opt\u00e9 pour les modules Go, vous devez suivre les \u00e9tapes ci-dessous\u00a0:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Si des gestionnaires de packages pr\u00e9c\u00e9dents ont \u00e9t\u00e9 utilis\u00e9s, utilisez <code>go mod init<\/code> pour g\u00e9n\u00e9rer un fichier <code>go.mod<\/code> .<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Si des gestionnaires de packages pr\u00e9c\u00e9dents ont \u00e9t\u00e9 utilis\u00e9s, utilisez <code>go mod tidy<\/code> . Cette commande g\u00e9n\u00e8re un fichier go.mod d\u00e9j\u00e0 rempli.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">\u00c0 partir de la version\u00a02, le nom du module doit \u00eatre modifi\u00e9 pour ajouter le suffixe correspondant, le chemin d\u2019importation doit \u00eatre mis \u00e0 jour, des outils d\u2019analyse statique adapt\u00e9s au module doivent \u00eatre utilis\u00e9s et les fichiers du g\u00e9n\u00e9rateur de code, tels que les fichiers <code>.proto<\/code> , doivent \u00eatre mis \u00e0 jour pour refl\u00e9ter le nouveau chemin d\u2019importation.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Par exemple, voici un fichier <code>go.mod<\/code> pour un module Go accessible au public <\/span><a href=\"https:\/\/github.com\/sirupsen\/logrus\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">pour un logger structur\u00e9<\/span><\/a><span style=\"font-weight: 400\">\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">module github.com\/sirupsen\/logrus\r\n\r\nrequire (\r\n\tgithub.com\/davecgh\/go-spew v1.1.1 \/\/ indirect\r\n\tgithub.com\/konsorten\/go-windows-terminal-sequences v1.0.1\r\n\tgithub.com\/pmezard\/go-difflib v1.0.0 \/\/ indirect\r\n\tgithub.com\/stretchr\/objx v0.1.1 \/\/ indirect\r\n\tgithub.com\/stretchr\/testify v1.2.2\r\n\tgolang.org\/x\/sys v0.0.0-20190422165155-953cdadca894\r\n)<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Notez que les num\u00e9ros de version doivent \u00eatre conformes \u00e0 la <\/span><a href=\"https:\/\/golang.org\/cmd\/go\/#hdr-Module_compatibility_and_semantic_versioning\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">convention semver <\/span><\/a><span style=\"font-weight: 400\"> (par exemple, v1.2.1 ou 1.2.1 au lieu de 20190812) comme requis par la commande go. Vous devez \u00e9viter d\u2019utiliser des pseudo-versions comme celle pr\u00e9sent\u00e9e ci-dessus (v0.0.0-yyyymmddhhmmss-abcdefabcdef)\u00a0\u2013\u00a0bien que les pseudo-versions de type \u00ab\u00a0commit hash\u00a0\u00bb aient \u00e9t\u00e9 introduites pour assurer la prise en charge des modules Go dans les projets non balis\u00e9s, elles ne doivent \u00eatre utilis\u00e9es que comme m\u00e9canisme de repli. Si les d\u00e9pendances dont vous avez besoin ont des balises de version, utilisez ces balises dans votre fichier.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Vous pouvez importer ce module Go dans votre propre code, ainsi que d\u2019autres d\u00e9pendances\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">import (\r\n\t(&quot;fmt&quot;\r\n\t&quot;io\/ioutil&quot;\r\n\t&quot;net\/http&quot;\r\n\t&quot;os&quot;\r\n\r\n\/\/ Public Go Module for logging\r\n\tlog &quot;github.com\/sirupsen\/logrus&quot;)\r\n<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Vous pouvez alors r\u00e9f\u00e9rencer les fonctions du module dans votre code GoLang\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">   \/\/ Send text to the log\r\n   log.Printf(&quot;Hello Log!&quot;)<\/span><\/pre>\n<\/div>\n<h2><span style=\"font-weight: 400\">2. Utiliser GOPROXY pour Garantir l\u2019Immuabilit\u00e9 et la Disponibilit\u00e9<\/span><\/h2>\n<p><span style=\"font-weight: 400\">D\u00e8s lors que vous g\u00e9rez vos d\u00e9pendances GoLang en tant que modules versionn\u00e9s, vous pouvez les conserver en tant qu\u2019entit\u00e9s immuables en configurant un GOPROXY. De cette fa\u00e7on, vous pouvez toujours vous assurer de ce que contient une version sp\u00e9cifique d\u2019un module, afin que vos builds soient toujours reproductibles.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Utiliserez-vous des modules Go qui sont des packages open source accessibles au public\u00a0? Ceux que vous cr\u00e9ez et partagez avec la communaut\u00e9 OSS\u00a0? Les modules que vous r\u00e9servez \u00e0 votre \u00e9quipe uniquement\u00a0? Voici comment proc\u00e9der pour chacun d\u2019eux, ou pour tous en m\u00eame temps, et faire en sorte que ces modules versionn\u00e9s immuables soient toujours disponibles pour vos builds.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">GOLANG.ORG<\/span><\/h3>\n<p><span style=\"font-weight: 400\">L\u2019\u00e9quipe Go de Google g\u00e8re un ensemble de services GOPROXY pour les modules accessibles au public. \u00c0 partir de Go 1.13, le serveur de modules <code>proxy.golang.org<\/code> est automatiquement d\u00e9fini comme le GOPROXY par d\u00e9faut lorsque Go est install\u00e9 ou mis \u00e0 jour. Ce service est \u00e9galement pris en charge par un service d\u2019index pour d\u00e9couvrir les nouveaux modules (<code>index.golang.org<\/code>), et une base de donn\u00e9es globale go.sum pour authentifier le contenu des modules (<code>sum.golang.org<\/code>).<\/span><\/p>\n<p><span style=\"font-weight: 400\">Le <\/span><a href=\"https:\/\/go.dev\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">site go.dev <\/span><\/a><span style=\"font-weight: 400\">est \u00e9galement g\u00e9r\u00e9 par l\u2019\u00e9quipe Go, il est la plaque tournante pour les utilisateurs Go fournissant des ressources centralis\u00e9es et organis\u00e9es de l\u2019ensemble de l\u2019\u00e9cosyst\u00e8me Go. Une interface utilisateur conviviale vous permet d\u2019explorer <\/span><a href=\"https:\/\/pkg.go.dev\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">pkg.go.dev<\/span><\/a><span style=\"font-weight: 400\"> pour effectuer des recherches parmi des milliers de packages Go open source.<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-74281\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/28005948\/GoLangCICD_go_dev.png\" alt=\"\" width=\"827\" height=\"598\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/28005948\/GoLangCICD_go_dev.png?speedsize=w_827 827w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/28005948\/GoLangCICD_go_dev.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/28005948\/GoLangCICD_go_dev.png?speedsize=w_768 768w\" sizes=\"(max-width: 827px) 100vw, 827px\" \/><\/p>\n<h3><span style=\"font-weight: 400\">Registres Go\u00a0Artifactory<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Le partage est une bonne chose, mais vous devrez probablement limiter l\u2019utilisation de certains modules Go que vous cr\u00e9ez au sein de votre organisation. Avec Artifactory, vous pouvez configurer des <\/span><a href=\"https:\/\/jfrog.com\/fr\/integration\/go-registry\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">registres Go<\/span><\/a><span style=\"font-weight: 400\"> locaux et distants, rendant ainsi des modules publics et priv\u00e9s \u00e9galement disponibles pour vos builds.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Vous pouvez relayer le service central Go en tant que registre Go distant dans Artifactory, fournissant \u00e0 votre syst\u00e8me de g\u00e9n\u00e9ration un cache local qui acc\u00e9l\u00e8re encore plus vos builds et vous prot\u00e8ge contre les pannes de connexion r\u00e9seau. La mise en place est simple.<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-47298\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/28010145\/GoLangCICD_GoRegistry.png\" alt=\"Artifactory Go Registry\" width=\"1023\" height=\"344\" data-wp-editing=\"1\" \/><\/p>\n<p><span style=\"font-weight: 400\">Vous pouvez \u00e9galement configurer un ou plusieurs registres Go locaux pour les modules que vous devez g\u00e9rer en priv\u00e9 au sein de votre organisation.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Lorsque vous combinez des registres locaux et distants dans un <\/span><a href=\"https:\/\/www.jfrog.com\/confluence\/display\/RTF\/Virtual+Repositories\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">d\u00e9p\u00f4t virtuel<\/span><\/a><span style=\"font-weight: 400\">, vos builds peuvent r\u00e9soudre les d\u00e9pendances des modules Go provenant \u00e0 la fois d\u2019une source publique et des modules que vous cr\u00e9ez et g\u00e9rez en priv\u00e9.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Vous pouvez en savoir plus sur la fa\u00e7on de configurer vos d\u00e9p\u00f4ts GOPROXY pour Artifactory gr\u00e2ce \u00e0 cet article de blog sur comment <\/span><a href=\"https:\/\/jfrog.com\/fr\/blog\/why-goproxy-matters-and-which-to-pick\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Choisir votre GOPROXY pour les modules Go<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">3. Utiliser les Topologies du D\u00e9p\u00f4t\u00a0Artifactory<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Lorsque vous assemblez votre application (\u00e0 l\u2019aide de <code>go build<\/code>), o\u00f9 les artefacts binaires g\u00e9n\u00e9r\u00e9s seront-ils stock\u00e9s\u00a0? Votre processus de g\u00e9n\u00e9ration peut envoyer ces r\u00e9sultats interm\u00e9diaires aux d\u00e9p\u00f4ts dans un gestionnaire de d\u00e9p\u00f4ts binaires tel qu\u2019Artifactory.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Pour ces artefacts Go interm\u00e9diaires, vous utiliserez les d\u00e9p\u00f4ts g\u00e9n\u00e9riques d\u2019Artifactory. En structurant ces d\u00e9p\u00f4ts de mani\u00e8re intelligente, vous pouvez contr\u00f4ler le flux de vos fichiers binaires pour le d\u00e9veloppement, les tests et la production, gr\u00e2ce \u00e0 des d\u00e9p\u00f4ts distincts pour chacune de ces \u00e9tapes. Pour ce faire, utilisez la fonctionnalit\u00e9 <\/span><a href=\"https:\/\/www.jfrog.com\/confluence\/display\/RTF\/Repository+Layouts\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Topologie du d\u00e9p\u00f4t personnalis\u00e9 (Custom Layout)<\/span><\/a><span style=\"font-weight: 400\"> pour Artifactory avec ces d\u00e9p\u00f4ts g\u00e9n\u00e9riques.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Cr\u00e9er une topologie personnalis\u00e9e similaire \u00e0 la suivante\u00a0:<\/span><\/p>\n<pre style=\"background: #e0e0e0;padding-left: 20px\">[org]\/[name&lt;.+&gt;]\/[module]-[arch&lt;.+&gt;]-[baseRev].[ext]<\/pre>\n<p><span style=\"font-weight: 400\">Lorsque vous <\/span><a href=\"https:\/\/www.jfrog.com\/confluence\/display\/RTF\/Repository+Layouts#RepositoryLayouts-Configuration\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">configurez la topologie personnalis\u00e9e<\/span><\/a><span style=\"font-weight: 400\">, il convient de tester la r\u00e9solution du chemin d\u2019acc\u00e8s \u00e0 l\u2019artefact pour confirmer comment Artifactory g\u00e9n\u00e9rera les informations du module \u00e0 partir du chemin d\u2019acc\u00e8s en utilisant les d\u00e9finitions de la topologie.<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-47299\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GoLangCICD_TestCustomLayout-1024x523.png\" alt=\"\" width=\"799\" height=\"408\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GoLangCICD_TestCustomLayout.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GoLangCICD_TestCustomLayout.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GoLangCICD_TestCustomLayout.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130640\/GoLangCICD_TestCustomLayout.png?speedsize=w_1426 1426w\" sizes=\"(max-width: 799px) 100vw, 799px\" \/><\/p>\n<h2><span style=\"font-weight: 400\">4. Assembler une Fois et Promouvoir<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Une fois vos d\u00e9p\u00f4ts configur\u00e9s comme il se doit pour vos builds Go, vous pouvez commencer \u00e0 les d\u00e9placer efficacement dans vos \u00e9tapes de pipeline.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">De nombreuses proc\u00e9dures de d\u00e9veloppement logiciel n\u00e9cessitent un nouveau build complet ou partiel \u00e0 chaque transition interm\u00e9diaire de d\u00e9veloppement, de test et de production. Mais comme les d\u00e9veloppeurs continuent de modifier le code partag\u00e9, chaque nouveau build introduit de nouvelles incertitudes\u00a0; vous ne pouvez pas \u00eatre certain de son contenu. M\u00eame avec des sauvegardes pour garantir des builds d\u00e9terministes, les m\u00eames contr\u00f4les de qualit\u00e9 doivent \u00eatre r\u00e9p\u00e9t\u00e9s \u00e0 chaque \u00e9tape.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Au lieu de cela, cr\u00e9ez vos microservices bas\u00e9s sur Go une fois, puis promouvez-les \u00e0 l\u2019\u00e9tape suivante une fois que les crit\u00e8res de promotion tels que les tests ou les analyses sont remplis. Si vous pr\u00e9voyez de conteneuriser votre microservice Go, le m\u00eame principe s\u2019applique\u00a0: assemblez chaque image Docker une fois et promouvez-la via une s\u00e9rie de d\u00e9p\u00f4ts de staging De cette fa\u00e7on, vous vous assurez que ce qui a \u00e9t\u00e9 test\u00e9 est exactement ce qui sera mis en production.<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-27225\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2017\/12\/20133601\/DockerPipeline2.png\" alt=\"Build Promotion\" width=\"900\" height=\"549\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2017\/12\/20133601\/DockerPipeline2.png?speedsize=w_900 900w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2017\/12\/20133601\/DockerPipeline2.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2017\/12\/20133601\/DockerPipeline2.png?speedsize=w_768 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<h2><span style=\"font-weight: 400\">5. \u00c9viter les Pipelines Monolithiques<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Au lieu d\u2019un pipeline unique et monolithique pour votre application, il est pr\u00e9f\u00e9rable d\u2019en avoir plusieurs, chacun assemblant, testant, analysant et promouvant une couche diff\u00e9rente. Cela contribue \u00e0 rendre votre processus CI\/CD plus flexible, avec diff\u00e9rentes \u00e9quipes responsables de chaque couche, et favorise un syst\u00e8me \u00ab\u00a0fail fast\u00a0\u00bb qui permet une r\u00e9action rapide aux erreurs.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Par exemple, le d\u00e9ploiement d\u2019une application conteneuris\u00e9e peut g\u00e9n\u00e9ralement \u00eatre compos\u00e9 de cinq pipelines\u00a0:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/jfrog.com\/fr\/blog\/using-the-jfrog-cli-to-create-go-modules\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Assemblez l\u2019application Go \u00e0 l\u2019aide de l\u2019interface de ligne de commande JFrog\u00a0CLI<\/span><\/a><span style=\"font-weight: 400\">. Ce pipeline extrait le code source\u00a0; assemble l\u2019application avec des d\u00e9p\u00f4ts Artifactory pour les d\u00e9pendances et les fichiers binaires de sortie\u00a0; puis teste et promeut \u00e0 partir d\u2019un d\u00e9p\u00f4t dev vers un d\u00e9p\u00f4t de staging dans Artifactory.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Assemblez une couche de base de l\u2019application conteneuris\u00e9e, par exemple une infrastructure Docker. Des balises statiques ou dynamiques peuvent \u00eatre utilis\u00e9es en fonction des strat\u00e9gies de risque et de mise \u00e0 niveau de l\u2019entreprise. Par exemple, si une balise dynamique telle que <code>alpine:3.10<\/code> est utilis\u00e9 comme couche de base de l\u2019infrastructure Docker, alors toutes les mises \u00e0 jour de correctifs seront incluses chaque fois que l\u2019infrastructure Docker est g\u00e9n\u00e9r\u00e9e. Ce pipeline comprendra des \u00e9tapes de build, de test et de promotion.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Extrayez les artefacts promus produits par les pipelines pr\u00e9c\u00e9dents et g\u00e9n\u00e9rez une application conteneuris\u00e9e, qui comportera \u00e9galement des \u00e9tapes de build, de test, d\u2019analyse et de promotion.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"><a href=\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/\">Assemblez un chart Helm<\/a> qui pointe vers une version balis\u00e9e statiquement et promue d\u2019une application conteneuris\u00e9e produite par le pipeline pr\u00e9c\u00e9dent.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">D\u00e9ployez l\u2019application Go conteneuris\u00e9e vers Kubernetes en utilisant le chart Helm.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Artifactory agit comme votre \u00ab\u00a0source de v\u00e9rit\u00e9\u00a0\u00bb pour vos builds Go, en fournissant un GOPROXY pour les modules publics et priv\u00e9s, ainsi qu\u2019en stockant les fichiers binaires compil\u00e9s. L\u2019utilisation de JFrog\u00a0CLI pour assembler votre application Go aide le processus de g\u00e9n\u00e9ration \u00e0 interagir avec Artifactory et \u00e0 capturer les informations de build qui rendent vos builds enti\u00e8rement tra\u00e7ables. Voici un exemple d\u2019extrait\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">\/\/ Configure Artifactory\r\njfrog rt c\r\n\r\n\/\/ Configure the project\u2019s repositories\r\njfrog rt go-config\r\n\r\n\/\/ Build the project with go and resolve the project dependencies\r\nfrom Artifactory.\r\nJfrog rt go build --build-name=my-build --build-number=1\r\n\r\n\/\/ Publish the package we build to Artifactory.\r\njfrog rt gp go v1.0.0 --build-name=my-build --build-number=1\r\n\r\n\/\/ Collect environment variables and add them to the build info.\r\njfrog rt bce my-build 1\r\n\r\n\/\/ Publish the build info to Artifactory.\r\njfrog rt bp my-build 1<\/span><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Pour en savoir plus, jetez un coup d\u2019\u0153il \u00e0 notre <\/span><a href=\"https:\/\/github.com\/jfrogtraining\/swampup2019\/tree\/gophercon\/su-121-golang-cicd\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">exemple de fichiers de d\u00e9monstration pour GoLang CI\/CD<\/span><\/a><span style=\"font-weight: 400\"> que nous utiliserons \u00e0 GopherCon.<\/span><\/p>\n<h1><span style=\"font-weight: 400\">Boldly Go<\/span><\/h1>\n<p><span style=\"font-weight: 400\">Comme vous pouvez le constater, quelques bonnes pratiques simples dans la gestion de vos applications GoLang peuvent faciliter la voie vers un CI\/CD efficace. Et Artifactory, en tant que gestionnaire essentiel de votre cha\u00eene d\u2019approvisionnement d\u2019artefacts logiciels, peut jouer un r\u00f4le central en aidant \u00e0 int\u00e9grer ces m\u00e9thodes dans votre pipeline de d\u00e9veloppement logiciel.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Des questions\u00a0? Nous serons heureux d\u2019y r\u00e9pondre \u00e0 Gophercon\u00a0; rejoignez-nous pour explorer les meilleurs moyens de publier vos applications Go rapidement et avec une qualit\u00e9 optimale. Ou vous pouvez commencer \u00e0 essayer de les mettre en pratique avec une <\/span><a href=\"https:\/\/jfrog.com\/fr\/artifactory\/free-trial\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">version d\u2019essai gratuite d\u2019Artifactory<\/span><\/a><span style=\"font-weight: 400\">\u00a0!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour les d\u00e9veloppeurs utilisant des langages \u00e9tablis de longue date comme Java, JavaScript ou Python, la meilleure fa\u00e7on d\u2019assembler des workflow d\u2019int\u00e9gration et de livraison continues (CI\/CD) avec Artifactory est assez famili\u00e8re. Un ensemble mature de syst\u00e8mes de gestion des d\u00e9pendances pour ces langages et des solutions de conteneurs comme Docker fournissent une feuille de &hellip;<\/p>\n","protected":false},"author":140,"featured_media":47309,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[9403,9394,9387,9370],"tags":[9406,9405,9402,9398,9404,9371],"class_list":["post-80098","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-packages-fr","category-jfrog-cli-fr","category-gocenter-fr","category-artifactory-fr","tag-ci-cd-fr","tag-ci-fr","tag-go-fr","tag-modules-go","tag-livraison-continue","tag-meilleures-pratiques"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.6 (Yoast SEO v22.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>5\u00a0Meilleures Pratiques pour la Cr\u00e9ation de Pipelines CI\/CD pour les Applications GoLang | JFrog<\/title>\n<meta name=\"description\" content=\"Apprendre des techniques telles que\u00a0: l\u2019utilisation de modules Go pour les packages Go, les registres avec GOPROXY, les d\u00e9p\u00f4ts d\u2019artefacts, la promotion de build et plus encore avec JFrog\u00a0Artifactory.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/80098\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"5\u00a0Meilleures Pratiques pour les Pipelines CI\/CD avec GoLang\" \/>\n<meta property=\"og:description\" content=\"Apprendre \u00e0 utiliser les modules Go, les d\u00e9p\u00f4ts et registres Artifactory et plus encore pour mettre en place un CI\/CD rapide et puissant.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/\" \/>\n<meta property=\"og:site_name\" content=\"JFrog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/artifrog\" \/>\n<meta property=\"article:published_time\" content=\"2021-08-16T09:31:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-16T09:32:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/jfrog.com\/wp-content\/uploads\/2019\/07\/GlangCICDsocial.png\" \/>\n<meta name=\"author\" content=\"giannit\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"5\u00a0Meilleures Pratiques pour les Pipelines CI\/CD avec GoLang\" \/>\n<meta name=\"twitter:description\" content=\"Apprendre \u00e0 utiliser les modules Go, les d\u00e9p\u00f4ts et registres Artifactory et plus encore pour mettre en place un CI\/CD rapide et puissant.\" \/>\n<meta name=\"twitter:creator\" content=\"@jfrog\" \/>\n<meta name=\"twitter:site\" content=\"@jfrog\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"giannit\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/\"},\"author\":{\"name\":\"giannit\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af\"},\"headline\":\"5\u00a0Meilleures Pratiques pour du CI\/CD avec GoLang\",\"datePublished\":\"2021-08-16T09:31:08+00:00\",\"dateModified\":\"2021-08-16T09:32:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/\"},\"wordCount\":2050,\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130638\/GlangCICD_204x148.png\",\"keywords\":[\"CI\/CD\",\"CI\",\"Go\",\"Modules Go\",\"livraison continue\",\"Meilleures Pratiques\"],\"articleSection\":[\"Packages\",\"JFrog CLI\",\"GoCenter\",\"Artifactory\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/\",\"url\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/\",\"name\":\"5\u00a0Meilleures Pratiques pour la Cr\u00e9ation de Pipelines CI\/CD pour les Applications GoLang | JFrog\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130638\/GlangCICD_204x148.png\",\"datePublished\":\"2021-08-16T09:31:08+00:00\",\"dateModified\":\"2021-08-16T09:32:51+00:00\",\"description\":\"Apprendre des techniques telles que\u00a0: l\u2019utilisation de modules Go pour les packages Go, les registres avec GOPROXY, les d\u00e9p\u00f4ts d\u2019artefacts, la promotion de build et plus encore avec JFrog\u00a0Artifactory.\",\"breadcrumb\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#primaryimage\",\"url\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130638\/GlangCICD_204x148.png\",\"contentUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130638\/GlangCICD_204x148.png\",\"width\":204,\"height\":148,\"caption\":\"Blog\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jfrog.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"5\u00a0Meilleures Pratiques pour du CI\/CD avec GoLang\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jfrog.com\/fr\/#website\",\"url\":\"https:\/\/jfrog.com\/fr\/\",\"name\":\"JFrog\",\"description\":\"Deliver Trusted Software Releases at Speed and Scale\",\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jfrog.com\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\",\"name\":\"JFrog\",\"url\":\"https:\/\/jfrog.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg\",\"contentUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg\",\"width\":74,\"height\":73,\"caption\":\"JFrog\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/artifrog\",\"https:\/\/x.com\/jfrog\",\"https:\/\/www.linkedin.com\/company\/455737\",\"https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg\",\"https:\/\/www.wikidata.org\/wiki\/Q98608948\"],\"description\":\"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.\",\"legalName\":\"Jfrog, Inc.\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1001\",\"maxValue\":\"5000\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af\",\"name\":\"giannit\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g\",\"caption\":\"giannit\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"5\u00a0Meilleures Pratiques pour la Cr\u00e9ation de Pipelines CI\/CD pour les Applications GoLang | JFrog","description":"Apprendre des techniques telles que\u00a0: l\u2019utilisation de modules Go pour les packages Go, les registres avec GOPROXY, les d\u00e9p\u00f4ts d\u2019artefacts, la promotion de build et plus encore avec JFrog\u00a0Artifactory.","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:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/80098","og_locale":"fr_FR","og_type":"article","og_title":"5\u00a0Meilleures Pratiques pour les Pipelines CI\/CD avec GoLang","og_description":"Apprendre \u00e0 utiliser les modules Go, les d\u00e9p\u00f4ts et registres Artifactory et plus encore pour mettre en place un CI\/CD rapide et puissant.","og_url":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/","og_site_name":"JFrog","article_publisher":"https:\/\/www.facebook.com\/artifrog","article_published_time":"2021-08-16T09:31:08+00:00","article_modified_time":"2021-08-16T09:32:51+00:00","og_image":[{"url":"https:\/\/jfrog.com\/wp-content\/uploads\/2019\/07\/GlangCICDsocial.png"}],"author":"giannit","twitter_card":"summary_large_image","twitter_title":"5\u00a0Meilleures Pratiques pour les Pipelines CI\/CD avec GoLang","twitter_description":"Apprendre \u00e0 utiliser les modules Go, les d\u00e9p\u00f4ts et registres Artifactory et plus encore pour mettre en place un CI\/CD rapide et puissant.","twitter_creator":"@jfrog","twitter_site":"@jfrog","twitter_misc":{"Written by":"giannit","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#article","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/"},"author":{"name":"giannit","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af"},"headline":"5\u00a0Meilleures Pratiques pour du CI\/CD avec GoLang","datePublished":"2021-08-16T09:31:08+00:00","dateModified":"2021-08-16T09:32:51+00:00","mainEntityOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/"},"wordCount":2050,"publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"image":{"@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130638\/GlangCICD_204x148.png","keywords":["CI\/CD","CI","Go","Modules Go","livraison continue","Meilleures Pratiques"],"articleSection":["Packages","JFrog CLI","GoCenter","Artifactory"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/","url":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/","name":"5\u00a0Meilleures Pratiques pour la Cr\u00e9ation de Pipelines CI\/CD pour les Applications GoLang | JFrog","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#primaryimage"},"image":{"@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130638\/GlangCICD_204x148.png","datePublished":"2021-08-16T09:31:08+00:00","dateModified":"2021-08-16T09:32:51+00:00","description":"Apprendre des techniques telles que\u00a0: l\u2019utilisation de modules Go pour les packages Go, les registres avec GOPROXY, les d\u00e9p\u00f4ts d\u2019artefacts, la promotion de build et plus encore avec JFrog\u00a0Artifactory.","breadcrumb":{"@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#primaryimage","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130638\/GlangCICD_204x148.png","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/07\/20130638\/GlangCICD_204x148.png","width":204,"height":148,"caption":"Blog"},{"@type":"BreadcrumbList","@id":"https:\/\/jfrog.com\/fr\/blog\/5-best-practices-for-golang-ci-cd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jfrog.com\/fr\/"},{"@type":"ListItem","position":2,"name":"5\u00a0Meilleures Pratiques pour du CI\/CD avec GoLang"}]},{"@type":"WebSite","@id":"https:\/\/jfrog.com\/fr\/#website","url":"https:\/\/jfrog.com\/fr\/","name":"JFrog","description":"Deliver Trusted Software Releases at Speed and Scale","publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jfrog.com\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/jfrog.com\/fr\/#organization","name":"JFrog","url":"https:\/\/jfrog.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg","width":74,"height":73,"caption":"JFrog"},"image":{"@id":"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/artifrog","https:\/\/x.com\/jfrog","https:\/\/www.linkedin.com\/company\/455737","https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg","https:\/\/www.wikidata.org\/wiki\/Q98608948"],"description":"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.","legalName":"Jfrog, Inc.","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1001","maxValue":"5000"}},{"@type":"Person","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af","name":"giannit","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g","caption":"giannit"}}]}},"_links":{"self":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/80098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/users\/140"}],"replies":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/comments?post=80098"}],"version-history":[{"count":3,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/80098\/revisions"}],"predecessor-version":[{"id":80101,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/80098\/revisions\/80101"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media\/47309"}],"wp:attachment":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media?parent=80098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/categories?post=80098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/tags?post=80098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}