Edited at

gogs + drone.io をつくる docker-compose.yml

More than 3 years have passed since last update.

手元で試せる drone.io 環境が欲しかったので作った。


docker-compose.yml の中身

ローカル環境前提で毎回作りなおす形で作ってるのでそれぞれのコンテナにはとくに restart: always は入れてないが、docker-machine 立ち上げ時に常に実行する形にするなら入れること。

consul:

container_name: consul
image: gliderlabs/consul-server
net: host
command: -bootstrap

registrator:
container_name: registrator
# リトライが出来ないので restart する形で対処
restart: on-failure
net: host
image: gliderlabs/registrator
command: consul://localhost:8500
volumes:
- /var/run/docker.sock:/tmp/docker.sock

drone:
container_name: drone
image: drone/drone
ports:
- "8000:8000"
environment:
- GIN_MODE=release
- SERVER_ADDR=:8000
- REMOTE_DRIVER=gogs
- REMOTE_CONFIG=http://gogs-3000.service.consul:3000?skip_verify=true
- DATABASE_DRIVER=mysql
- DATABASE_CONFIG=root:drone@tcp(mysql.service.consul:33060)/drone?parseTime=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
volumes_from:
- drone-data

drone-data:
container_name: drone-data
image: busybox
net: none
command: /bin/sh
volumes:
- /var/lib/drone

drone-db:
container_name: drone-db
image: mysql:5.6
ports:
- "33060:3306"
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=false
- MYSQL_ROOT_PASSWORD=drone
- MYSQL_DATABASE=drone

gogs:
container_name: gogs
image: gogs/gogs
ports:
- "3000:3000"
- "22022:22"
volumes_from:
- gogs-data

gogs-data:
container_name: gogs-data
image: busybox
net: none
command: /bin/sh
volumes:
- /data

gogs-db:
container_name: gogs-db
image: mysql:5.6
ports:
- "33061:3306"
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=false
- MYSQL_ROOT_PASSWORD=gogs
- MYSQL_DATABASE=gogs


手順

以下 OSX 前提で話をすすめる。Windows の場合は dnsmasq の手順が使えないので後ろにある軽量版の docker-compose.yml を使ったうえで docker-compose の実行からはじめること。


dnsmasq の設定

docker-compose を実行する前に dnsmasq の設定 12

# 192.168.99.100 は `docker-machine ip [name]` のアドレスに置換すること

address=/consul/192.168.99.100#8600

を入れる。dnsmasq と docker-machine 再起動後 consul を介して

でアクセスできる。


docker-compose の実行

dnsmasq 設定後 docker-compose up -d すると

が立ち上がって簡易 GitHub-like + CI 環境が docker 上で作られる。


gogs のインストール

gogs は一回インストール画面に入るので以下を入力する。

これで gogs が利用可能になる。レポジトリを作り、リモートを登録して push すれば gogs に反映される。この状態で drone.io にログインすれば drone.io と gogs の連携ができるはず。


軽量版の docker-compose.yml

上は consul とか mysql とかゴテゴテに入ってるので軽量版も。DNS サーバを立てるのが面倒な Windows 版の Docker を使うときはこっちのほうが使いやすいと思う。


  • gogs をインストールするときは SQLite を選択する

  • IP アドレスが 192.168.99.100 で直打ちなので注意


    • なのでアクセスするときはそれぞれ以下になる



    • 普通 docker-machine が最初に立ち上げる時の VM の IP アドレスは 192.168.99.100 になるはず




docker-compose.yml の中身

drone:

container_name: drone
image: drone/drone
ports:
- "8000:8000"
environment:
- GIN_MODE=release
- SERVER_ADDR=:8000
- REMOTE_DRIVER=gogs
- REMOTE_CONFIG=http://192.168.99.100:3000?skip_verify=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
volumes_from:
- drone-data

drone-data:
container_name: drone-data
image: busybox
net: none
command: /bin/sh
volumes:
- /var/lib/drone

gogs:
container_name: gogs
image: gogs/gogs
ports:
- "3000:3000"
- "22022:22"
volumes_from:
- gogs-data

gogs-data:
container_name: gogs-data
image: busybox
net: none
command: /bin/sh
volumes:
- /data


トラブルシューティング


gogs でレポジトリ作成したのに drone からそのレポジトリ見えない

gogs のインストール時に間違ったアドレスでインストールし、drone からその間違ったアドレスでアクセス使用しているのが原因の可能性が高い。gogs コンテナのアドレスを変更する際も該当するので gogs のアドレス変更は出来るだけ避けるべき。

gogs 及び drone から間違ったアドレスを画面上から直接修正する方法が現在ないので手っ取り早くやるなら以下(この方法は当然プロダクション環境では使えないので注意!)


  • gogs コンテナの /data/gogs/conf/app.ini の間違ったアドレスを修正する


    • vim/nano はイメージ上には入ってないので vi か sed をつかってなおす



  • drone の data コンテナを捨てて再作成

  • drone コンテナを再起動

  • drone にログインしなおす





  1. homebrew を入れてる場合は /usr/local/etc/dnsmasq.conf になるがない場合は http://qiita.com/okitan/items/fbc4cf39d63eb7152049 を見ること。 



  2. El Capitan を実行してる場合は rootless により直接 /etc/resolv.conf を編集出来ないので https://support.apple.com/kb/PH21615?viewlocale=ja_JP&locale=ja_JP に従って 127.0.0.1 を追加すること。