1

我不确定这是否是发布此类问题的正确位置。

我试图在 CircleCI 上测试我的 golang 项目。在 阶段dependencies,CI 执行

go get -u github.com/aws/aws-sdk-go/...

并且发生了错误:

package github.com/aws/aws-sdk-go/...
    imports github.com/aws/aws-sdk-go/aws
    imports github.com/aws/aws-sdk-go/aws/awserr: /home/ubuntu/sprocket-analytics-data-pipeline-v2/src/go/src/github.com/aws/aws-sdk-go is from git@github.com:aws/aws-sdk-go, should be from https://github.com/aws/aws-sdk-go

错误很长,上面的代码只是其中的一部分。

因此,我更新了我circleci.yml的以覆盖依赖项阶段。circleci.yml就像:

machine:
  timezone:
    Asia/Tokyo
  environment:
    GOPATH: /home/ubuntu/my-project/src/go
dependencies:
  override:
    - go get github.com/go-sql-driver/mysql
    - go get github.com/google/google-api-go-client/bigquery/v2
    - go get code.google.com/p/goauth2/oauth/jwt
    - go get golang.org/x/tools/cmd/cover
    - go get github.com/AlekSi/gocov-xml
    - go get github.com/jstemmer/go-junit-report
    - go get github.com/golang/mock/gomock
    - go get github.com/onsi/gomega
    - go get github.com/onsi/ginkgo/ginkgo
    - go get github.com/aws/aws-sdk-go/...
    - go get github.com/axw/gocov/...
test:
  pre:
    - go install path/to/the/package
  override:
    - go test /home/ubuntu/my-project/src/go/src/path/to/the/package

go get github.com/aws/aws-sdk-go/...我的配置中运行良好。

但是,在我执行完所有命令之后circleci.ymlgo get -u github.com/aws/aws-sdk-go/...还是被 CI 执行了。它再次失败并出现同样的错误。

这是来自 CircleCI 的日志:

在此处输入图像描述

有什么可以绕行的吗?还是我错过了一些东西,比如配置地址以获取 go 包(根据错误消息)?

提前致谢!

4

2 回答 2

0

尝试将以下内容添加到您的 circle.yml 文件中。这应该强制进行 SSH 签出而不是 http 签出。

checkout:
  post:
    - git config --global url.ssh://git@github.com/.insteadOf https://github.com/

然后,您应该能够删除所有依赖项覆盖。

CircleCI 还有一个不错的功能,您可以使用 SSH 连接进行重建。如果您在调试时遇到问题,请尝试在容器内手动运行命令。

于 2015-07-27T03:44:26.213 回答
0

好的,我为此找到了一个解决方案。

似乎 CircleCI 使用的是 go 1.4,它不允许人们使用git@github.commake go get -u,除非你使用go get -u -f. 所以我认为尝试使用 httpsgo get -u是目前唯一的方法。

参考:问题 #8850

而且 CircleCI 有自己的配置git~/.gitconfig强制使用 gitgit@github.com而不是 https:

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

如果你通过 ssh 访问 CircleCI 的盒子,你可以找到这个文件。

参考

所以,我的方法是:

在dependencies-pre阶段重命名此文件,并让依赖阶段完成,如果仍然需要这些配置,则将其重命名。

现在go get -u无论您将其添加到circle.yml文件中还是由 CircleCI 自动执行都可以正常工作。

于 2015-07-27T04:55:40.687 回答