1. Qiita
  2. 投稿
  3. drone.io

drone.io v0.4のビルド&実行方法(OSX)

  • 1
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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