我正在尝试为go应用程序构建docker镜像,该应用程序使用来自不同私有gitlab仓库的不同go包。当我在我的本地机器上做的时候,我必须添加以下命令才能让它工作;
git config --global url.git@gitlab.com:.insteadOf https://gitlab.com/
export GOPRIVATE=*gitlab*
字符串
在这种情况下,我的ssh密钥将被使用,它工作正常。
现在,我想在构建Docker镜像时做同样的事情,但不使用ssh密钥,所以我想到使用部署令牌(令牌可以访问gitlab组中的所有repos)。
dockerfile:
FROM golang:1.14 AS builder
...
ARG USER
ARG KEY
RUN git config --global url."https://${USER}:${KEY}@gitlab.com/".insteadOf "https://gitlab.com/"
RUN export GOPRIVATE=*gitlab*
型
显然,这不起作用,我变成了下面的错误:
Fatal: could not read Username for 'https://gitlab.com': terminal prompts disabled
型
您能分享一下您对我如何使用部署令牌使其工作的想法吗?
2条答案
按热度按时间jdgnovmf1#
作为解决方法,我手动克隆存储库,然后编辑
go mod
文件字符串
w7t8yxp52#
在我的场景中,此错误消息的问题:
字符串
尽管我有:
1.为GitLab / Git正确配置SSH密钥,
1.并全局调用
git config --global url."git@gitlab.com:".insteadOf "https://gitlab.com/"
就是
go
命令出于某种原因在“根路径”/tmp/...
克隆一些储存库(不是所有储存库),$HOME
目录。我的解决方案是将
GOPRIVATE
env var作为前缀添加到`go命令中,如下所示:型
请记住,尽管没有设置
GOPATH
env var,但我最近的Go安装默认有一个GOPATH
设置,我可以从go env
看到它指向$HOME/go/
,请在这里查看env
命令和go env
命令的不同输出:型
这意味着像
go mod download
这样的命令开始从GitLab中提取repos并将它们存储在不同的地方:1.你的本地Go模块(如预期),
1.这个“特殊”的基于
go env
的默认GOPATH
指向/home/<<MY_USER>>/go
1.这条更“特殊”的路径
/tmp/...
当不使用
GOPRIVATE
时,这种奇怪的路径组合可能是问题的一部分