Инструмент управления пакетами Go (4): Go Module Proxy

задняя часть Go

В предыдущей статье мы представилиGo Modules. Модуль Go поддерживает Versioned Go и изначально решает проблему управления зависимостями пакетов.

Новый режим работы также приносит некоторые проблемы, в материковой части мы не можем пройти напрямуюgo getКоманда получает некоторые сторонние пакеты, наиболее распространенными являютсяgolang.org/xРазличные отличные пакеты ниже. После работы под модулем,go buildбольше не будут заботиться о пакетах под GOPATH или поставщиком, но дляGOPATH/pkg/modПроверьте есть ли кеш, если нет, то загрузит определенную версию модуля, а для некоторых пакетов модуля часто глючит на материке. В этой статье основное внимание будет уделено реализации конфигурации прокси модуля go, включая следующие две конфигурации прокси:

  • GOPROXY
  • Athens

GOPROXY

goproxy — это проект с открытым исходным кодом.Когда пользователь запрашивает зависимую библиотеку, если он обнаруживает, что код не существует локально, он автоматически запрашивает источник, а затем кэширует его локально, чтобы пользователи могли запрашивать данные с goproxy.io. Разумеется, все это делается в одном запросе. goproxy.io поддерживает только режим модуля go. Когда пользователь выполняет команду go get, он проверяет$GOPROXY//@v/listЕсть ли версия, которую пользователь хочет получить в этом файле, если да, то получить по очереди$GOPROXY//@v/.info,$GOPROXY//@v/.mod,$GOPROXY//@v/.zipДождитесь файла, если нет, скачайте его прямо из библиотеки исходного кода.

Через команду:

export GOPROXY=https://goproxy.io

Эта переменная среды установлена. Как только настройка вступит в силу, последующие команды go будут передаватьсяgo module download protocolиproxyИнтерактивная загрузка определенной версииmodule. Конечно, мы также можем оставитьGOPROXYпеременная, чтобы закрытьGOPROXYиграет роль.

Видеть:GitHub.com/go прокси-IO/…

Athens

Athens — это проект, построенный на основе vgo (или 1.11+), пытающийся приблизить зависимости к вам, чтобы вы могли полагаться на повторяющиеся сборки, даже когда VCS не работает.

Зависимости — это неизменяемые фрагменты кода и связанные с ними метаданные из Github. Они хранятся на складах, контролируемых Афинами.

Вы, вероятно, уже знаете, что означает «неизменный», но позвольте мне еще раз указать на это, потому что это очень важно для всей системы. Код Афин не меняется, когда люди меняют свои пакеты, повторяют, экспериментируют или делают что-то еще. Если автор пакета выпустит новую версию, Афины удалят ее. Например, проект зависит от версии пакета М.v1.2.3, он никогда не изменит пакет на Афинах.

Установить

Афины поддерживают различные методы установки, Docker-контейнер, k8s и бинарные установочные пакеты.Эта статья расскажет, как установить через бинарные пакеты.

git clone https://github.com/gomods/athens
cd athens
make build-ver VERSION="0.2.0"
 ./athens -version

Получить приватные репозитории

Афины получают модули в частных репозиториях, что также является требованием уровня предприятия. Обычно частные репозитории предприятий требуют аутентификации, поэтому нам необходимо настроить учетную запись и учетные данные для доступа к частным репозиториям в Афинах. В настоящее время официальная документация Афин предусматривает пропуск через.netrcспособ доступа к функциональности приватных репозиториев с аутентификацией.

путем создания.netrcфайл для аутентификации частного репозитория.

//.netrc

machine github.com
  login MY_USERNAME
  password MY_PASSWORD

локальное приложение

export GO111MODULE=on
export GOPROXY=http://127.0.0.1:3000

Мы можем использовать Афины при условииwalkthrough.

git clone https://github.com/athens-artifacts/walkthrough.git
$ cd ../walkthrough
$ go run .
go: finding github.com/athens-artifacts/samplelib v1.0.0
handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.info [200]
handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.mod [200]
go: downloading github.com/athens-artifacts/samplelib v1.0.0
handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.zip [200]
The 🦁 says rawr!

go run .Выход включает попытку найтиgithub.com/athens-artifacts/samplelibзависимости. Поскольку прокси-сервер работает в фоновом режиме, вы также можете увидеть выходные данные от Athens, указывающие на то, что он обрабатывает запросы на зависимости.

global public proxy

Афины также предоставляют экспериментальный прокси:athens.azurefd.netДля глобального использования сусликов. Импортировать переменные среды:

export GOPROXY="https://athens.azurefd.net"

Конечно, хотя эти общедоступные прокси можно использовать, исходный код пакета не очень полный, поэтому самый безопасный способ — собрать сервис Athens самостоятельно. Согласно официальному выпуску:

athens.azurefd.netЭто альфа-версия, и инфраструктура в настоящее время не поддерживается должным образом, поэтому не удивляйтесь тайм-аутам. самодельныйAthensИли используйте GoCenter (на данный момент единственный управляемый репозиторий модулей Go).

Рекомендуемое чтение

Инструмент управления пакетами для Go

Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер

微信公众号

Ссылаться на

  1. Athens docs
  2. Пересмотрите модули go: использование и подробности