CIツール「drone」の紹介

droneとは

オープンソースのCI(継続的インテグレーション)ツール githubでのプルリクエストやプッシュ等のトリガーが実行される毎に 自動で新規でコンテナを作成し、テストを行ってくれるいい奴

本家ドキュメント

メリット

  • 毎回コンテナ起動からテストが開始されるため、環境に左右されずらいシステムになっていく
  • drone自体もコンテナで起動するため、ポータビリティが高い
  • yamlでのビルド設定で、煩雑なGUI操作がない
  • 開発者に優しく、CLI環境も用意されている
  • プラグインはコンテナを連携させるような形で容易に実現できる

使い方

  • レポジトリのトップに設定を記述した.drone.yamlを設置するだけ
  • githubオーガナイズのメンバー以外はログイン出来ないとかの設定が簡単

簡単に試せる

drone自体がコンテナでの提供前提なので、dockerで簡単にサーバが構築できる ec2上で簡単に構築する事が出来ました (ちゃんと各imageをdocker pullしてからupしてね)

今回検証に利用したdocker-compose.yaml

version: '2'

services:
  drone-db:
    image: mysql/mysql-server:latest
    ports:
      - 3306
    volumes:
      - /root/drone/data:/var/lib/mysql
    restart: always
    hostname: drone-db
    environment:
      - MYSQL_DATABASE=drone
      - MYSQL_USER=drone
      - MYSQL_PASSWORD=drone

  drone-server:
    image: drone/drone:0.8
    ports:
      - 80:8000
      - 9000
    depends_on:
      - drone-db
    volumes:
      - /root/drone:/var/lib/drone/
    restart: always
    environment:
      - DRONE_OPEN=true
      - DRONE_HOST=127.0.0.1
      - DRONE_GITHUB=true
      - DRONE_GITHUB_CLIENT={見せらせないよ}
      - DRONE_GITHUB_SECRET={見せられないよ}
      - DRONE_ORGS=nantoka-team
      - DRONE_ADMIN=naganeys
      - DRONE_SECRET=dronedronedrone
      - DRONE_DATABASE_DRIVER=mysql
      - DRONE_DATABASE_DATASOURCE=drone:drone@tcp(drone-db:3306)/drone?parseTime=true

  drone-agent:
    image: drone/agent:0.8

    command: agent
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET=dronedronedrone