Проблемы при попытке получить частные зависимости golang от 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://[email protected]".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, и я могу использовать его локально, чтобы выполнить те же шаги, что и выше.

Любая помощь будет очень кстати, потому что я прочитал тонны документации/комментариев в Интернете, но, похоже, ничего не работает.

Спасибо.


person Vinicius Esperança    schedule 25.09.2020    source источник
comment
У меня есть пара вопросов, у вас есть GO111MODULE=on, а как насчет GOPRIVATE? Вы проверили, работает ли ssh с ssh -T [email protected] на каком-то этапе?   -  person Зелёный    schedule 25.09.2020
comment
unknown revision подразумевает, что ваш go.mod указывает на зависимость от версии, которой нет в удаленном репо. Есть ли в вашей локальной копии директивы replace, которые могут переопределять поведение при разрешении зависимостей?   -  person Adrian    schedule 25.09.2020
comment
@Зелёный Да, у меня GO111MODULE включено, а GOPRIVATE установлено. Кроме того, SSH работает правильно, только что проверил с помощью ssh -T [email protected].   -  person Vinicius Esperança    schedule 25.09.2020
comment
@ Адриан, да, по какой-то причине он не находит конкретный тег (в моем случае v0.0.3), но он существует. У меня нет директивы замены, сейчас я перепроверил.   -  person Vinicius Esperança    schedule 25.09.2020
comment
Вы уверены, что тег существует на удаленном компьютере, а не только в вашей локальной копии?   -  person Adrian    schedule 25.09.2020
comment
@ Адриан, да, почти уверен. Я сгенерировал этот тег непосредственно на github, и я также могу получить доступ через github.   -  person Vinicius Esperança    schedule 25.09.2020
comment
Есть ли у вас больше контекста в сообщении об ошибке (например, выполняемая команда)? Можете ли вы добавить более полный ответ на свой вопрос?   -  person LeGEC    schedule 26.09.2020
comment
Привет, @LeGEC. Я понял, что у моих заданий в CircleCI нет доступа к частным репозиториям, хотя я использовал своего пользователя github как пользователя, который запускал сборки. Мне пришлось создать токен разработчика и добавить конфигурацию для доступа к git, например git config --global url."https://<my-dev-token>:[email protected]/<company-slug>".insteadOf "https://github.com/<company-slug>" || true   -  person Vinicius Esperança    schedule 28.09.2020


Ответы (1)


Отвечая на мой собственный вопрос:

  • Github блокирует доступ пользователей к go get приватным репозиториям, даже если запущенный пользователь является владельцем (на докере — потому что CircleCI использует контейнеры докеров для запуска сборки)
  • Чтобы решить эту проблему, я создал токен разработчика: https://github.com/settings/tokens
  • И использовал токен, чтобы разрешить доступ к закрытым репозиториям: git config --global url."https://<my-dev-token>:[email protected]/<company-slug>".insteadOf "https://github.com/<company-slug>" || true

Я тестировал другие решения, но это было единственное, которое работало нормально.

person Vinicius Esperança    schedule 28.09.2020