0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于Gitlab私有仓库建设的实践

马哥Linux运维 来源:进击云原生 作者:进击云原生 2022-03-16 08:48 次阅读

本文介绍了 Gitlab 私有仓库建设的实践。

包管理是 Go 一直被诟病做的不好的功能。在 1.11 之前,go get 缺乏对依赖包版本管理和 reproducible build 的支持。当时在 Go 社区当时诞生了许多好用的工具,比如 glide,dep 等。在 1.11 版本之后, Go 引入了 Go Module,再也没有 GOPATH 的限制,你可以随意在任何路径写项目,但是此时对私有仓库的支持还不是很好。而在 1.13 版本之后, Go 对 Go Module 又进行了优化,支持了GOPRIVATE环境变量,可以指定私有仓库的地址,使用十分便捷。大家在使用过程中,或多或少地会遇到一些问题,下面我针对自己遇到的问题进行总结。

go get

如果在没有进行任何设置的情况下直接执行go get your.gitlab.com/pkg/example,你很可能会遇到以下错误:

goget:moduleyour.gitlab.com/pkg/example:gitls-remote-qoriginin/go/pkg/mod/cache/vcs/a39fc2dbfb0a9645950d24df5d7e922bb7a6a877aecfe2b20f74b96385a83109:exitstatus128:
fatal:couldnotreadUsernamefor'https://your.gitlab.com':terminalpromptsdisabled
Confirmtheimportpathwasenteredcorrectly.
Ifthisisaprivaterepository,seehttps://golang.org/doc/faq#git_httpsforadditionalinformation.

其实错误提示已经把解决方案给到我们了,我们只需要点击 golang.org/doc/faq#git_https 查看即可。

下面是原文:

Why does “go get” use HTTPS when cloning a repository?

Companies often permit outgoing traffic only on the standard TCP ports 80 (HTTP) and 443 (HTTPS), blocking outgoing traffic on other ports, including TCP port 9418 (git) and TCP port 22 (SSH). When using HTTPS instead of HTTP, git enforces certificate validation by default, providing protection against man-in-the-middle, eavesdropping and tampering attacks. The go get command therefore uses HTTPS for safety.

Git can be configured to authenticate over HTTPS or to use SSH in place of HTTPS. To authenticate over HTTPS, you can add a line to the $HOME/.netrc file that git consults:

machinegithub.comloginUSERNAMEpasswordAPIKEY

For GitHub accounts, the password can be a personal access token. Git can also be configured to use SSH in place of HTTPS for URLs matching a given prefix. For example, to use SSH for all GitHub access, add these lines to your ~/.gitconfig:

[url"ssh://git@github.com/"]
insteadOf=https://github.com/

大概意思是,HTTPS 更安全,所以go get命令使用 HTTPS。

如果你要用 HTTPS,那你就需要配置 HTTPS 的用户名和密码:

machinegithub.comloginUSERNAMEpasswordAPIKEY

当然也可以使用 ssh,需要修改你的 git 配置,

修改当前用户的~/.gitconfig,添加:

[url"ssh://git@your.gitlab.com/"]
insteadOf=https://your.gitlab.com/

另外执行下面的命令也能达到同样的效果:

gitconfig--globalurl."git@your.gitlab.com/".insteadof"https://your.gitlab.com/"

操作完之后,我们就可以使用go get了,使用go get -v可以展示执行日志。

GONOPROXY

众所周知,国内用户大多设置代理,我们在 Go 1.12 之前如果使用GOPROXY这个环境变量设置代理,并使用私有仓库,很有可能会遇到下面的错误:

gogetyour.gitlab.com/pkg/example:moduleyour.gitlab.com/pkg/example:
readinghttps://goproxy.cn/your.gitlab.com/pkg/example/@v/list:404NotFound

这是因为代理服务不可能访问到我们的私有代码仓库,所以报错 404。而且,就算使用上文提到的ssh鉴权也不行。

Go 1.13 后可以设置GONOPROXY这个环境变量来指定不使用代理的域名,支持逗号分隔多个值。

GONOSUMDB

go mod 需要对下载后的依赖包进行 checksum 校验,当你的 git 仓库是开放的话没问题,但是如果是不可访问的私有仓库,甚至在公司内网。很可能出现校验失败的错误:

get"your.gitlab.com/pkg/example":foundmetatagget.metaImport{Prefix:"your.gitlab.com/pkg/example",VCS:"git",RepoRoot:"https://your.gitlab.com/pkg/example.git"}at//your.gitlab.com/pkg/example?go-get=1
verifyingyour.gitlab.com/pkg/example@v0.0.0:your.gitlab.com/pkg/example@v0.0.0:readinghttps://sum.golang.org/lookup/your.gitlab.com/pkg/example@v0.0.0:410Gone

和代理一样,我们的私有仓库对 sum.golang.org 是不可见的,所以肯定没办法执行安全校验。

同样的在 Go 1.13 后可以设置GONOSUMDB环境变量指定跳过校验的的域名,支持逗号分割多个值。

GOPRIVATE

最后 Go 1.13 还引入的GOPRIVATE环境变量,可以说设置后一劳永逸,能自动跳过 proxy server 和 校验检查, 这个变量值也支持逗号分割,可以填写多个值,如:

GOPRIVATE=*.corp.example.com,your.gitlab.com

当然,设置GOPRIVATE之后,还可以在通过GONOPROXYGONOSUMDB来单独进行控制,

不过需要注意下GOPRIVATE失效的问题,

举个例子,如果公司内部有私有仓库:your.corp.com,如果这样设置:

GOPRIVATE=your.corp.com
GOPROXY=https://goproxy.cn
GONOPROXY=none

因为GONOPROXY的值是none,那么用户还是会从GOPROXY的地址下载所有私有和共有的仓库, 此时可能还是会报错,GONOSUMDB同理,大家注意一下这个问题。

原文标题:Go module 使用 Gitlab 私有仓库

文章出处:【微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 功能
    +关注

    关注

    3

    文章

    589

    浏览量

    29270
  • 管理
    +关注

    关注

    2

    文章

    384

    浏览量

    26397
  • 工具
    +关注

    关注

    4

    文章

    311

    浏览量

    27795

原文标题:Go module 使用 Gitlab 私有仓库

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    《开关电源设计与调试》课程建设实践与探索

    《开关电源设计与调试》课程建设实践与探索,《开关电源设计与调试》课程建设实践与探索
    发表于 06-15 23:36

    【新功能】企业级Maven私有仓库服务结束公测,全面开放使用

    摘要: 目前云效上线了企业级Maven私有仓库服务。用户可以一键开通Maven私有仓库服务,零配置实现私有二方库的上传和下载。经过半个月的公
    发表于 06-20 15:50

     华为云ServiceStage完美支持多个主流源码托管仓库

    网站,或是以公司内部搭建的GitLab托管仓库,ServiceStage皆可轻松搞定。   至于Bitbucket,虽不及GitHub等平台出众,但其可创建免费的私有仓库,或许能俘获部
    发表于 08-03 13:58

    Gitlab安装及集成LDAP

    sshdsystemctl start sshd 安装Gitlab-ce版本 我们使用云厂商的负载均衡器,所以这边没有配置https,如果需要配置https请查看HTTPS配置 # 添加仓库curl
    发表于 07-09 06:28

    基于Linux系统的私有镜像仓库搭建

    【docker】基于Harbor搭建自己的私有镜像仓库-全过程详解
    发表于 09-19 08:59

    关于小流域防灾预警体系建设实践与思考

    关于小流域防灾预警体系建设实践与思考概述: 小流域是防台减灾的薄弱环节. 临海小流域溪坝损毁占整个水利损失的一大部分, 成为整个防洪体系中的最薄弱
    发表于 04-21 16:16 20次下载

    GitHub宣布无限制的免费为普通用户提供私有仓库服务

    尽管私有仓库以后可以免费创建,但服务还是有限的,免费私有仓库最多只能添加三个协同操作者,而且免费版服务没有高级代码审查工具。显然,这不太适合大的商业项目,所以大团体做项目管理还是需要付
    的头像 发表于 01-10 10:32 3045次阅读
    GitHub宣布无限制的免费为普通用户提供<b class='flag-5'>私有</b><b class='flag-5'>仓库</b>服务

    公共云与私有云的区别及应用

    随着云计算服务和实践的成熟,也许是时候重新考虑一些长期以来关于私有云和公共云模型的假设了。
    的头像 发表于 02-18 17:22 2649次阅读

    Docker Gitlab Gitlab环境的Docker映像

    ./oschina_soft/docker-gitlab.zip
    发表于 05-13 10:37 0次下载
    Docker <b class='flag-5'>Gitlab</b> <b class='flag-5'>Gitlab</b>环境的Docker映像

    极狐GitLab的安装指南

    极狐 GitLab 测试了搭载 Ampere Altra 处理器的腾讯 SR1 实例,从 15.2.0 开始正式支持 ARM。极狐 GitLab 原文如下。
    的头像 发表于 08-18 11:17 2395次阅读

    私有镜像仓库Harbor极简搭建指南(HTTP版)

    本文简要介绍私有镜像仓库 Harbor 的搭建指南(HTTP 版),以及使用方法。搭建部分主要参考官网。本文基于以下版本:
    的头像 发表于 05-05 14:41 1804次阅读

    极狐GitLab—新一代源代码管理仓库

    极狐GitLab是一款具有软件开发全生命周期的DevOps能力的新一代源代码管理仓库,无缝集成代码托管、敏捷管理、CI/CD,从需求管理到应用上线能够形成数据的完整串联。极狐GitLab具有高可用可
    的头像 发表于 11-29 15:40 786次阅读
    极狐<b class='flag-5'>GitLab</b>—新一代源代码管理<b class='flag-5'>仓库</b>

    在KubeSphere 容器中快速部署使用 GitLab 并构建 DevOps 项目

    我们先这次的演练创建一个名为devops的企业空间,同时创建一个名为gitlab的项目供GitLabCE部署使用。首先我们还是要先在devops企业空间中添加GitLab的官方HelmChart仓库
    的头像 发表于 07-26 11:19 369次阅读
    在KubeSphere 容器中快速部署使用 <b class='flag-5'>GitLab</b> 并构建 DevOps 项目

    使用Nexus在本地搭建npm、yum和maven私有仓库

    使用Nexus在本地搭建npm、yum和maven私有仓库 为保证在无互联网的情况下,可正常搭建、构建项目,并自动化部署项目,本系统采用Nexus+Jenkins+Maven+Gitlab开源组件
    的头像 发表于 08-21 14:46 334次阅读
    使用Nexus在本地搭建npm、yum和maven<b class='flag-5'>私有</b><b class='flag-5'>仓库</b>

    云服务器Flexus X实例,Docker集成搭建Gitea私有仓库

    Gitea 私有仓库是一款轻量级的自托管 Git 服务,它提供了与 Github、Gitlab 等类似的功能,但允许用户在自己的服务器上部署和运行,从而完全掌控代码的存储和访问权限。
    的头像 发表于 12-29 15:51 94次阅读
    云服务器Flexus X实例,Docker集成搭建Gitea<b class='flag-5'>私有</b><b class='flag-5'>仓库</b>