droneの遊び方

先日こういう話があったばかりだが、、、

CIツールのdroneは仕事でよく使っている。非常に便利なものであって、広まって欲しいなと思っているんです。

そこで、自分でローカルで遊ぶのはどうやるんだろう、と思った。昔はdroneにCLIがついていて、MacでそのCLIをコンパイルしておいて、docker-machineで立てたdockerを相手にローカルディレクトリの.drone.ymlを実行するみたいなことができたんだけど、今はもうできなくなっているようだ。

そこで、docker-composeでコンテナを立てることを考える。drone自身はアカウントを持たないので、ログインするアカウントとして連携できるリポジトリサーバが必要。リポジトリサーバは色々対応しているが、こちらもローカルで立てるんなら、gogsが最も手軽だろう。

そこで、適当にディレクトリを掘って、こういうdocker-compose.ymlを作る

そして、実行する。

# DRONE_SECRET=$(uuidgen) docker-compose up -d
Creating network "drone_default" with the default driver
Creating gogs
Creating drone
Creating agent
# open http://$(docker-machine ip):3000
# open http://$(docker-machine ip):8000

3000の方がgogsで、8000の方がdrone。gogsはsqliteでセットアップする。他のDBMSにしたい時は適宜docker-compose.ymlをいじってDBのコンテナを立てればいいと思います。URLやドメイン名はdocker-machine ipのIPアドレスを使うといいだろう。リポジトリを作ってpushしてみよう。

gogsでひとしきり遊んだら、次はdrone。droneにはgogsで作ったアカウントでログインする。droneにログインするとgogsで作ったリポジトリが表示されるので、それをスイッチオンするとサクサク連携されてwebhookが設定される。リポジトリのREADME.mdにバッヂをつけたり、色々やって遊んでみるといいと思います。

普通のgithub.comとかとも連携できるので、必要であればどっかでVMを借りてgithub.comと連携させるということも考えられるが、その時はDRONE_OPEN=falseにしてアカウントを手動登録にしたり、organizationで限定したり、証明書や秘密鍵を設定してhttpsにしたり、工夫しようね。

で、.drone.ymlを作ってcommit / pushすると書いたものが実行されます。droneのイメージはlatest(現在0.6系)なので、pipelineを書いていく.drone.ymlを作る必要がある。普段よく使うのは0.4系のやつで、いきなりimageと書き始めているんだけど、その形式だと0.6系のdroneではタスクが始まらない。いつも古いのを使っている自分にはpipelineを書くのはちょっと違和感があるけど、ちょっと使ってみるとpipelineとserviceを書いて複数のコンテナを直感的に扱えるようになったのは便利になっていると感じる。DBや色々な関連サービスをちゃんと書いてテストできる。これはいろいろと捗る。間違いなく。

デプロイや通知のプラグインもこのpipelineに乗せて実行していく感じになるみたい。サーバ側で設定しなくても、そのまま行けるのかな? droneのdockerイメージは非常に潔くて、/bin/shすらない。/droneのバイナリとSSLのルートCAの証明書がぽつっとあるだけのイメージ。alpineやbusyboxですらない。/droneは管理コマンドにもなっているので、ひととおりの管理はできる。なるほどこういう作り方もあるんだなぁ。

DOCKER_HOSTとかを工夫すれば/var/run/docker.sockではなくTCP接続にできるんだろう、たぶん。たくさんCIを回すようになったら、swarmクラスタで回したいだろうからな…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です