Go语言 致命:无法读取“https://www.example.com”的用户名:终端提示已禁用gitlab.com

nwwlzxa7  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(128)

我正在尝试为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


您能分享一下您对我如何使用部署令牌使其工作的想法吗?

jdgnovmf

jdgnovmf1#

作为解决方法,我手动克隆存储库,然后编辑go mod文件

RUN git clone https://${USER}:${KEY}@gitlab.com/mygroup/myproject
RUN go mod init gitlab.com/mygroup/go-dns
RUN go mod edit -replace=gitlab.com/mygroup/myproject=./myproject

字符串

w7t8yxp5

w7t8yxp52#

在我的场景中,此错误消息的问题:

fatal: could not read Username for 'https://gitlab.com': terminal prompts disabled

字符串
尽管我有:
1.为GitLab / Git正确配置SSH密钥,
1.并全局调用git config --global url."git@gitlab.com:".insteadOf "https://gitlab.com/"
就是

  • go命令出于某种原因在“根路径”/tmp/...克隆一些储存库(不是所有储存库),
  • 但是Git全局配置指向$HOME目录。

我的解决方案是将GOPRIVATE env var作为前缀添加到`go命令中,如下所示:

GOPRIVATE=gitlab.com/my-org-name go mod download


请记住,尽管没有设置GOPATH env var,但我最近的Go安装默认有一个GOPATH设置,我可以从go env看到它指向$HOME/go/,请在这里查看env命令和go env命令的不同输出:

$ env | grep GOPATH
$ go env | grep -i path
GOPATH="/home/<<MY_USER>>/go"


这意味着像go mod download这样的命令开始从GitLab中提取repos并将它们存储在不同的地方:
1.你的本地Go模块(如预期),
1.这个“特殊”的基于go env的默认GOPATH指向/home/<<MY_USER>>/go
1.这条更“特殊”的路径/tmp/...
当不使用GOPRIVATE时,这种奇怪的路径组合可能是问题的一部分

相关问题