LoginSignup
23
24

More than 5 years have passed since last update.

Go言語:CLIツールの配布を自動化するためのDrone.ioの設定

Posted at

この記事のゴール

以下をすべて自動化する

  • Linux用、Mac用、Windows用のバイナリのクロスコンパイル
  • コンパイルされたバイナリの配布
  • ビルドにバージョン情報を埋め込む

↓このような感じで、バイナリが配布できるようになる。

Downloads___drone-golang-ci-example.png

やりかた

ビルドにはDrone.ioを使う。Drone.ioの使い方については、以前書いた記事「Go言語:自分のライブラリをGitHubで公開する方法+drone.ioで継続的インテグレーション - Qiita」にて解説しているので見てほしい。

Drone.ioの設定は次のようになる。なお、配布を自動化するために、Drone.ioのArtifactsページにて artifacts/*/* を設定する。ここでのサンプルは、http://github.com/suin/drone-golang-ci-example をビルドしている。

# 設定
APP_NAME="my-app"
APP_OS="linux darwin windows"
APP_ARCH="386 amd64"

# Go1.3.1をダウンロードする
pushd ~/
curl -s -o go.tar.gz https://storage.googleapis.com/golang/go1.3.1.linux-amd64.tar.gz
tar xzf go.tar.gz
export GOROOT=~/go
export PATH=$GOROOT/bin:$PATH
go version
popd

# goxをインストールする
go get github.com/mitchellh/gox
gox -build-toolchain -os="$APP_OS" -arch="$APP_ARCH"

# gitのコミットからバージョンを採番する
APP_VERSION=$(git log --pretty=format:"%h (%ad)" --date=short -1)
echo APP_VERSION is $APP_VERSION

# クロスコンパイルする
gox -os="$APP_OS" -arch="$APP_ARCH" -output="artifacts/{{.OS}}-{{.Arch}}/$APP_NAME" -ldflags "-X main.version '$APP_VERSION'"
find artifacts

クロスコンパイルはgoxを使う。goxでGoをクロスコンパイルする - Qiitaを参照。Drone.ioに最初から入っているgo1.2ではgoxのbuild-toolchainが失敗する。なので、go1.3.1をダウンロードして入れる。

ビルド時にgitのリビジョン番号をバージョンとして埋め込む。バージョンをビルド時に埋め込む方法については、「Go言語: ビルド時にバージョン情報を埋め込みたい - Qiita」にて解説した。

リンク

この記事で作ったdrone.ioのサンプル → https://drone.io/github.com/suin/drone-golang-ci-example/files

23
24
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
23
24