Статьи

Выпуск кросс-платформенных бинарных файлов Go с использованием Goxc и BinTray за 5 минут

Я вижу много проектов Go на GitHub, которые упоминают о публичном выпуске двоичных файлов для своих проектов в будущем, когда позволит время. После выпуска  Depcon  и  Docker Volume Netshare  я хотел простой способ выпуска обновлений, чтобы пользователи могли быстро получать последние двоичные файлы независимо от их платформы.

Есть много способов сделать это, и после исследования различных вариантов кросс-компиляции и места для хранения встроенных двоичных файлов я остановился на  Goxc  для компиляции и  Bintray  для хранения окончательных двоичных файлов и пакетов.

Вот как быстро настроить проект Golang для создания и простого развертывания двоичных файлов.

1. Настройка Bintray

Bintray позволяет разработчикам хранить, публиковать, загружать, продвигать и распространять программное обеспечение с расширенными функциями, которые полностью автоматизируют процесс распространения программного обеспечения.

  1. Если у вас еще нет аккаунта, вы можете бесплатно зарегистрироваться  здесь.
  2. После того, как вы вошли в систему или создали учетную запись, вы захотите создать generic repositoryэту категорию в своем проекте. Например, если проект ориентирован на Docker, вы можете назвать свой репозиторий «Docker».
  3. Нажмите на ваш недавно созданный или существующий репозиторий и create a new package. В идеале это должно быть имя проекта, в котором вы также будете публиковать свои двоичные файлы.
  4. Теперь, когда у вас есть репозиторий и пакет для вашего проекта, вы захотите скопировать ключ API для следующих шагов. Это можно сделать, отредактировав свой профиль и выбрав вертикальную вкладку под названием «Ключ API», как показано ниже.Снимок экрана 2015-11-28 в 11.09.41 вечера

Экспорт ключа API:

Приведенные ниже действия потребуют от API-ключа успешной аутентификации в Bintray после выпуска новых артефактов. Скопируйте ключ API из вашего bintray в буфер обмена.

Таким образом, ключ API доступен на следующем шаге, запустите следующее в вашем текущем терминале:

  1. Выполнение: export BINTRAY_APIKEY="MYAPI_KEY" >> ~/.bash_profile
  2. Выполнение: 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 является локальной средой, конфиденциальная информация не раскрывается, и все изменения могут быть зарегистрированы в вашем локальном репо без раскрытия частной информации.