Les Modules Go Sont Géniaux, Mais il y a un Petit Problème

Go Modules和JFrog CLI

编程语言和程序设计概念包和时间包和版本。L '优势des版本,qu 'elles soient utilisées par des outils ou non, est qu 'elles permeent aux développeurs de公报要求les dépendances nécessaires à la génération du product final。

代理ses débuts, Go a eu beaucoup de mal à gérer les versions, ce qui a conduit les développeurs à construcire leurs propres outils, commegb滑翔.Début 2017, l ' équipe Go a lancé Dep, qui constituait l 'expérience officielle de gestion des packages dans Go。Les leçons tirées de Dep, et d 'autres languages, ont conduit à la proposition officielle des模块去qui ont été介绍了dans Go 1.11。

Alors, quel est le problème ?

Ne vous méprenez pas, je suis très enthousiaste à引言模块去汽车ils résolvent UN tas de problèmes。理智éloigne également你的观念Gestion des fournisseurs.Soyons honnêtes,查询花园副本来源dépendance dans son project, risquer de perdre tout les dépendances (nous avons appris deleft-pad, n 'est-ce pas ?) ou voir ses collègues essayer UN peu les nouvelles versions ?

Ce sont là autant de problèmes que les modules Go résolvent, et ils introisent même une variable d’environment appeléeGOPROXYdéveloppeurs特使通过联合国代理提出téléchargement模块要求。En soi, c 'est évidemment génial pour les entreprises qui veulent garder un cache des versions (et ne pas télécharger la dépendance à chque fois), garder un euril sur la sécurité (et limiter l 'accès à Internet depuis leurs serveurs de build), et bien d ' aures raisons。Il y a juste un petit problème, cependant。Le GOPROXY est困难可利用。

Le problème avec GOPROXY

实际,l 'utilisation de GOPROXY est unexercise de style«tout ou rien»。Cela signifie que toutes les dépendances de l 'ensemble de votre arborescence de dépendances(直接和传递物)doivent être résolues à partir de ce server proxy et que le client Go échouera si l 'une des dépendances n 'est pas présente dans ceRegistre去

我的术语,我的术语就是新的应用labstack /回声v3.3.5等dgrijalva / jwt-goV3.2.0丹儿子费希尔去。mod et exécute go install avec la variable GOPROXY, le client go échouera à moins que les deux modules, leurs versions reques et toutes leurs dépendances transitives soient disponibles sur ce proxy。Ainsi, à moins d ' être绝对特定的树木集合dépendances peut être résolue à服务器代理的一方,qui peut être外部的内部,接近功能的部分。

安全解决方案

Comme pour tout problème, il doit exister une solution, n 'est-ce pas ?效果!En fait, la solution exist déjà。Un fil de discussion dans le dépôtGolangsur GitHub (lancé par Aaron Schlesinger de l ' équipe d 'Athènes), décrit le problème et la solution pour permettre aux proxy de ne fournir que某些模块。我的例子précédent,我的两个模块都是不可替代的,我的代理,我的作品,我的作品。Un module sera téléchargé à partir du proxy et l 'autre sera téléchargé à partir d 'un système de contrôle de version。

La possibilité de处置者d 'une telle解决方案de secours résoudrait une party du problème。当然可以,来吧雅典, seront en measurement de conconire des fichiers go。Mod vides à partir de ces demandes non résolues, ce qui provoque à son tour d ' aures problèmes。

最终解决方案

La solution idéale permettrait aux utilisateurs de spécifier leur GOPROXY, d 'utiliser des solution de secours au cas où le module ne serait pas pas pas pas quest est important, de télécharger ces modules sur le proxy。Cette approche signifie que le téléchargement d 'une version d 'un module ne sera effectué que par un seul développeur et qu 'il sera ensuite disponible dans le server proxy pour être utilisé par d ' aures développeurs et servers CI。Étant donné que ceres enterprises ne permeent pas à leurs servers de CI de se connecter à Internet, cela résoudrait vraiment le problème et rendrait les modules Go irréprochables pour les développeurs。Si vous vous demandez à quoi cela peut ressembler, consultezCLI JFrogQui intègre toute cette loggique。我有一种对某些事物的意识,对某些事物的意识caractéristique语言的意识lui-même....