概要
- goのCIはdrone.ioを使うと簡単
- goのクロスコンパイルは簡単
- drone.ioを使うとビルドしたバイナリを簡単に公開することができる
ということで、
組み合わせれば、githubにpushすれば自動で各種OSのバイナリを自動で作れるようになるはずです。
参考にさせていただいた情報
http://qiita.com/atotto/items/b796c31c1755dbec13db
を参考に試したところ、
pkg/os/error_unix.go:11: isExist redeclared in this block
previous declaration at pkg/os/error_posix.go:11
等のエラーが発生しうまく動作しない。
drone.ioではgolangのバージョンが古くなっていてうまく動かないのか?
よくわかってないけど、とりあえず手元のgoでは問題なく通るので、drone.ioで動いているdocker imageのgoが腐っていることに間違いないだろう。
微妙だけど手っ取り早い workaround
毎回 指定のバージョンのgolangをダウンロードしてそれを使うようにしましょう。
drone.ioに設定するcommands
以下を、drone.ioの「Settigns」画面の「Build & Test」の「commands」に設定します。
(ここではwindowsとMacようにクロスコンパイルしています)
export GOROOT=~/go
export PATH=$GOROOT/bin:$PATH
### go 1.2.1をダウンロードして展開
wget -q https://go.googlecode.com/files/go1.2.1.linux-amd64.tar.gz
tar -C ~/ -xzf go1.2.1.linux-amd64.tar.gz
### クロスコンパイルの準備
pushd ~/go/src
# windows 64bit
GOOS=windows GOARCH=amd64 ./make.bash --no-clean 2> /dev/null 1> /dev/null
# MacOS 64bit
GOOS=darwin GOARCH=amd64 ./make.bash --no-clean 2> /dev/null 1> /dev/null
popd
### go get で get & build (getはbuildも実行されるみたいですね)
GOOS=windows GOARCH=amd64 go get ./...
GOOS=darwin GOARCH=amd64 go get ./...
# アーカイブするために作成したバイナリをコピーする
mkdir artifacts
cp -r `go env GOPATH`/bin artifacts
drone.ioでバイナリを自動アーカイブする
以下を、drone.ioの「Settigns」画面の「Artifacts」の「Artifacts」に設定します。
artifacts/bin/*/*
saveしてから
「Build & Test」に戻り、「Build Now」を押しましょう。
Buildに成功すると、
「Download」画面に環境ごとのバイナリがダウンロードできるようになっているはずです。