66
GMO Pepabo, Inc. 技術基盤チーム Advanced Senior 近藤うちお 2015/03/13 CIツール勉強会@福岡 Drone.ioのご紹介

Drone.io のご紹介

Embed Size (px)

Citation preview

Page 1: Drone.io のご紹介

GMO Pepabo, Inc. 技術基盤チーム Advanced Senior

近藤うちお

2015/03/13 CIツール勉強会@福岡

Drone.ioのご紹介

Page 2: Drone.io のご紹介

こんにちは

Page 3: Drone.io のご紹介

me

Page 4: Drone.io のご紹介
Page 5: Drone.io のご紹介
Page 6: Drone.io のご紹介
Page 7: Drone.io のご紹介
Page 8: Drone.io のご紹介

Contributor of Drone.io

Page 9: Drone.io のご紹介
Page 10: Drone.io のご紹介

Drone.io

Page 11: Drone.io のご紹介

CIツール第三世代?> 第一: とにかく自動で実行する奴 > 第二: Jenkins > 第三: Travis-CI に代表される ・設定がyamlなどで簡潔・ビルド環境をクリーンに都度作成なやつ

Page 12: Drone.io のご紹介

Drone.io> Hosting版とOSS版がある

!

!

!

!

> https://drone.io/

Page 13: Drone.io のご紹介

特徴> 毎回ビルド環境をDockerで作る > サービスコンテナを別途立ち上げられる > 意外と豊富な外部サービス連携 > SlackやWebhook通知、s3やHerokuなどへのデプロイ

> OSS/Apache License v2 > Go製/debやrpmも提供

Page 14: Drone.io のご紹介

基本、Drone.io version 0.3の話をします

Page 15: Drone.io のご紹介

導入の経緯

Page 16: Drone.io のご紹介

Jenkinsよ……> CI自体は全社的に普及していた > しかし > 各チームでJenkinsを立てていてダブってる感 > 一部の人しか触れないJenkins > Jenkinsでは通るけどローカルでどうすれば良いのか不明なテスト > などなど…

Page 17: Drone.io のご紹介

ナウいCIしたいんや!> 外部サービスは割と高額 > まずは効果検証のため導入したい

> Drone.io ってのがあるよ? > 0.2ぐらいの頃は機能不足…… > 0.3になったらサクっと動いた

Page 18: Drone.io のご紹介

じゃあ、Drone.io しませんか

Page 19: Drone.io のご紹介
Page 20: Drone.io のご紹介

インストール

Page 21: Drone.io のご紹介

deb一発!

!

> 事前にDockerを入れること > 実はDockerは同じホストでなくても良い > rpmはCentOS >= 7向けのようだ > 未検証…

# Ubuntu, Debian wget downloads.drone.io/master/drone.deb sudo dpkg -i drone.deb

Page 22: Drone.io のご紹介

データベース> SQLite3, MySQL, PostgreSQL > SQLite3はさすがにテスト用っぽいのでMySQLかポスグレで > ペパボはMySQL

Page 23: Drone.io のご紹介

その他設定> /etc/drone/drone.toml です > 詳細はドキュメント > デフォルトのコメントで空気は分かる……

> 環境変数でも良い > 不便だけど

Page 24: Drone.io のご紹介

リポジトリの設定> GitHubなりGH:Eなり設定を有効化 > tomlに項目を追加し、 open=true をセット

> ログイン > sync > enable > .drone.yml をプロジェクトルートに配置してプッシュ→完了

Page 25: Drone.io のご紹介

.drone.yml 便利機能

Page 26: Drone.io のご紹介

ビルドイメージのカスタマイズ> 既存で用意されている言語 > ruby, php, node, go, erlangにdartも > バージョンのそろい方が微妙。Dockerfileはあるので自作で……

> → https://github.com/drone/drone/blob/master/shared/build/images.go#L174

> ないものは作ればいい > 2パターン > 全く独自にイメージを作る > bradrydzewski/base をベースに作る

Page 27: Drone.io のご紹介

ビルドのコツ> bradrydzewski/base ベースだと > デフォでrubyとかnode、build-essential、等入り > ubuntuユーザ > drone/* と言う名前でないと正しく使えない

>独自だと、結構自分で色々入れないといけないっぽい(特にsocatコマンド)

> Qiitaにもう書いちゃった… > 「OSS版 Drone.io を社内で使い始めてる話」

Page 28: Drone.io のご紹介

サービス立ち上げ> テストの実行に必要な外部サービスを指定できる > MySQL、Redisなど有名どころは組み込みでサポート !

!

> → https://github.com/drone/drone/blob/master/shared/build/images.go#L20

service: - mysql - redis - mongodb:2.2

Page 29: Drone.io のご紹介

特別なサービスが必要なとき> 自分でコンテナを作って指定可能 > コンテナでは、EXPOSEでポートを指定すれば検知してくれる > ポートフォワーディングにsocat コマンドを使っている模様

service: - udzura/custom-mysql:5.6

Page 30: Drone.io のご紹介

通知> notify: ディレクティブで指定 > email(しょぼい……) > slack > hipchat > webhook

Page 31: Drone.io のご紹介

Webhook便利> 組み込みの通知は、フォーマットがあまり柔軟じゃない > JSONを食べて別のサービスに渡すだけの簡単なproxyを書いた

Page 32: Drone.io のご紹介

JSONの様子> Goで雑にWeb APIを書いた

Page 33: Drone.io のご紹介

デプロイ系> publish: と deploy: がある > deploy > Heroku, CloudFoundry, その他git repo, ssh

> publish > s3/Swift, Azure, Github Release

Page 34: Drone.io のご紹介

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

Page 35: Drone.io のご紹介

Dokkuにプッシュ> Heroku以外にも、git push ができるということで利用 > 普通にプッシュすれば良い

Page 36: Drone.io のご紹介

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

Page 37: Drone.io のご紹介

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

Page 38: Drone.io のご紹介

.drone.ymlの便利ドキュメント> https://godoc.org/github.com/drone/drone/shared/build/script#Build > godocやんけ…… > しかし一番詳しいし最新だ

Page 39: Drone.io のご紹介

運用の実際

Page 40: Drone.io のご紹介

オンプレツール運用のイメージ> 基本厳しい > インストール困難 > 落ちてエンジニアが一日取られる > 大変ですね…… > 主にGitl○bと言うインストール型ツールが培ったイメージ…ごにょごにょ

Page 41: Drone.io のご紹介

Drone.ioは?> インストール楽(1バイナリ最高) > ほぼ全く落ちない > Goって凄いんだな、と思わざるを得ない……

Page 42: Drone.io のご紹介

とは言え> バグや機能不足はそれなりにある > 結構どんどん直る

> マシンパワーは、まあ要るっすな……

最近の LA の様子です

Page 43: Drone.io のご紹介

困ってる/たこと

Page 44: Drone.io のご紹介

fdがリークしていた> https://github.com/drone/drone/issues/644 > 定期的に再起動しないと、too many open files がめっちゃ出てた

> 直った →https://github.com/drone/drone/pull/762

Page 45: Drone.io のご紹介

ハードディスクが足りない!> イメージやコンテナもそうだが、 > 一番でかいのはファイルキャッシュ機能 > リポジトリ×ブランチごとに残すので、github-flowだととんでもないことに > cronで定期的に消すように > GitHubのdelete webhookを検知してディレクトリ消せばいいんじゃないかと思うが分散環境じゃ難しいか……

Page 46: Drone.io のご紹介

秘伝のスクリプト

$ find /tmp/drone/*/*/*/* -type d -maxdepth 0 | \ # ディレクトリのみ

> grep -v master | \ # master のキャッシュは消さない > xargs -n 5 --verbose rm -rf # 5件ずつじゃないと進捗が……

これを毎週末回して解決(...)

Page 47: Drone.io のご紹介

並列数/分散ビルド> workerを追加すればできる > デフォルトでは > 同ホストのdocker.sockを見る > 2つできる(ハードコード)

> 同じエントリを追加すれば、エントリの数だけworkerを増やしてくれる

Page 48: Drone.io のご紹介

8workerにする例

Page 49: Drone.io のご紹介

分散で困ること> どのworkerでビルドするかは選べない > 独自イメージを使ってると全台で同期する必要が…… > インハウスなDocker registoryで解決するが それはそれで別の、ねえ… > Drone用のDockerfileをリポジトリ管理し、そのCDをDroneで行う、みたいなのを考えている

Page 50: Drone.io のご紹介

率直な感想

Page 51: Drone.io のご紹介

強いマシンさえあれば何とかなる?> 運用自体はそこまで難しくない印象 > だいぶ地雷を踏み抜いた > LAは高いが、これ多分今も「実験的運用」なのでVM上で走らせてるからです……

Page 52: Drone.io のご紹介

テストのポータブル化が進む> これは非常に大きい > Jenkins上にしかない秘伝のタレをはがす > 手順がリポジトリに必ず入る > 再現可能なテストになる

Page 53: Drone.io のご紹介

テストがポータブルになると> 将来、「やっぱdroneだめだね…」となっても、TravisCI/Wercker/CircleCIなどへ移行するのは手間ではない > それが、とにかくまずDroneを入れてみる最大のメリットと思う

Page 54: Drone.io のご紹介

他の第三世代CIと比べて> CircleCIの方が使いやすいかも…… > 未経験なですが画面等を見た印象

> 最大の違いはオープンソース > 困ったらソースを見れば良い

Page 55: Drone.io のご紹介

困ったらソースを見れば良い

Page 56: Drone.io のご紹介

便利

Page 57: Drone.io のご紹介

総括

Page 58: Drone.io のご紹介

CIをナウくしたいなら> Drone.ioは参入障壁が低い > OSSで無料です

Page 59: Drone.io のご紹介

CIをナウくしたいなら> Drone.ioは参入障壁が低い > OSSで無料です > まあ、余ったサーバがあればだけど…… > まあ、Dockerの扱いにある程度慣れていれば……

> まあ、Goのコードをある程度(ry

Page 60: Drone.io のご紹介

自信があるんなら いいんじゃないすかね……

Page 61: Drone.io のご紹介

テストのポータブル化が重要> ツールでやりたいのは、そういうこと > 秘伝のタレはがし > 手順をリポジトリに入れる > クリーンな環境で通るようにする

> そういう意味では、Drone.io は良いきっかけになるのでは?

Page 62: Drone.io のご紹介

記事広告

Page 63: Drone.io のご紹介

Drone.ioを全力で使える仕事あります

> GMOペパボは福岡/東京ともにエンジニアを募集中です。 > アプリケーション/インフラ両方です! > 詳細は:http://pepabo.com/recruit/career/

Page 64: Drone.io のご紹介

注目の求人minne 基盤エンジニア

Page 65: Drone.io のご紹介

ペパランチョン> カジュアルにエンジニアの話を聞ける制度です福岡ではガレリア様のご協力のもと開催中!http://pepabo.com/recruit/pepaluncheon/

Page 66: Drone.io のご紹介

ご清聴 ありがとうございました!