v0.3からv0.4にバージョンが上がってガラッと仕様が変わり、ビルド手順も
OSS版 drone.io をソースからビルドする (CentOS 7) - Qiita
に書かれた方法から変わったので書いておく。
golangがインストールされた環境下でのビルド&実行手順
事前
sassc(Sassのコンパイラ)がインストールされていなければインストールする。
brew install sassc
(※ 参考 : sass/sassc · GitHub)
ビルド手順
あとは公式に書かれた通りでOK.
droneというバイナリファイルが生成される。
(引用元: https://github.com/drone/drone#from-source )
# GOPATH以下にclone
git clone git://github.com/drone/drone.git $GOPATH/src/github.com/drone/drone
cd $GOPATH/src/github.com/drone/drone
# ビルド
export GO15VENDOREXPERIMENT=1
make deps # Download required dependencies
make gen # Generate code
make build # Build the binary
実行
環境変数にgitリポジトリの設定をセットすれば実行できる。
e.g. GitHubの場合
http://readme.drone.io/setup/github.html
# 必要な設定を環境変数にセット
export REMOTE_DRIVER=github
export REMOTE_CONFIG=https://github.com?client_id=${client_id}&client_secret=${client_secret}
# 実行
./drone
staticビルド & Dockerイメージビルド & 実行
staticビルド
上記のビルド方法だと一部依存モジュールがdynamic linkされてビルドされるので、公式のDockerfileに書かれているようなbashすら入っていないすっからかんのscratchイメージ内で動かすには -extldflags "-static"
オプションを付けてビルドする必要がある。(※ 正直この辺キチンとわかってない... 参考: http://k2nr.me/blog/2014/12/09/create-small-image-for-docker.html )
Makefileをの中にbuild_staticってオプションがあり、上記オプションをつけた状態でビルドできるのでそれを利用すればOK
だが、OSXだと以下の様なエラーが出て失敗するので、golangの入ったlinux系イメージ内でビルド実行する必要あり。
# github.com/drone/drone
/usr/local/Cellar/go/1.5.1/libexec/pkg/tool/darwin_amd64/link: runing clang failed: exit status 1
ld: library not found for -lcrt0.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [build_static] Error 2
droneの開発をdroneでCIするためにdrone/golangというgolangとsasscのインストールされたイメージが用意されているのでそれを利用する。タグは1.5を指定。droneリポジトリ内にDockerfile.envというファイルがあるのでそこから独自にイメージを作っても良い。
# 任意の場所でclone
git clone git://github.com/drone/drone.git
cd ./drone
# ビルド
docker run -it \
-v $(pwd):/go/src/github.com/drone/drone \
-e GO15VENDOREXPERIMENT=1 \
--rm \
drone/golang:1.5 \
bash -c 'cd /go/src/github.com/drone/drone; make deps gen build_static'
drone_staticというバイナリファイルが生成されればOK
Dockerイメージビルド
droneのリポジトリにDockerfileがあるのでそれを利用する。
# docker build
cd /path/to/drone
docker build --rm=true -t drone/drone .
# イメージが作成されたことを確認
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
jsoizo/drone latest 3256d43361e3 8 minutes ago 21.57 MB
実行
ビルドしたdockerイメージをバックグランドで動かす。
droneはデフォルトで/var/lib/drone以下にsqliteファイルを生成するので永続化のためにマウントする。DOCKER_HOSTは指定するか、dockerがインストールされているのであれば -v /var/run/docker.sock:/var/run/docker.sock
しても良い。
docker run \
-v /var/lib/drone:/var/lib/drone \
-e DOCKER_HOST=$DOKCER_HOST \
-e REMOTE_DRIVER=github \
-e REMOTE_CONFIG="REMOTE_CONFIG=https://github.com?client_id=${client_id}&client_secret=${client_secret}" \
-p 8000:8000 \
--restart=always \
--detach=true \
--name=drone \
jsoizo/drone