致命:无法读取"https://gitlab.com"的用户名:终端提示已禁用



我正在尝试为go应用程序构建docker镜像,该应用程序使用来自不同私人gitlab repos的不同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

你能分享一下你对如何使用部署令牌实现它的想法吗?

作为解决方法,我手动克隆repo,然后编辑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

在我的场景中,这个错误消息的问题是:

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

尽管我有:

  1. 为GitLab/Git正确配置SSH密钥
  2. 并全局调用CCD_ 2

是:

  • CCD_ 3命令出于某种原因在";根路径";CCD_ 4
  • 但是Git全局配置指的是CCD_ 5目录

对我来说,解决方案是在`go命令中添加GOPRIVATEenv-var作为前缀,如下所示:

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

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

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

这意味着像go mod download这样的命令开始从GitLab中提取repo并将其存储在不同的地方:

  1. 您的本地Go模块(如预期(
  2. 这个";特别的";基于go env的默认GOPATH指向/home/<<MY_USER>>/go
  3. 这甚至是";更特别的";路径/tmp/...

当不使用GOPRIVATE时,这种奇怪的路径组合可能是问题的一部分

最新更新