CircleCI& Golang - 无法导入AWS SDK

时间:2015-07-27 03:05:02

标签: github go aws-sdk circleci aws-sdk-go

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

我试图在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.yml中的所有命令都已执行后,CI仍然执行了go get -u github.com/aws/aws-sdk-go/...。它再次失败并出现同样的错误。

以下是CircleCI的日志:

enter image description here

这有什么好转的吗?或者我错过了什么,比如配置地址以获取go包(根据错误消息)?

提前致谢!

2 个答案:

答案 0 :(得分:0)

尝试将以下内容添加到circle.yml文件中。这应该强制SSH结账而不是http结账。

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

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

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

答案 1 :(得分:0)

好的,我找到了一个随处可见的。

似乎CircleCI正在使用go 1.4,除非您使用git@github.com,否则不允许人们使用go get -u制作go get -u -f。 所以我认为尝试使用https来实现go get -u是目前唯一的方法。

ref: issue #8850

CircleCI在git的{​​{1}}上有自己的配置,强制git使用~/.gitconfig代替https:

git@github.com

如果您通过ssh访问CircleCI框,则可以找到此文件。

ref

所以,我的方式是:

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

现在[url "git@github.com:"] insteadOf = https://github.com/ [url "ssh://git@github.com/"] insteadOf = https://github.com/ 无论您是将其添加到go get -u文件中还是由CircleCI自动执行,都能正常工作。