如何使用JFrog Artifactory和GoCenter一起构建Go应用程序

更新:截至2021年5月1日- GoCenter中央存储库已被淘汰,所有功能已弃用。有关中心日落的更多信息,请阅读中心弃用博客文章
作为一种云原生编程语言,Go正在迅速崛起。在StackOverflow Insights的最新调查中,Go排名第三最高通缉语言.Go也有一个充满活力的社区,它产生了一个相当出色的Go应用程序和模块列表,随着公共注册表的兴起,比如GoCenter,你可以有不变的依赖了。
为什么我们需要Go模块?
让我们先快速回顾一下我其他的博客的帖子为什么我们需要去模块首先。如果你不使用Go模块,而是使用供应商,克隆和构建你的项目所花费的时间将会增加,使你的最新更新推向生产更加耗时。没有Go模块,您的项目将永远不会真正具有可重复的构建。您可以使用模块的1.2版本构建项目,而第二天早上团队中的其他人可能会使用1.3版本。如果你依赖于其他软件,它需要不可变的防止开发人员,决定做一些实验,做出改变。没有Go模块,不可变性就无法保证。
如何创建Go模块?
根据您放置源代码的位置,您可能需要设置环境变量GO111MODULE.从Go 1.11开始,不再建议你把源代码放在你的GOPATH美元.但是,如果您仍然选择将代码放在您的GOPATH美元并且想要使用Go模块,你必须设置GO111MODULE来在.
使用实例创建Go模块。mod init <模块名称>.例如,创建一个名为“github.com/retgits/bla”命令是mod init github.com/retgits/bla.
要获取模板并创建应用程序的大纲,你需要运行两个命令:
模块github.com/retgits/bla
走1.12
您现在可以通过运行添加您所依赖的Go模块“去”.因为你想要有不可变的构建,你有两种方法从GoCenter获得你的模块,我们将看看他们:
- 使用一个名为goc的实用程序,它使用GoCenter中的模块构建Go应用程序,而不需要任何手动设置;
- 使用Artifactory并为您自己的模块以及从GoCenter代理的模块设置远程和虚拟存储库。
使用goc从GoCenter解析模块
goc实用程序自动设置GOPROXY环境变量到GoCenter。这意味着它绕过了其他代理,如Artifactory。Go客户端的当前行为是查看单个代理,如果没有从那里解析所有模块,则构建失败。作为首先查看GoCenter,如果模块不在GoCenter中,它将从其原始位置(如GitHub)获取模块。使用作为如果您只构建开源软件,并且不需要将自己的构建保存在某个安全的地方,那么这是非常好的。
使用Artifactory解析Go模块
如果希望使用Artifactory解析和缓存Go模块,则需要创建一个GoCenter的远程存储库.下一步是创建一个虚拟存储库其中包含GoCenter的远程存储库。要从Artifactory解析模块,有两个选项。您可以使用GOPROXY环境变量或JFrog命令行。
选项1:使用GOPROXY
可以将GOPROXY环境变量设置为指向虚拟存储库(例如,export GOPROXY="https://对于名为“go”的虚拟存储库)。
使用GOPROXY环境变量与使用的行为几乎相同作为.Go客户端将尝试解析来自Artifactory的所有Go模块。相应地,Artifactory将查看其本地和远程存储库,为您提供模块。虽然这对几乎所有的开发人员来说都很好,但你唯一不能做的就是将新的Go模块发布到Artifactory。
选项2:使用JFrog CLI
当你使用JFrog CLI为了构建你的Go应用程序,它将作为Go客户端的包装器工作。JFrog CLI使用Go客户端尝试从Artifactory解析所有的Go模块。相应地,Artifactory将查看其本地和远程存储库,并为您提供模块。JFrog CLI还会将尚未在Artifactory中的模块发布到Artifactory中,以便在未来的构建中可用。
JFrog CLI1.26.0对JFrog CLI调用Go客户端的方式进行了一些重大改变。从这个版本开始,现在支持与Go客户端使用的完全相同的语法,这对于构建Go管道的Go开发人员和DevOps工程师来说是个好消息。要开始使用这种新语法,并避免在每个命令末尾键入Artifactory服务器和存储库的名称,请运行Jfrog rt go-config生成配置数据的yaml文件:
$ jfrog rt go-config
设置Artifactory服务器ID(按Tab键选择选项)[myServer]: myServer
为依赖项解析设置存储库(按Tab键获得选项):go
将项目依赖部署到Artifactory (y/n) [y]?y
设置Artifactory服务器ID(按Tab键选择选项)[myServer]: myServer
为依赖部署设置存储库(按Tab键选择选项):go
[提示]Go build config成功创建。
这就意味着”jfrog rt go build -ldflags= ' -X " main.version=3″'将构建你的应用程序,解析所有来自“myServer”Artifactory实例上的“Go”存储库的Go模块。如果你想输入更少,你可以用别名青蛙不走“到”去”。这使您在使用Artifactory获取Go模块时不必对任何脚本进行任何更改。
接下来是什么?
如果您也想尝试这些步骤,但不想对您的Artifactory服务器进行更改,请查看我们的试驾选项.这将允许您访问在云中运行的Artifactory服务器4天,而不需要在本地机器上安装任何东西。像往常一样,让我知道你的想法,评论和反馈推特!
