LoginSignup
3
2

More than 5 years have passed since last update.

ElasticBeanstalkでDrone.ioを試してみる

Last updated at Posted at 2016-07-07

Jenkinsに嫌気がさしてきたので代わりを探し中でDrone.ioのOSS版さわってみた。

現状ソースの管理にBitbucket使っていてCIでDockerもバリバリ使いたい。
でも、Bitbucketに対応したDockerコンテナが扱えるCIのSaaSはあまりない印象。
Bitbucket Pipelineも出てきたがDocker in Dockerが無理そうでDockerのビルドや複数コンテナのrunが出来なさそう。

Drone.ioのSaaS版はPrivateリポジトリを扱おうとすると有料だが、そんなところにOSS版があるのを知って触ってみた。

Drone.ioについて

Drone.ioのご紹介 がわかりやすかった。

Drone.io環境の構築

基本的にOverview · Droneの通りでいけた。

BitbucketのOAuth設定

Bitbucketの設定の「OAuth」でBitbucket Cloud · Droneに従って設定。
クライアントIDと鍵とシークレットをメモしておく。

  • Callback URLに[drone環境のURL]/authorize
  • 権限は以下の通りに設定
    Account:Email
    Account:Read
    Team Membership:Read
    Repositories:Read
    Webhooks:Read and Write

RDSの作成

  • mysqlのRDSインスタンスを作成。
  • Database · Droneにある通りdroneデータベースも作成しておく。
$ mysql -u [DBユーザ名] -p -h [RDSエンドポイント] -e 'create database if not exists drone;'

ElasticBeanstalk環境の構築

マルチコンテナ環境を作って以下のアプリをデプロイ。

  • Dockerrun.aws.json
{
  "AWSEBDockerrunVersion": "2",
  "volumes": [
    {
      "name": "drone",
      "host": {
        "sourcePath": "/var/lib/drone"
      }
    },
    {
      "name": "docker",
      "host": {
        "sourcePath": "/var/run/docker.sock"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "drone",
      "image": "drone/drone",
      "memory": 128,
      "essential" : true,
      "environment": [
        {
          "name": "REMOTE_DRIVER",
          "value": "bitbucket"
        },
        {
          "name": "REMOTE_CONFIG",
          "value": "https://bitbucket.org?client_id=[OAuthの鍵]&client_secret=[OAuthのシークレット]"
        },
        {
          "name": "DATABASE_DRIVER",
          "value": "mysql"
        },
        {
          "name": "DATABASE_CONFIG",
          "value": "[DBユーザ]:[DBパスワード]@tcp([RDSエンドポイント]:3306)/drone?parseTime=true"
        },
        {
          "name": "DRONE_ADMIN_ALL",
          "value": "true"
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "drone",
          "containerPath": "/var/lib/drone"
        },
        {
          "sourceVolume": "docker",
          "containerPath": "/var/run/docker.sock"
        }
      ],
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 8000
        }
      ]
    }
  ]
}

ELBのアクセス制限

ELBのアクセス制限をする場合は、BitbucketのWebHookを受け取るために以下のIPからのアクセスを許可しておく。
What are the Bitbucket Cloud IP addresses I should use to configure my corporate firewall - Atlassian Documentation

2016/07/07時点で以下

104.192.143.192/28
104.192.143.208/28

リポジトリのActivate

Drone.ioにログインしてAvailable Repositoriesから連携したいリポジトリをActivateする。

BitbucketへのSSHキーの登録

Drone.ioでActivateしてActiveになったリポジトリのSETTINGSからPublic Keyの値をコピーしてBitbucketの設定の「SSHキー」に登録する。

Trustedオプションの設定

Drone.ioで該当リポジトリのSETTINGSのTrustedオプションをオンにする。
※ オンにしないと.drone.ymlでvolumesやprivilegedオプションなどが使えない(参照)。
※ Adminユーザでないと設定変更できないのでDockerrun.aws.jsonでDRONE_ADMIN_ALLをtrueにしている(全ユーザAdmin扱い)。

WebHookを試してみる

以下のファイルとDockerfileをリポジトリに配置してコミット&プッシュ。
=> Drone.ioでのビルド成功

  • .drone.yml
build:                                                                  
  image: docker:latest
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  commands:
    - docker build -t test .

環境構築でハマったこと

Drone.ioのSETTINGSの変更

  • 現象:Drone.ioで該当リポジトリのSETTINGSを変更しても反映されない。
  • 原因:SETTINGSの変更はPATCHメソッドで実行されていたがプロキシが対応しておらず400でエラーになっていた(ブラウザのネットワークの通信を見てわかった)。
  • 対応:一時的に外部からのアクセスを許可してプロキシを利用しないで設定変更、、、

その他

  • ElasticBeanstalkのEC2ロールの不備で環境作成失敗
  • Bitbucketからのアクセスを許可していないくてWebHookが実行されない

試してみた感想

まだディープに触ってないがいい感じ。
公式のドキュメントがあってdockerコンテナで構築しやすいところが良い。

3
2
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
3
2