GMO Pepabo, Inc.
技術基盤チーム Advanced Senior
近藤うちお
2015/03/13 CIツール勉強会@福岡
Drone.ioのご紹介
こんにちは
me
Drone.io のご紹介
Drone.io のご紹介
Drone.io のご紹介
Drone.io のご紹介
Contributor of Drone.io
Drone.io のご紹介
Drone.io
CIツール第三世代?
> 第一: とにかく自動で実行する奴
> 第二: Jenkins
> 第三: Travis-CI に代表される

・設定がyamlなどで簡潔

・ビルド環境をクリーンに都度作成

なやつ
Drone.io
> Hosting版とOSS版がある
!
!
!
!
> https://drone.io/
特徴
> 毎回ビルド環境をDockerで作る
> サービスコンテナを別途立ち上げられる
> 意外と豊富な外部サービス連携
> SlackやWebhook通知、s3やHerokuなどへの
デプロイ
> OSS/Apache License v2
> Go製/debやrpmも提供
基本、Drone.io
version 0.3の話をします
導入の経緯
Jenkinsよ……
> CI自体は全社的に普及していた
> しかし
> 各チームでJenkinsを立てていてダブってる感
> 一部の人しか触れないJenkins
> Jenkinsでは通るけどローカルでどうすれば良
いのか不明なテスト
> などなど…
ナウいCIしたいんや!
> 外部サービスは割と高額
> まずは効果検証のため導入したい
> Drone.io ってのがあるよ?
> 0.2ぐらいの頃は機能不足……
> 0.3になったらサクっと動いた
じゃあ、Drone.io
しませんか
Drone.io のご紹介
インストール
deb一発
!
!
> 事前にDockerを入れること
> 実はDockerは同じホストでなくても良い
> rpmはCentOS >= 7向けのようだ
> 未検証…
# Ubuntu, Debian
wget downloads.drone.io/master/drone.deb
sudo dpkg -i drone.deb
データベース
> SQLite3, MySQL, PostgreSQL
> SQLite3はさすがにテスト用っぽい
のでMySQLかポスグレで
> ペパボはMySQL
その他設定
> /etc/drone/drone.toml です
> 詳細はドキュメント
> デフォルトのコメントで空気は分かる……
> 環境変数でも良い
> 不便だけど
リポジトリの設定
> GitHubなりGH:Eなり設定を有効化
> tomlに項目を追加し、 open=true をセット
> ログイン
> sync
> enable
> .drone.yml をプロジェクトルートに配置
してプッシュ→完了
.drone.yml
便利機能
ビルドイメージのカスタマイズ
> 既存で用意されている言語
> ruby, php, node, go, erlangにdartも
> バージョンのそろい方が微妙。

Dockerfileはあるので自作で……
> → https://github.com/drone/drone/blob/master/shared/build/images.go#L174
> ないものは作ればいい
> 2パターン
> 全く独自にイメージを作る
> bradrydzewski/base をベースに作る
ビルドのコツ
> bradrydzewski/base ベースだと
> デフォでrubyとかnode、build-essential、等入り
> ubuntuユーザ
> drone/* と言う名前でないと正しく使えない
> 独自だと、結構自分で色々入れないといけな
いっぽい(特にsocatコマンド)
> Qiitaにもう書いちゃった…
> 「OSS版 Drone.io を社内で使い始めてる話」
サービス立ち上げ
> テストの実行に必要な外部サービスを指
定できる
> MySQL、Redisなど有名どころは組み
込みでサポート
!
!
> → https://github.com/drone/drone/blob/master/shared/build/images.go#L20
service:
- mysql
- redis
- mongodb:2.2
特別なサービスが必要なとき
> 自分でコンテナを作って指定可能
> コンテナでは、EXPOSEで

ポートを指定すれば検知してくれる
> ポートフォワーディングに

socat コマンドを使っている模様
service:
- udzura/custom-mysql:5.6
通知
> notify: ディレクティブで指定
> email(しょぼい……)
> slack
> hipchat
> webhook
Webhook便利
> 組み込みの通知は、

フォーマットがあまり柔軟じゃない
> JSONを食べて別のサービスに渡す
だけの簡単なproxyを書いた
JSONの様子
> Goで雑にWeb APIを書いた
デプロイ系
> publish: と deploy: がある
> deploy
> Heroku, CloudFoundry, 

その他git repo, ssh
> publish
> s3/Swift, Azure, Github Release
s3に上げる
> 雑に成果物をぶち上げる
!
!
!
> 意外と便利
> AWS Keyはハードコードしなくても、

settingで別途指定可能
publish:
s3:
acl: public-read
region: ap-northeast-1
bucket: hoge-bucket
access_key: $$AWS_KEY
secret_key: $$AWS_SECRET
source: hoge.zip
target: hoge/production/$DRONE_BRANCH/
recursive: false
when:
branch: master
Dokkuにプッシュ
> Heroku以外にも、git push がで
きるということで利用
> 普通にプッシュすれば良い
when: 句
> ブランチ、pushした人、などで

デプロイするしないを判定可能
publish:
s3:
acl: public-read
region: ap-northeast-1
bucket: hoge-bucket
access_key: $$AWS_KEY
secret_key: $$AWS_SECRET
source: hoge.zip
target: hoge/production/$DRONE_BRANCH/
recursive: false
when:
branch: master
Hack: Capistrano……
> 対応してないので

ビルドコマンド側の最後に……
script:
# ……
- '[ "${DRONE_BRANCH}" != "master" ] && exit 0'
# master以外の場合この下は実行しないぞ!
- sudo chown -R ubuntu:ubuntu /var/tmp/bundle
- mkdir -p vendor
- ln -s /var/tmp/bundle vendor/bundle
- bundle install --path vendor/bundle
- bundle exec cap production deploy
!
cache:
- /var/tmp/bundle
.drone.ymlの便利ドキュメント
> https://godoc.org/
github.com/drone/drone/
shared/build/script#Build
> godocやんけ……
> しかし一番詳しいし最新だ
運用の実際
オンプレツール運用のイメージ
> 基本厳しい
> インストール困難
> 落ちてエンジニアが一日取られる
> 大変ですね……
> 主にGitl○bと言うインストール型ツールが
培ったイメージ…ごにょごにょ
Drone.ioは?
> インストール楽(1バイナリ最高)
> ほぼ全く落ちない
> Goって凄いんだな、と思わざるを得ない
……
とは言え
> バグや機能不足はそれなりにある
> 結構どんどん直る
> マシンパワーは、まあ要るっすな
……
最近の LA の様子です
困ってる/たこと
fdがリークしていた
> https://github.com/drone/drone/
issues/644
> 定期的に再起動しないと、too many
open files がめっちゃ出てた
> 直った →

https://github.com/drone/drone/
pull/762
ハードディスクが足りない!
> イメージやコンテナもそうだが、
> 一番でかいのはファイルキャッシュ機能
> リポジトリ ブランチごとに残すので、

github-flowだととんでもないことに
> cronで定期的に消すように
> GitHubのdelete webhookを検知してディレクトリ
消せばいいんじゃないかと思うが分散環境じゃ難しいか
……
秘伝のスクリプト
$ find /tmp/drone/*/*/*/* -type d -maxdepth 0 |  # ディレクトリのみ
> grep -v master |  # master のキャッシュは消さない
> xargs -n 5 --verbose rm -rf # 5件ずつじゃないと進 が……
これを毎週末回して解決(...)
並列数/分散ビルド
> workerを追加すればできる
> デフォルトでは
> 同ホストのdocker.sockを見る
> 2つできる(ハードコード)
> 同じエントリを追加すれば、エント
リの数だけworkerを増やしてくれる
8workerにする例
分散で困ること
> どのworkerでビルドするかは選べない
> 独自イメージを使ってると

全台で同期する必要が……
> インハウスなDocker registoryで解決するが

それはそれで別の、ねえ…
> Drone用のDockerfileをリポジトリ管理し、そ
のCDをDroneで行う、みたいなのを考えている
率直な感想
強いマシンさえあれば何とかなる?
> 運用自体はそこまで難しくない印象
> だいぶ地雷を踏み抜いた
> LAは高いが、これ多分

今も「実験的運用」なのでVM上で

走らせてるからです……
テストのポータブル化が進む
> これは非常に大きい
> Jenkins上にしかない秘伝のタレを
はがす
> 手順がリポジトリに必ず入る
> 再現可能なテストになる
テストがポータブルになると
> 将来、「やっぱdroneだめだね…」
となっても、TravisCI/Wercker/
CircleCIなどへ移行するのは手間で
はない
> それが、とにかくまずDroneを入れ
てみる最大のメリットと思う
他の第三世代CIと比べて
> CircleCIの方が使いやすいかも……
> 未経験なですが画面等を見た印象
> 最大の違いはオープンソース
> 困ったらソースを見れば良い
困ったらソースを

見れば良い
便利
総括
CIをナウくしたいなら
> Drone.ioは参入障壁が低い
> OSSで無料です
CIをナウくしたいなら
> Drone.ioは参入障壁が低い
> OSSで無料です
> まあ、余ったサーバがあればだけど……
> まあ、Dockerの扱いにある程度慣れていれ
ば……
> まあ、Goのコードをある程度(ry
自信があるんなら
いいんじゃないすかね……
テストのポータブル化が重要
> ツールでやりたいのは、そういうこと
> 秘伝のタレはがし
> 手順をリポジトリに入れる
> クリーンな環境で通るようにする
> そういう意味では、Drone.io は

良いきっかけになるのでは?
記事広告
Drone.ioを全力で使える仕事あります
> GMOペパボは

福岡/東京ともにエンジニアを

募集中です。
> アプリケーション/インフラ両方です!
> 詳細は:

http://pepabo.com/recruit/
career/
注目の求人
minne 基盤エンジニア
ペパランチョン
> カジュアルにエンジニアの話を聞ける制度です

福岡ではガレリア様のご協力のもと開催中!
http://pepabo.com/recruit/pepaluncheon/
ご清聴
ありがとうございました!

More Related Content

PDF
PlaySQLAlchemy: SQLAlchemy入門
PDF
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
PDF
[DL輪読会]data2vec: A General Framework for Self-supervised Learning in Speech,...
PDF
Python 3.9からの新定番zoneinfoを使いこなそう
PDF
Where狙いのキー、order by狙いのキー
PDF
Python におけるドメイン駆動設計(戦術面)の勘どころ
PDF
機械学習で泣かないためのコード設計
PPTX
やってはいけない空振りDelete
PlaySQLAlchemy: SQLAlchemy入門
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
[DL輪読会]data2vec: A General Framework for Self-supervised Learning in Speech,...
Python 3.9からの新定番zoneinfoを使いこなそう
Where狙いのキー、order by狙いのキー
Python におけるドメイン駆動設計(戦術面)の勘どころ
機械学習で泣かないためのコード設計
やってはいけない空振りDelete

What's hot (20)

PPTX
物体検出の歴史(R-CNNからSSD・YOLOまで)
PDF
PWNの超入門 大和セキュリティ神戸 2018-03-25
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
PDF
Python入門 : 4日間コース社内トレーニング
PDF
Webアプリを並行開発する際のマイグレーション戦略
PDF
Dockerを支える技術
PDF
Dockerfile を書くためのベストプラクティス解説編
PDF
Deeplearning輪読会
PDF
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
PDF
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
PDF
MySQLで論理削除と正しく付き合う方法
PDF
JVMのGCアルゴリズムとチューニング
PDF
生成モデルの Deep Learning
PDF
SSII2021 [TS3] 機械学習のアノテーションにおける データ収集​ 〜 精度向上のための仕組み・倫理や社会性バイアス 〜
PDF
明日使えないすごいビット演算
PPTX
DockerコンテナでGitを使う
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
きつねさんでもわかるLlvm読書会 第2回
PDF
Pythonによる黒魔術入門
物体検出の歴史(R-CNNからSSD・YOLOまで)
PWNの超入門 大和セキュリティ神戸 2018-03-25
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
Python入門 : 4日間コース社内トレーニング
Webアプリを並行開発する際のマイグレーション戦略
Dockerを支える技術
Dockerfile を書くためのベストプラクティス解説編
Deeplearning輪読会
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
MySQLで論理削除と正しく付き合う方法
JVMのGCアルゴリズムとチューニング
生成モデルの Deep Learning
SSII2021 [TS3] 機械学習のアノテーションにおける データ収集​ 〜 精度向上のための仕組み・倫理や社会性バイアス 〜
明日使えないすごいビット演算
DockerコンテナでGitを使う
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
きつねさんでもわかるLlvm読書会 第2回
Pythonによる黒魔術入門
Ad

Viewers also liked (7)

PPTX
Jenkinsとamazon ecsで コンテナCI
PDF
捕鯨!詳解docker
PDF
Dockerの仕組みとIIJ社内での利用例
PDF
Dockerの利用事例
PDF
モニタリングシステムのこれまでとこれから (2015-01-30)
PDF
ヒカルのGo 資料 Webアプリケーションの作り方
PDF
Light and shadow of microservices
Jenkinsとamazon ecsで コンテナCI
捕鯨!詳解docker
Dockerの仕組みとIIJ社内での利用例
Dockerの利用事例
モニタリングシステムのこれまでとこれから (2015-01-30)
ヒカルのGo 資料 Webアプリケーションの作り方
Light and shadow of microservices
Ad

Similar to Drone.io のご紹介 (20)

PDF
クラウド開発に役立つ OSS あれこれ
PDF
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
KEY
SnapDishの事例
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
PDF
Ansible の CI を drone/Dokcker で試してみた
PDF
真Drone入門
PDF
cloudstack devcloud
PDF
成長を加速する minne の技術基盤戦略
PPTX
JAWS-UG Santo 2014-07-05 Drupal on PaaS Cloud
PDF
Azure DevOps と開発管理
PDF
ドリコムJenkins勉強会資料
PDF
Mina 20130417
PDF
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
PDF
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
PDF
Devops @ Gengo -- AWS日本語初会議
PDF
2014_0206 aws startup_tech
PPTX
オープンソースによるドローン開発の概要( #ABC2015S )
PDF
What i feel when began use AWS CodePipeline as GitLab Ci user
PPTX
オープンソースのドローン用フライトコントローラ「Dronecode」の概要( #OSC15tk)
クラウド開発に役立つ OSS あれこれ
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
SnapDishの事例
はてなにおける継続的デプロイメントの現状と Docker の導入
Ansible の CI を drone/Dokcker で試してみた
真Drone入門
cloudstack devcloud
成長を加速する minne の技術基盤戦略
JAWS-UG Santo 2014-07-05 Drupal on PaaS Cloud
Azure DevOps と開発管理
ドリコムJenkins勉強会資料
Mina 20130417
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
Devops @ Gengo -- AWS日本語初会議
2014_0206 aws startup_tech
オープンソースによるドローン開発の概要( #ABC2015S )
What i feel when began use AWS CodePipeline as GitLab Ci user
オープンソースのドローン用フライトコントローラ「Dronecode」の概要( #OSC15tk)

More from Uchio Kondo (13)

PDF
人間たちとsystemd
PDF
ペパボのサービスとRuby
PDF
minneで学ぶクラウド脳
PDF
Ruby way-openstack.keynote
PDF
インフラ自動化とHashicorp tools
PDF
Puppet of-2015-forupload
PDF
Hashicorpツールズ
PDF
Consul は 全自動オーケストレーションの 夢を見るか?
PDF
ペパボ福岡支社におけるRubyの活用事例
PDF
Testing in Sinatra
PDF
Start-padrino
PDF
Rubyist started to learn Groovy - things important to leran new LL
PDF
otomodachi-kakumei
人間たちとsystemd
ペパボのサービスとRuby
minneで学ぶクラウド脳
Ruby way-openstack.keynote
インフラ自動化とHashicorp tools
Puppet of-2015-forupload
Hashicorpツールズ
Consul は 全自動オーケストレーションの 夢を見るか?
ペパボ福岡支社におけるRubyの活用事例
Testing in Sinatra
Start-padrino
Rubyist started to learn Groovy - things important to leran new LL
otomodachi-kakumei

Drone.io のご紹介