LoginSignup
18
15

More than 5 years have passed since last update.

OSS版 drone.io を CentOS 7 で動かして Github Enterprise のリポジトリをテストする

Last updated at Posted at 2015-07-11

はじめに

以前、Docker/Drone を CentOS 6.5 で動かして Github Enterprise のリポジトリをテストする - TAKUMI SAKAMOTO’S BLOG のように CentOS 6.5 に Drone を立てたのであるが、最近の Drone は CentOS 6.5 のサポートを切り捨てているようで、CentOS 6.5 で動かそうとすると色々困難がある。CentOS 7 であれば rpm が用意されているのでさっくりインストールすることができる。

Docker も Drop support for RHEL6/CentOS6 - docker/docker と言っていたりするので、そういう意味でも CentOS 7 で動かしたほうが良い。もしくは Ubuntu.

Docker のインストール

iptables 有効化

CentOS 7 は標準では iptables ではなく firewalld を使うが、docker が iptables を利用するので、firewalld を無効化して iptables を有効化する

systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services
systemctl enable iptables
systemctl start iptables

/etc/sysconfig/iptables で制限がかかっていて docker コンテナ間の通信がうまくいかなかったりしたので修正を入れた。

 *filter
 :INPUT ACCEPT [0:0]
 :FORWARD ACCEPT [0:0]
 :OUTPUT ACCEPT [0:0]
 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 -A INPUT -p icmp -j ACCEPT
 -A INPUT -i lo -j ACCEPT
--A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
+-A INPUT -p tcp -m state --state NEW -m tcp -j ACCEPT
--A INPUT -j REJECT --reject-with icmp-host-prohibited
--A FORWARD -j REJECT --reject-with icmp-host-prohibited
 COMMIT

Docker のインストール

curl -O -sSL https://get.docker.com/rpm/1.7.0/centos-7/RPMS/x86_64/docker-engine-1.7.0-1.el7.centos.x86_64.rpm
yum localinstall --nogpgcheck docker-engine-1.7.0-1.el7.centos.x86_64.rpm
yum install libcgroup-tools # これも必要

yum install docker でも入るが、こちらの rpm のほうがバージョンが新しそうなのでこちらにした

動作確認

docker run hello-world

Drone のインストール

cf. http://readme.drone.io/setup/install/centos/

wget downloads.drone.io/master/drone.rpm
sudo yum localinstall drone.rpm

Drone の起動

起動

systemctl start drone

確認

ブラウザから80番ポートへアクセス

ログ

journalctl -u drone

Drone の認証設定

github:e の OAuth を使って認証管理する。

で、client id と client secret が発行されるので、/etc/drone/drone.toml に登録

[github_enterprise]
client="xxxxx"
secret="xxxxxxxxxxxxxx"
url = "https://GITHUB_DOMAIN"
api = "https://GITHUB_DOMAIN/api/v3/"
# orgs=[] # github_enterprise の特定 organization に所属しているメンバーのみユーザ登録を許可
private_mode=true # これで git@ でアクセスするようになる。github:e なので git@ でアクセスさせる
open=true # ユーザ登録を open にする

GITHUB_DOMAIN には github enterprise のドメインを、DRONE_HOST には drone をたてたホストを入れる。

再起動

systemctl restart drone

確認

ブラウザから80番ポートにアクセスし、github:e の OAuth でログインできることを確認

アカウント発行

左上のメニュー > Users

image

右上の register users

image

image

のようにしてアカウント発行する。これで他のメンバもログインできるようになるはずだ。

ビルドの設定

ビルドを許可するレポジトリの選択

左上のメニュー > Repositories

image

レポジトリを検索して、チェックを入れる

image

.drone.yml の作成

そのレポジトリに .drone.yml を push する。自分はこんなかんじにしている。

image: "bradrydzewski/ruby:2.0.0"
env:
  - RAILS_ENV=test
cache:
  - /tmp/bundler
git:
  depth: 1
script:
  - pwd
  - whoami
  - rbenv versions
  - lsof -P | grep TCP
  - ps -ef | grep socat
  - ls -la /tmp/bundler
  # for debug until here
  - sudo chown -R ubuntu:ubuntu /tmp/bundler
  - bundle install --path /tmp/bundler
  - bundle exec rake db:create db:migrate
  - bundle exec rspec
services:
  - mysql
  - redis
branches: # PR and this branches only
  - master
notify:
  slack:
    webhook_url: $$SLACK_WEBHOOK_URL
    username: 'drone'
    channel: '#sonots'
    on_started: false
    on_success: true
    on_failure: true

秘匿情報は .drone.yml に書かずに、drone 上で設定して参照するようにすると良い。この例では $$SLACK_WEBHOOK_URL がソレで、プロジェクトの Settings 画面から設定できる。

image

これで commit && push すれば drone 上のビルドが動くはず。

Troubleshooting

database.yml の変更

config/database.yml の localhost 指定を 127.0.0.1 指定に変更する必要あり。

localhost 指定の場合、port を指定していても libmysqlclient が tcp ポートではなく unix domain socket を使って mysql にアクセスしようとしてしまい、drone の環境ではポートフォーワードして mysql コンテナにアクセスしている都合上 unix domain socket アクセスでは上手くいかない。See http://kitak.hatenablog.jp/entry/2013/10/11/062548

Drone 用の docker イメージをビルドする

See http://qiita.com/sonots/items/986f16dc15ba7b09aa06

コンテナの中に入ってデバグする

See http://qiita.com/sonots/items/b1f9c1708e4474b9c2be

おまけ - docker0

docker は docker0 という仮想ネットワークデバイスを作成して、docker コンテナ <-> ホスト間の通信を行うのであるが、デフォルトのサブネットが 172.17.0.0/16 となっており、弊社の環境が使っているサブネットとコンフリクトして(!!!) ping すら通らなくなったので docker0 を作り直すなどした。

普通の方には不要な作業のはず。。。

ip link set dev docker0 down
ip addr del 172.17.42.1/16 dev docker0
ip addr add 192.168.5.1/24 dev docker0
ip link set dev docker0 up

もろもろ再起動

systemctl restart docker
systemctl restart iptables
18
15
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
18
15