35
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Organization

Travis-CI で Go の Windows 用バイナリを Github release に登録する

Travis-CI には Github release にファイルを登録する機能があります。 (参考)

この機能と Go のクロスコンパイル機能を使って、 tag に自動的に Windows 向けのバイナリを登録してみます。 成功したリポジトリがこちらにあります。 methane/localserver

Makefile で Windows 向けバイナリを作る

GOOS と GOARCH を指定してクロスコンパイルし、 Github にアップロードしたい zip ファイルを作ります。ここでは Windows 用の 32bit 版だけ用意しています。この例では localserver-win32.zip が生成されます。

.PHONY: all

all:
    GOOS=windows GOARCH=386 go build -o localserver.exe
    zip localserver-win32.zip localserver.exe

Travis CLI を使って準備

gem install travis をして、 travis のコマンドラインツールが実行できるようにしておきます。 (gem とか面倒なので Travis の CLI も Go にして欲しいですね)

travis setup releases コマンドを実行すると、 Github のユーザー名とパスワードを聞かれるので、それを入力すると、 Travis からアップロードするのに使われる API key を作成し、 .travis.yml に必要最低限の deploy: のセクションを作ってくれます。

.travis.yml の設定

クロスコンパイル環境の用意

Travis の Go は gvm を使って管理されていて、クロスコンパイル環境が用意されていません。
クロスコンパイル環境を用意するには mitchellh/gox が便利です。

GOPATH が /home/travis/gopath:/home/travis/.gvm/pkgsets/go1.2/global になっているので、 gox のコマンドがインストールされる /home/travis/gopath/bin に PATH も設定しておきます。

gox -build-toolchain でクロスコンパイル環境を用意します。今回は windows/386 環境だけ用意できればいいので、 gox -build-toolchain -osarch=windows/386 としておきます。

.travis.yml
language: go
go: 1.3
env: "PATH=/home/travis/gopath/bin:$PATH"
install:
    - go get github.com/mitchellh/gox
    - gox -build-toolchain -osarch=windows/386
# (続く)

Github release へ deploy

script で make を実行し、 zip ファイルを作ります。 この zip ファイルが deploy 時に消されないように deploy: skip_cleanup: true を設定しておき、 deploy: file: でファイル名を指定します。

on: tags: true を設定し、タグが打たれたリビジョンだけ deploy するようにします。
ただし、 Travis-CI のバグ があるので、 同時に deploy: all_branches: true の設定も必要です。

.travis.yml
# (続き)
script: make
deploy:
  provider: releases
  api_key:
    secure: <travis setup releases で生成した暗号化されたAPI Key> 
  file: localserver-win32.zip
  skip_cleanup: true
  all_branches: true  # https://github.com/travis-ci/travis-ci/issues/1675
  on:
    tags: true

これで、タグを push すると自動で Windows 版のバイナリを zip で Github release に登録してくれるようになります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
35
Help us understand the problem. What are the problem?