LoginSignup
1
1

More than 5 years have passed since last update.

droneの導入にハマった

Last updated at Posted at 2018-03-28

droneとは

有象無象のCIツールのひとつです。

他ツール(CircleCI/Wercker)との違いはオンプレミスでも使えるOSS版が公開されているところです。

Dockerを使ったCIサーバ「Drone」レビュー
https://knowledge.sakura.ad.jp/2729/

k8sとのCI連携では選択肢の一つかと思い導入しようとしてみましたが、些細なところで躓いたので備忘録として。

ハマり1.sqliteデータが作られない

公式のdocker-composeをそのまま使うと、以下のエラーとなりました。
http://readme.drone.io/admin/installation-guide/

drone-server_1  | time="2017-11-07T13:14:22Z" level=error msg="unable to open database file"
drone-server_1  | time="2017-11-07T13:14:22Z" level=fatal msg="database ping attempts failed"

droneは/var/lib/drone配下にdrone.sqliteを作るようですが、権限の問題か作れませんでした。
Jenkinsでも似たような問題がありますが、ホストボリュームではなく、dockerボリュームにすると上手くいきます。

ハマり2.GitHubからのwebhookが来ない

これはdroneというよりもAWSの問題で、GitHubからのwebhookはセキュリティグループを解放してあげる必要があります。
オンプレミスでdroneを利用するときには、自前のGitHub EnterpriseやGitLabがあると思うので、レアケースかと。

GitHubのHookのIPアドレスは以下のhookより。

GitHubの外向けIPアドレス
https://qiita.com/hoyo/items/5950d5f70ba52335dcd2

ハマり3.docker-agentがpermmision denyになる

webhookが通じるようになりましたが、次は以下のエラー。

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/volumes/create: dial unix /var/run/docker.sock: connect: permission denied

agentにdocker.sockを動かす権限がないため、permission denyになってしまいました。
rootユーザの権限を与えるか、dockerグループに入れたユーザで起動する必要があります。

今回は取り急ぎ特権ユーザを付与しました。

結果

image.png

できました。
Jenkinsよりもdockerを利用したビルドの初動が早いですね。

今回利用したdocker-compose

docker-compose.yaml
version: '2'

services:
  drone-server:
    image: drone/drone:0.8

    ports:
      - 80:8000
      - 9000
    restart: always
    volumes:
      - /var/lib/drone
    environment:
      - DEBUG=true
      - DRONE_OPEN=true
      - DRONE_HOST=http://XXX.XXX.XXX.XXX
      - DRONE_GITHUB=true
      - DRONE_GITHUB_CLIENT=XXXX # GitHubのOAuth Appsの設定より
      - DRONE_GITHUB_SECRET=XXXX # GitHubのOAuth Appsの設定より
      - DRONE_SECRET=XXXXX # 任意のパスワード
  drone-agent:
    image: drone/agent:0.8
    command: agent
    restart: always
    privileged: true
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET=XXXXX # 任意のパスワード

おわりに

devopsではCI/CD、運用の自動化、セキュリティは必須だと改めて感じる今日この頃です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1