使用私有存储库进行构建

Posted

技术标签:

【中文标题】使用私有存储库进行构建【英文标题】:go build with private repositories 【发布时间】:2021-04-12 14:20:04 【问题描述】:

我正在尝试构建一个使用私有 git 存储库的 go 应用程序。我的 github 帐户有一个 ssh 密钥,我的 .gitconfig 文件中有以下内容:

[url "https://username:token@github.com"]
    insteadOf = https://github.com
[url "ssh://git@github.com/"]
    insteadOf = https://github.com/

当我执行 go test 或 go build 时,我被要求输入密码。然后我得到回复:

go: found github.com/x/businesses in github.com/x/businesses v0.0.0-yy
go: cmd/main/cmd imports
  github.com/x/businesses: github.com/x/businesses@v0.0.0-yy/go.mod: 
  verifying module: github.com/x/businesses@v0.0.0-yy/go.mod: 
  reading https://sum.golang.org/lookup/github.com/xx/businesses@v0.0.0-yy: 410 Gone
server response:
  not found: github.com/x/businesses@v0.0.0-yy: 
  invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* 
  in tmp/gopath/pkg/mod/cache/vcs/zz: 
    exit status 128:
    fatal: could not read Username for 'https://github.com': terminal prompts disabled

我尝试删除 .gitconfig 中的顶部 insteadOf 无缘无故地尝试一些东西。

【问题讨论】:

看看GOPRIVATE 你试过设置 env GIT_TERMINAL_PROMPT=1 吗? 就像这里提到的***.com/questions/32232655/… 另一种选择是添加一个.netrc文件而不是使用insteadOf,这里ec.haxx.se/usingcurl/usingcurl-netrc,文件格式需要给出GitHub.com域名和用户名密码,它适用于我 【参考方案1】:

你的 git 配置应该看起来像 [url "git@github.com:"] insteadOf = https://github.com/ 或与您拥有的类似。

然后你可以通过告诉Go 你正在使用这样的私人仓库来获取你的 pacakge: GOPRIVATE="github.com/your_username_or_org" go get github.com/name_or_org/repo_name

另外,我通常不会在我的 SSH 密钥上设置密码,因为每次都输入密码有点烦人,但当然可以像 cmets 中指出的那样添加密码更安全。

【讨论】:

带有 passphase 的密钥更安全,最好使用它以防有人访问您的密钥。它会加密您的密钥,您有更多时间更改密钥,直到有人找到密码(在最坏的情况下)您可以在 ssh passphase 存在时使用 ssh-agent。

以上是关于使用私有存储库进行构建的主要内容,如果未能解决你的问题,请参考以下文章

使用Nexus3构建Docker私有镜像仓库

谷歌云构建:在谷歌云存储库上克隆私有存储库失败

Github Actions 使用 maven 对另一个存储库的私有包注册表进行身份验证

如何在 GitHub Actions 中构建的 Dockerfile 中使用 github 令牌并尝试克隆私有存储库?

用于依赖项的 Gradle 私有存储库

如何配置 GitHub Actions 以构建依赖于私有存储库的 Azure 静态 Web 应用程序?