Skip to main content

在GitLab的CI/CD中支持Go Module引用同一代码库下的其他Go仓库

· 2 min read
orange
programmer on jvm platform

Golang中, 代码复用的实现方式是通过git方式引用代码.
如果在CI/CD中引用同一代码库下的其他Go仓库, 由于Gitlab对仓库的访问权限限制, 还需要执行一些配置来确保go mod 能够正确下载依赖项.

操作步骤

设置GOPRIVATE环境变量

设置GOPRIVATE变量

export GOPRIVATE=${CI_SERVER_HOST}

这里的${CI_SERVER_HOST}是gitlab代码库的域名.

使用git configinsteadOf指令替换原始的https请求并添加认证信息

go mod通过git下载依赖项.
对于私有的git仓库, 如果不进行认证, 将会出现错误.

使用下述命令替换原始的https请求并添加认证信息

git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}".insteadOf "https://${CI_SERVER_HOST}"

上述insteadOf指令为原始的https请求添加了认证信息.
认证凭证来自于CI_JOB_TOKEN, 这是CI/CD生命周期中自动生成的.

配置被依赖的仓库允许其他项目通过CI_JOB_TOKEN进行访问

GitLab中进入被依赖的仓库, 在Settings > CI/CD > Token Access中配置允许其他项目通过CI_JOB_TOKEN进行访问。

参考