【问题标题】:CircleCI & Golang - Can't import AWS SDKCircleCI 和 Golang - 无法导入 AWS 开发工具包
【发布时间】:2017-03-12 10:32:01
【问题描述】:

我不确定这里是否适合发布此类问题。

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

这是来自 CircleCI 的日志:

有什么办法可以解决这个问题吗?还是我错过了什么,比如配置地址来获取 go 包(根据错误消息)?

提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的评论。我试图强制 git use git@github.com 结帐,并删除所有依赖项覆盖。问题仍然存在。我认为这里的问题是 go 命令go get 只允许用户使用 https 来获取 go 1.4 中的包。这是reference。根据 [github.com/gliderlabs/herokuish/pull/6].,这个限制似乎从 1.4.1 开始被删除。我使用 ssh 访问 circleci 框并通过go get -u -f 管理 go-get,所以我认为找出一种在 circleci 上使用 https 的方法是出路。
    【解决方案2】:

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

    看来CircleCI使用的是go 1.4,它不允许人们使用git@github.com来制作go get -u,除非你使用go get -u -f。 所以我想尝试使用https来做go get -u是目前唯一的方法。

    ref: issue #8850

    CircleCI 在~/.gitconfig 中的git 上有自己的配置,以强制git 使用git@github.com 而不是https:

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

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

    ref

    所以,我的方法是:

    dependencies-pre阶段重命名这个文件,让dependencies阶段结束,如果还需要这些配置,再重命名。

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

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2021-06-07
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多