- Macでdockerを使うことができる
- boot2dockerを使う。VirtualBoxで上がるTinyCoreLinuxでdockerが動く
- droneはdockerを使えれば使えるはず
というわけで、Macでdroneを使ってみよう。dronedはLinuxでサーバを立ててgithub APIと連携させればいいとして、Macではcommit/push前のチェックとして、コマンドラインのdrone buildを使えるようにしたい、と私は考える。
- brew install boot2docker
- brew install docker
- boot2docker download
- boot2docker init
- boot2docker start
- eval $(boot2docker shellinit)
- もしどこかでパスワードを聞かれたら「tcuser」と答える
ここまででdockerを使える状態になる。
- brew install go
- export GOPATH=$HOME/go
- go get -d github.com/drone/drone/cmd/drone
- 現状だと少し変更が必要
- $GOPATH/src/github.com/drone/drone/pkg/build/docker/image.go
- github.com/dotcloud/docker/utils → github.com/dotcloud/docker/pkg/parsers
- utils → parsers
- $GOPATH/src/github.com/drone/drone/pkg/plugin/notify/irc.go
- func (i *IRC) Connect()の中身を削除
- $GOPATH/src/github.com/drone/drone/pkg/build/docker/image.go
- go build github.com/drone/drone/cmd/drone
- go install github.com/drone/drone/cmd/drone
- export PATH=$PATH:$GOPATH/bin
これでdroneを使える。試しにこんな.drone.ymlを置いて、、、
image: bradrydzewski/base env: - TZ=Asia/Tokyo script: - date
- drone build
まあ初回はイメージのpullに時間がかかりますが、2回目以降はなかなかいい感じになります。
ソースに修正が必要だったのはまあ困るよね。golangのimport文は読み込むモジュールのバージョンを指定できないから、常にmasterのHEADを使うことになる。そして使っているライブラリのバージョンが上がって互換性がなくなったときにコンパイルできなくなる。サードパーティでそれを解決するウェブサービスがあったような気もするが、広まってないし自分もそのサイトを忘れてしまった。
droneのソースはアレな面があって、作者のbradrydzewskiのイメージであればubuntuユーザで実行されるが、それ以外のイメージを使うとrootで実行される。この判定はハードコードされている。