尝试在 CircleCI 上获取 golang 私有依赖项时的问题
Issues when trying to get golang private dependencies on CircleCI
我正在使用 CircleCI 作为我的工具来构建我的图像以在 Kubernetes 上发布。
我的项目使用的是 Golang,我使用的是 Go Modules。
事实证明,在检查我的代码后,步骤 go get -v -t -d ./...
运行时我遇到了问题。
在某些时候,对于某些依赖项(这是我公司的内部依赖项,它们在我公司的 github 项目下),我收到 unknown revision
消息。
我已经配置了机器帐户,因为我有自己的 github 帐户集。
我尝试添加以下行
- run: echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config
- run: cp key ~/.ssh/id_rsa
- run: git config --global url."ssh://git@github.com".insteadOf "https://github.com" || true
- run: git config --global gc.auto 0 || true
- run: go get -v -t -d ./...
命令 cp key ~/.ssh/id_rsa
复制一个 ssh key
可以访问 github 项目,我可以在本地使用它来执行与上述相同的步骤。
非常欢迎任何帮助,因为我已经在互联网上阅读了大量文档/评论,但似乎没有任何效果。
谢谢。
回答我自己的问题:
- Github 阻止用户获取
go get
私有存储库,即使 运行ning 的用户是所有者(在 docker - 因为 circleCI 正在使用 docker 容器到 运行 构建)
- 为了克服这个问题,我生成了一个开发者令牌:https://github.com/settings/tokens
- 并使用令牌允许访问私有存储库:
git config --global url."https://<my-dev-token>:x-oauth-basic@github.com/<company-slug>".insteadOf "https://github.com/<company-slug>" || true
我已经测试了其他解决方案,但这是唯一一个运行良好的解决方案。
众所周知的 replace
解决方法可能并不总是有效。如果你有一棵依赖关系树并且 private module 是一个嵌套的,mod 校验和验证将失败。为了解决这个问题,需要在 go.mod
中有一个条目。此外,该条目应该在 go mod tidy
之后仍然存在。否则可能会被误删除。
所以除了类似于下面的 replace
解决方案:
git config --global url."https://<token>:x-oauth-basic@github.com/<org-slug>".insteadOf "https://github.com/<org-slug>"
(其中 <token>
是您至少可以读取的 GH 令牌)
需要使用 tools 方法来 go.mod 保留条目。
示例:
$ cat tools.go
// +build tools
package tools
import (
_ "github.com/<org-slug>/<dependency-name>/tools" // this is your private dependency
)
确保在依赖库中也有 tools
包。
我正在使用 CircleCI 作为我的工具来构建我的图像以在 Kubernetes 上发布。
我的项目使用的是 Golang,我使用的是 Go Modules。
事实证明,在检查我的代码后,步骤 go get -v -t -d ./...
运行时我遇到了问题。
在某些时候,对于某些依赖项(这是我公司的内部依赖项,它们在我公司的 github 项目下),我收到 unknown revision
消息。
我已经配置了机器帐户,因为我有自己的 github 帐户集。
我尝试添加以下行
- run: echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config
- run: cp key ~/.ssh/id_rsa
- run: git config --global url."ssh://git@github.com".insteadOf "https://github.com" || true
- run: git config --global gc.auto 0 || true
- run: go get -v -t -d ./...
命令 cp key ~/.ssh/id_rsa
复制一个 ssh key
可以访问 github 项目,我可以在本地使用它来执行与上述相同的步骤。
非常欢迎任何帮助,因为我已经在互联网上阅读了大量文档/评论,但似乎没有任何效果。
谢谢。
回答我自己的问题:
- Github 阻止用户获取
go get
私有存储库,即使 运行ning 的用户是所有者(在 docker - 因为 circleCI 正在使用 docker 容器到 运行 构建) - 为了克服这个问题,我生成了一个开发者令牌:https://github.com/settings/tokens
- 并使用令牌允许访问私有存储库:
git config --global url."https://<my-dev-token>:x-oauth-basic@github.com/<company-slug>".insteadOf "https://github.com/<company-slug>" || true
我已经测试了其他解决方案,但这是唯一一个运行良好的解决方案。
众所周知的 replace
解决方法可能并不总是有效。如果你有一棵依赖关系树并且 private module 是一个嵌套的,mod 校验和验证将失败。为了解决这个问题,需要在 go.mod
中有一个条目。此外,该条目应该在 go mod tidy
之后仍然存在。否则可能会被误删除。
所以除了类似于下面的 replace
解决方案:
git config --global url."https://<token>:x-oauth-basic@github.com/<org-slug>".insteadOf "https://github.com/<org-slug>"
(其中 <token>
是您至少可以读取的 GH 令牌)
需要使用 tools 方法来 go.mod 保留条目。
示例:
$ cat tools.go
// +build tools
package tools
import (
_ "github.com/<org-slug>/<dependency-name>/tools" // this is your private dependency
)
确保在依赖库中也有 tools
包。