Я вижу много проектов Go на GitHub, которые упоминают о публичном выпуске двоичных файлов для своих проектов в будущем, когда позволит время. После выпуска Depcon и Docker Volume Netshare я хотел простой способ выпуска обновлений, чтобы пользователи могли быстро получать последние двоичные файлы независимо от их платформы.
Есть много способов сделать это, и после исследования различных вариантов кросс-компиляции и места для хранения встроенных двоичных файлов я остановился на Goxc для компиляции и Bintray для хранения окончательных двоичных файлов и пакетов.
Вот как быстро настроить проект Golang для создания и простого развертывания двоичных файлов.
1. Настройка Bintray
Bintray позволяет разработчикам хранить, публиковать, загружать, продвигать и распространять программное обеспечение с расширенными функциями, которые полностью автоматизируют процесс распространения программного обеспечения.
- Если у вас еще нет аккаунта, вы можете бесплатно зарегистрироваться здесь.
- После того, как вы вошли в систему или создали учетную запись, вы захотите создать
generic repository
эту категорию в своем проекте. Например, если проект ориентирован на Docker, вы можете назвать свой репозиторий «Docker». - Нажмите на ваш недавно созданный или существующий репозиторий и
create a new package
. В идеале это должно быть имя проекта, в котором вы также будете публиковать свои двоичные файлы. - Теперь, когда у вас есть репозиторий и пакет для вашего проекта, вы захотите скопировать ключ API для следующих шагов. Это можно сделать, отредактировав свой профиль и выбрав вертикальную вкладку под названием «Ключ API», как показано ниже.
Экспорт ключа API:
Приведенные ниже действия потребуют от API-ключа успешной аутентификации в Bintray после выпуска новых артефактов. Скопируйте ключ API из вашего bintray в буфер обмена.
Таким образом, ключ API доступен на следующем шаге, запустите следующее в вашем текущем терминале:
- Выполнение:
export BINTRAY_APIKEY="MYAPI_KEY" >> ~/.bash_profile
- Выполнение:
source ~/.bash_profile
2. Настройка Goxc
Установить Goxc довольно просто. В этом руководстве предполагается, что у вас уже есть настройка среды Go. Следующее добавит исполняемый файл Goxc в ваш $ GOPATH.
go get github.com/laher/goxc
Далее мы хотим установить наборы инструментов для всех платформ. Это добавляет поддержку для компиляции с различными операционными системами с Goxc. Это может занять несколько минут.
goxc -t
3. Создание файла сборки .goxc.json
.goxc.json
Файл устанавливает метаданные для задач в Goxc. Пример ниже представляет собой упрощенный артефакт, который можно адаптировать для быстрого развертывания кроссплатформенных двоичных файлов в bintray. Более подробные примеры приведены в файле .goxc.json в docker-volume-netshare, который также добавляет сценарии sysinit для пакетов на основе Debian.
{
"ArtifactsDest": "build",
"ConfigVersion": "0.9",
"PackageVersion": "0.1",
"TaskSettings": {
"bintray": {
"user": "bintray-username",
"package": "my-project",
"repository": "my-repo"
}
}
Объяснение примера выше:
- PackageVersion: версия двоичного файла, который будет выпущен
- bintray -> пользователь: ваше имя пользователя bintray
- bintray -> package: имя пакета bintray, созданное выше для развертывания артефактов в
- bintray -> хранилище: имя хранилища bintray
4. Создание Makefile
Makefile будет использоваться для освобождения ваших двоичных файлов. Я лично добавляю дополнительные цели для автоматической сборки и форматирования исходного кода Go и дополнительный вызов для освобождения двоичных файлов в bintray.
GO_FMT = gofmt -s -w -l .
GO_XC = goxc -os="linux freebsd openbsd netbsd"
GOXC_FILE = .goxc.local.json
all: deps compile
compile: goxc
goxc:
$(shell echo '{\n "ConfigVersion": "0.9",' > $(GOXC_FILE))
$(shell echo ' "TaskSettings": {' >> $(GOXC_FILE))
$(shell echo ' "bintray": {\n "apikey": "$(BINTRAY_APIKEY)"' >> $(GOXC_FILE))
$(shell echo ' }\n } \n}' >> $(GOXC_FILE))
$(GO_XC)
deps:
go get
format:
$(GO_FMT)
bintray:
$(GO_XC) bintray
5. Собираем все вместе
Теперь, когда вы настроили Bintray, Goxc и создали Makefile, вы можете просто выполнить повторяющиеся шаги, описанные ниже, чтобы отформатировать и скомпилировать и выпустить ваши последние двоичные файлы в Bintray.
Форматирование и строительство: марка
Загрузка в Bintray: сделайте bintray
Это оно! Я надеюсь, что это руководство помогло вам быстро превратить ваш текущий проект Golang в выполнимый бинарный проект. Поскольку $ BINTRAY_APIKEY является локальной средой, конфиденциальная информация не раскрывается, и все изменения могут быть зарегистрированы в вашем локальном репо без раскрытия частной информации.