LoginSignup
20
20

More than 5 years have passed since last update.

Go言語 drone.ioで自動クロスコンパイル CI環境 #golang

Posted at

概要

  • 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」画面に環境ごとのバイナリがダウンロードできるようになっているはずです。

20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20