とっとるびー第23回発表資料(jenkins卒業 ポストjenkinsの選定-)
TRANSCRIPT
自己紹介
• 仕事:AWSインフラを中心としたWebサービス開発
• @mechamogera
• Twitter:https://twitter.com/mechamogera
• Github:https://github.com/mechamogera
• Qiita:http://qiita.com/mechamogera
今日お話しすること
• Jenkinsとの関わり
• Jenkins運用で嫌になったところ
• ポストJenkinsへ要求する機能
• Dockerとは
• ポストJenkins候補の紹介
• ポストJenkinsの決定
Jenkinsとの関わり
• Hudson(2010年頃)からのお付合
• ビルド、テストCIからデプロイ、緊急対応タスクまで様々な用途で利用
• 環境依存のタスクをJenkinsに閉じ込めようとした
• いろいろ記事かいた
• GithubからJenkinsへのServer Hook
• AWSでJenkinsスレーブをAutoScaling(笑)させてみた
• JenkinsのGroovy Postbuild Pluginで特定ビューの全てのジョブを無効化する
• ...
Jenkins運用で嫌になったところ
• ジョブのバージョン管理困難
• ジョブの設定をバージョン管理できる仕組みなし
• 工夫が必要
• Jenkinsサーバーのバージョン管理必要
• CIインフラの構成が不明になりがち
• プラグイン管理
• 本体バージョンアップ時にプラグインがついてこない
• どれが何の機能を持っているか把握困難
• Jenkins職人化(属人化)
• 特定の人にしかJenkinsが管理できないように
Jenkins運用で嫌になったところ
• スケーラビリティ
• マスターがネックになる構成
• 貧弱なAPI
• 情報取得、ジョブ実行くらいしかできない
• 不安定
• OutOfMemory多発、原因不明のジョブ実行/本体起動失敗発生
• 可用性の確保困難
• マスター多重化不可
ポストJenkinsへ要求する機能
• MUST
• Bitbucketに対応していること(プロジェクトでBitbucket利用)
• Dockerコンテナが扱えること(できればDocker in Docker可)
• リポジトリ内の設定ファイルで実行手順を制御できること
• WANT
• フルマネージドサービス
Dockerとは
• コンテナ構成をDockerfileで記述可能Front centos:centos7
MAINTENER mechamogera
ADD td.repo /etc/yum.repos.d/td.repo
RUN yum clean all && yum update –y
RUN rmp –import http://package.treasuredata.com/ORG=KEY=td-agent
....
CIでのDocker in Docker
• 通常ではDocker in Docker(コンテナ中でコンテナ起動)不可
• CIでDocker in Dockerの必要あり(ホストなら不要)
• 複数コンテナの利用
• => Dockerの1コンテナ1プロセスを守っている公開イメージの利用
• プライベートDockerfile管理によるDockerイメージ作成
Docker in Docker 2つの方法
• --privilegedオプション
• -v /var/run/docker.sock:/var/run/docker.sockオプション
コンテナ
コンテナ
コンテナ
起動
コンテナ起動
ポストJenkins候補
• Bitbucket対応のCI少ない & Docker特化のCI少ない
• Bitbucket Pipeline(beta )
• Drone.io OSS版
• CI Zen?
• GithubだとCircle CIが良さそう
Bitbucket Pipeline
• bitbucket-pipelines.yml
image: ruby:2.3.0
pipelines:default:
- step:script: # Modify the commands below to build and test your repository.
- ruby --version- bundler --version- bundle install
Drone.io OSS版
• .drone.yml
pipeline:
build:
image: docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock
commands:
- docker build ...
- docker run ...
- docker push ...
Drone.io OSS版
• ElasticBeanstalkでDrone.ioを試してみる- Qiita
• 良いところ
• コンテナでCI可
• Docker in Docker可
• 悪いところ
• 自前で運用必要
• ただし、コンテナ提供やAWS利用で運用コストは抑えられそう
ポストJenkins決定
• Bitbucket PipelineとDrone.io OSS版の併用
• 可能なものはBitbucketPipeline(フルマネージドサービス)で
• Docker関係はDrone.ioで
• 環境依存なことはDockerに押し込める
ポストJenkinsで解決される問題
• ジョブのバージョン管理困難
• => リポジトリ内の設定ファイル
• Jenkinsサーバーのバージョン管理必要
• => Dockerfile
• プラグイン管理
• => なし
• Jenkins職人化(属人化)
• => コードベースによる管理(属人性の排除)
ポストJenkinsで解決される問題
• スケーラビリティ
• => Bitbucket Pipeline:お任せ、Drone.io:仕組みあり
• 貧弱なAPI
• =>利用パターンに適合するAPIがあるか様子見、Drone.ioにはコマンドラインツールあり
• 不安定
• => 様子見
• 可用性の確保困難
• => Bitbucket Pipeline:お任せ、Drone.io:仕組みあり