CircleCI и Golang — не удается импортировать AWS SDK

Я не уверен, что это правильное место, чтобы опубликовать такой вопрос.

Я пытался протестировать свой проект golang на CircleCI. На этапе 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 [email protected]: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 (согласно сообщениям об ошибках)?

Заранее спасибо!


person Chris Kong    schedule 27.07.2015    source источник


Ответы (2)


Попробуйте добавить следующее в ваш файл circle.yml. Это должно вызвать проверку SSH, а не http.

checkout:
  post:
    - git config --global url.ssh://[email protected]/.insteadOf https://github.com/

Затем вы сможете удалить все свои переопределения зависимостей.

У CircleCI также есть приятная функция, с помощью которой вы можете перестроиться с помощью SSH-соединения. Попробуйте запустить команды вручную внутри контейнера, если у вас возникли проблемы с отладкой.

person Tom Jowitt    schedule 27.07.2015
comment
Спасибо за комментарий. Я попытался заставить git использовать [email protected] для оформления заказа и удалить все переопределения зависимостей. Проблема все еще существует. Я думаю, проблема здесь в том, что команда go go get позволяет пользователям использовать https только для получения пакетов в go 1.4. Вот ссылка. Это ограничение, по-видимому, снято с версии 1.4.1 в соответствии с [github.com/gliderlabs/herokuish/. тянуть/6]. И я использовал ssh для доступа к ящику Circleci и управлял go-get через go get -u -f, поэтому я думаю, что выход — найти способ использовать https на Circleci. - person Chris Kong; 27.07.2015

Хорошо, я нашел обходной путь для этого.

Кажется, что CircleCI использует go 1.4, что не позволяло людям использовать [email protected] для создания go get -u, если только вы не используете go get -u -f. Поэтому я решил, что попытка использовать https для выполнения go get -u — единственный способ в настоящее время.

ссылка: проблема № 8850

И у CircleCI есть собственная конфигурация git в ~/.gitconfig, чтобы заставить git использовать [email protected] вместо https:

[url "[email protected]:"]
        insteadOf = https://github.com/
[url "ssh://[email protected]/"]
        insteadOf = https://github.com/

Если вы получаете доступ к ящику CircleCI через ssh, вы можете найти этот файл.

ref

Итак, мой путь:

Переименуйте этот файл на этапе dependencies-pre и дождитесь окончания этапа зависимостей. Затем переименуйте его обратно, если вам все еще нужны эти конфигурации.

Теперь go get -u работает нормально независимо от того, добавите ли вы его в файл circle.yml или он автоматически запустится CircleCI.

person Chris Kong    schedule 27.07.2015