极狐GitLab Go 代理
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
- Status: 实验
此功能的可用性由功能标志控制。有关历史记录,请参阅历史记录。此功能可用于测试,但尚未准备好用于生产环境。
通过极狐GitLab 的 Go 代理,极狐GitLab 中的每个项目都可以使用 Go 代理协议 获取。
极狐GitLab 的 Go 代理是一个 experiment,由于大规模代码库可能存在性能问题,因此尚未准备好用于生产环境。
极狐GitLab 不会在软件包仓库中显示 Go 模块,即使启用了 Go 代理。
有关 Go 代理使用的特定 API 端点的文档,请参阅 Go Proxy API 文档。
将极狐GitLab 添加为 Go 代理
要使用极狐GitLab 作为 Go 代理,必须使用 Go 1.13 或更高版本。
可用的代理端点用于按项目获取模块:/api/v4/projects/:id/packages/go
要从极狐GitLab 获取 Go 模块,请将项目特定的端点添加到 GOPROXY。
Go 会查询该端点并回退到默认行为:
shellgo env -w GOPROXY='https://gitlab.example.com/api/v4/projects/1234/packages/go,https://proxy.golang.org,direct'
通过此配置,Go 按以下顺序获取依赖项:
- Go 尝试从项目特定的 Go 代理获取。
- Go 尝试从 proxy.golang.org 获取。
- Go 通过版本控制系统操作(如 git clone、svn checkout 等)直接获取。
如果未指定 GOPROXY,Go 会执行步骤 2 和 3,这对应于将 GOPROXY 设置为 https://proxy.golang.org,direct。如果 GOPROXY 仅包含项目特定的端点,Go 只会查询该端点。
有关如何设置 Go 环境变量的详细信息,请参阅 设置环境变量。
有关配置 GOPROXY 的详细信息,请参阅 Go 依赖管理 > 代理。
从私有项目获取模块
go 不支持通过不安全的连接传输凭据。以下步骤仅在极狐GitLab 配置为 HTTPS 时有效:
- 配置 Go 包括在从极狐GitLab 的 Go 代理获取时进行 HTTP 基本身份验证凭据。
- 配置 Go 跳过从公共校验和数据库下载私有极狐GitLab 项目的校验和。
启用请求身份验证
创建一个 个人访问令牌,范围设置为 api 或 read_api。
打开你的 ~/.netrc 文件并添加以下文本。用你的值替换 < > 中的变量。
如果你使用无效的 HTTP 凭据发出 go get 请求,则会收到 404 错误。
如果你使用名为 NETRC 的环境变量,Go 会将其值用作文件名并忽略 ~/.netrc。如果你打算在极狐GitLab CI 中使用 ~/.netrc,不要使用 NETRC 作为环境变量名称。
plaintextmachine <url> login <username> password <token>
- <url>: 极狐GitLab URL,例如 gitlab.com。
- <username>: 你的用户名。
- <token>: 你的个人访问令牌。
禁用校验和数据库查询
在使用 Go 1.13 及更高版本下载依赖项时,获取的源会根据校验和数据库 sum.golang.org 进行验证。
如果获取的源的校验和与数据库中的校验和不匹配,Go 不会构建依赖项。
私有模块无法构建,因为 sum.golang.org 无法获取私有模块的源,因此无法提供校验和。
为了解决此问题,将 GONOSUMDB 设置为以逗号分隔的私有项目列表。有关设置 Go 环境变量的详细信息,请参阅 设置环境变量。有关禁用此功能的更多详细信息,请参阅 Dependency Management in Go > Checksums。
例如,要禁用 gitlab.com/my/project 的校验和查询,请设置 GONOSUMDB:
shellgo env -w GONOSUMDB='gitlab.com/my/project,<previous value>'
使用 Go
如果你不熟悉 Go 的依赖管理或 Go 本身,请查看以下文档:
设置环境变量
Go 使用环境变量来控制各种功能。你可以通过常规方式管理这些变量。然而,Go 1.14 将 Go 环境变量读写到一个特殊的 Go 环境文件,默认为 ~/.go/env。
- 如果设置了 GOENV 为一个文件,Go 会读写该文件。
- 如果未设置 GOENV 但设置了 GOPATH,Go 会读写 $GOPATH/env。
可以使用 go env <var> 读取 Go 环境变量,并在 Go 1.14 及更高版本中使用 go env -w <var>=<value> 写入。例如,go env GOPATH 或 go env -w GOPATH=/go。
发布一个模块
Go 模块和模块版本由源代码库定义,例如 Git、SVN 和 Mercurial。模块是包含 go.mod 和 Go 文件的代码库。模块版本由版本控制系统 (VCS) 标签定义。
要发布一个模块,将 go.mod 和源文件推送到 VCS 代码库。要发布一个模块版本,请推送 VCS 标签。
有关有效模块或模块版本的详细信息,请参阅 Dependency Management in Go > Versioning。