5 Meilleures Pratiques pour du CI/CD avec GoLang

倒les développeurs utilant des languages établis de longue date comme Java, JavaScript ou Python, la meilleure façon d 'assembler des workflow d 'intégration et de livraison continuations (CI/CD) avecArtifactoryEst assez familière。Un ensemble mature de systèmes de gestion des dépendances pour ces languages etdes solutions de contenurs comme Docker福尼森特在克莱尔的路上。
在GoLang, est-il difficile de mettre in place un système CI/CD avec la même efficacité ?
Il s 'avère que le processus est bien plus facile, notamement grâce aux dernières innovations de Go。用le support natif d 'Artifactory pour GoLang,le chemin vers un CI/CD de qualité est beaucoup + dégagé。
«点击Tweet最佳的操作中
我的青蛙之家,我的伟大之家,我的语言之家,我的解决之道。我们的常识,我们的常识,我们的方法,我们的方法,CI/CD。关于实践和知识的声音:
1.Utiliser des Modules Go
contraiment à de nombreux languages de programation établis, les premières versions de GoLang ne fournissaient pas de mécanisme commun permeant de gérer les dépendances versionnées。Au lieu de cela, l ' équipe Go a encouragé d ' autres personnes à développer des outils additionnels pour le contrôle de version des packages Go。
Cela changé avec la sortie de Go 1.11 en août 2018, avec la prise en charge des模块去.Les modules Go, qui constituent désormais la solution de gestion des dépendances native de GoLang, sont des collections de packages Go apparentés qui sont versionnés ensemble comme une seule entité。Cela permet aux développeurs de partager du code sans avoir à le télécharger de façon répétée。
Un module Go est défini par Un fichiergo.mod我知道你在想什么répertoire你在想什么spécifie你在想什么dépendances。La dépendance d 'un模块est représentée par son nom et sonNuméro de版本.
Si vous n 'avez pas encore opté pour les modules Go, vous devez sure les étapes ci-dessous:
- Si des gestionaires de packages précédents ont été utilisés, utilisez
mod init倒générer UN fichiergo.mod. - Si des gestionaires de packages précédents ont été utilisés, utilisez
整理衣柜.茜特命令génère unfichier走。Mod déjà rempli。 - À partr de la version 2, le nom du module doit être modifié pour ajouter le后缀对应,le chemin d '进口doit être mis à jour, des outils d 'analyse statique adaptés au module doivent être utilisés et les fichiers du générateur de code, tels que les fichiers
.proto, doivent être mis à jour pour refléter le nouveau chemin d ' importer。
举例来说,voici un fichiergo.modpour un module Go accessible au public倒UN记录器structuré:
模块github.com/sirupsen/logrus require (github.com/davecgh/go-spew v1.1.1 //间接github.com/konsorten/go-windows-terminal-sequences v1.0.1 github.com/pmezard/go-difflib v1.0.0 //间接github.com/stretchr/objx v0.1.1 //间接github.com/stretchr/testify v1.2.2 golang.org/x/sys v0.0.0-20190422165155-953cdadca894)
Notez que les numéros de version doivent être conformes à la公约semver(例如,v1.2.1 ou 1.2.1 au lieu de 20190812) comme requis par la command go。Vous devez éviter d 'utiliser des伪版本comme celle présentée ci-dessus (v0.0.0-yyyymmddhhmmss-abcdefabcdef) - bien que les伪版本de type«commit hash»aient été introites pour assurela prise en charge des modules Go dans les projets non balisés, elles ne doivent être utilisées que comme mécanisme de repli。Si les dépendances你不知道该怎么做,该怎么做,该怎么做,该怎么做。
Vous pouvez进口商ce模块Go dans votre propre code, ainsi que d ' aures dépendances:
import (("fmt" "io/ioutil" "net/http" "os" // Public Go Module for logging log "github.com/sirupsen/logrus")
Vous pouvez alors référencer les functions du module dans votre code GoLang:
//发送文本到日志日志。Printf (" Hello日志!”)
2.utilizer GOPROXY pour Garantir l 'Immuabilité et la Disponibilité
Dès lors que vous gérez vos dépendances GoLang entant que modules versionnés, vous pouvez les conver entant qu 'entités immuables en configuration un GOPROXY。De cette façon, vous pouvez toujours vous assured De ce que continent une version spécifique d 'un module, afin que vos builds soient toujours reproductibles。
模块Go qui sont des包开放源代码可访问的公共?ceeux que vous créez et partagez avec la communauté OSS ?Les modules que vous réservez à votre équipe uniquement ?语音评论procéder pour chacun d 'eux, ou pour tous en même temps, et faire en sorte que ces modules versionnés immuables soient toujours disponibles pour vos builds。
GOLANG。ORG
L ' équipe Go de谷歌gère un ensemble de services GOPROXY pour les modules accessible au public。À partir de Go 1.13, le server de modulesproxy.golang.orgest automatiquement défini comme le GOPROXY par défaut lorsque Go est installé ou mis à jour。Ce service est également pris en charge par un service d 'index pour découvrir les nouveaux modules (index.golang.org), et une base de données global go。Sum pour authenticfier le contentu des modules (sum.golang.org).
勒网站go.devest également géré par l ' équipe去,il est la plaque tournante pour les utilisateurs Go fournissant des resources centralisées et organisées de l ' ensemble de l ' écosystème去。Une interface utilisateur conviviale vous permet d 'explorerpkg.go.devpour effectuer des recherches parmi des milliers de packages去开源。

Registres Go Artifactory
Le partage est une bonne choice, mais vous devrez概率限制器l ' use de cers modules Go que vous créez au sein de votre organisation。Avec Artifactory, vous pouvez configururer desregistres去Locaux et distants, rendant ainsi des modules publics et privés également disponibles pour vos builds。
Vous pouvez relayer le service central Go en tant que registry Go distance dans Artifactory, fournissant à votre système de génération un cache local qui accélère encore plus vos builds et Vous protège contre les pannes de connexion réseau。这里的约定最简单。

Vous pouvez également configurer un ou plusieurs registergo locaux pour les modules que Vous devez gérer en privé au sein de votre organisation。
你可以和我一起去远方得宝virtuel, vos构建peuvent résoudre les dépendances des modules Go provant à la fois d 'une source publique et des modules que vous créez et gérez en privé。
Vous pouvez en savoir + sur la façon de configurer vos dépôts GOPROXY pour Artifactory grâce à cet文章de博客sur评论GOPROXY pour les modules Go.
3.Utiliser les Topologies du Dépôt Artifactory
Lorsque vous assemblez votre application (à l’aide de去建立), où les artifacts binaires générés seront-ils stockés ?投票程序génération peut enyer ces résultats intermédiaires aux dépôts dans un gestionnaire de dépôts biaires tel qu 'Artifactory。
Pour ces artifacts Go intermédiaires, vous utiliserez les dépôts génériques d 'Artifactory。En structurant ces dépôts de manière intelligente, vous pouvez contrôler le flux de vos fichiers binaires pour le développement, les tests et la production, grâce à des dépôts distincts pour chacune de ces étapes。请尽情享受fonctionnalitéTopologie du dépôt personnalisé(自定义布局)倒Artifactory avec ces dépôts génériques。
Créer une topologie personnalisée similaire à la suivante:
[机构]/[名称< + >]。/(模块)-[拱< + >]。[baseRev]。[ext]
既然你们配置拓扑personnalisée, il convient de tester la résolution du chemin d 'accès à l ' artifact pour confirmer comment Artifactory générera les information du module à partir du chemin d 'accès en utilant les définitions de la topology。

4.汇编une Fois et Promouvoir
Une fois vos dépôts configurés comme il se doit pour vos构建Go, vous pouvez commencer à les déplacer efficacement dans vos étapes de pipeline。
De nombreuses procédures De développement logiciel nécessitent un nouveau build completeou partiel à chque transition intermédiaire De développement, De test et De production。Mais comme les développeurs continue de modifier le code partagé, chque nouveau build介绍de nouvelles不确定性;Vous ne pouvez pas être certain de son contenu。Même avec des sauvegardes pour garantir des builds déterministes, les mêmes contrôles de qualité doivent être répétés à chque étape。
Au lieu de cela, créez vos microservices basés sur Go une fois, puis promouvez-les à l ' étape suivante une fois que les critères de promotion tel que les tests ou les analyses sont remplis。Si vous prévoyez de conteneuriser votre微服务Go, le même principe s 'applique: assemblez chque image Docker une fois et promouvez-la via une série de dépôts de staging de cette façon, vous asssurez que ce qui a été testé est precision ce qui sera mis en production。

5.Éviter les管道巨石
Au lieu d 'un管道独特的et monolithique pour votre应用,il est préférable d 'en avoir plusieurs, chacun装配,测试者,分析者et promouvant une couche différente。Cela贡献à rendre votre过程CI/CD加上灵活,avec différentes équipes责任de chaque couche, et favorise un système«快速失败»qui permet une réaction快速错误。
例如,le déploiement d 'une应用程序conteneurisée peut généralement être composé de cinq管道:
- 汇编应用程序去à l 'aide de l 'interface de ligne de command JFrog CLI.Ce管道输出源码;组装l 'application avec des dépôts Artifactory pour les dépendances et les binaires de sortie;puis test et promeut à partir d 'un dépôt dev vers un dépôt de staging dans Artifactory。
- 组装une couche de base de l 'application conteneurisée,例如une infrastructure Docker。Des巴statiques ou dynamiques peuvent可能利用根据Des有伤风化的策略不吸烟者协定水平l商会。例如,si une balise dynamique tellle que
高山:3.10est utilisé comme couche de base de l 'infrastructure Docker, alors tout les mises à jour de correctifs seront incluses chque fois que l 'infrastructure Docker est générée。Ce pipeline compdra des étapes de build, de test et de promotion。 - Extrayez les artifact promus产品par les管道précédents et générez une应用conteneurisée, qui comportera également des étapes de build, de test, d 'analyse et de promotion。
- 装配海图舵Qui pointe vers une版本balisée statiquement et promue d 'une应用程序conteneurisée producite par pipeline précédent。
- Déployez l’application Go conteneurisée vers Kubernetes en utilant le chart Helm。
Artifactory agit comme votre«source de vérité»pour vos builds Go, en fournissant un GOPROXY pour les modules publics et privés, ainsi qu 'en stockant les fichiers binaires compilés。L 'utilisation de JFrog CLI pour assembler votre application Go aide le processsus de génération à interagir avec Artifactory et à capture les information de build qui rendent vos builds entièrement traçables。Voici un exit示例:
//配置Artifactory jfrog rt c //配置项目的存储库jfrog rt go-config //使用go构建项目,并从Artifactory解析项目依赖项。Jfrog rt go build——build-name=my-build——build-number=1 //发布我们构建的包到Artifactory。jfrog rt gp go v1.0.0——build-name=my-build——build-number=1 //收集环境变量并将它们添加到构建信息中。jfrog rt bce my-build 1 //发布构建信息到Artifactory。Jfrog rt bp my-build 1
Pour en savoir plus, jetez un coup d ' eureuril à notre例如de fichiers de démonstration pour GoLang CI/CDque nous utiliserons à GopherCon。
大胆地去
你是我的朋友,我是你的朋友,我是你的朋友,我是你的朋友,我是你的朋友。Et Artifactory, en tant que gestionnaire essentiel de votre chaîne d 'approvisionnement d ' artifact logiciels, peut jouer un rôle central en aidant à intégrer ces méthodes dan votre pipeline de développement logiciel。
有什么问题吗?头脑清醒répondre à Gophercon;欢愉的努斯pour探险家les meilleurs moyens de publier vos applications Go rapidement et avec une qualité optimale。你是一位杰出的评论家à在实践中我们是一位杰出的评论家版本d 'essai gratuite d 'Artifactory!