とっとるびー第23回発表資料(jenkins卒業 ポストjenkinsの選定-)

21
Jenkins卒業 ポストJenkinsの選定

Upload: haseo-yamauchi

Post on 09-Jan-2017

100 views

Category:

Software


1 download

TRANSCRIPT

Jenkins卒業ポストJenkinsの選定

自己紹介

• 仕事: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とは

• コンテナ型の軽量な仮想化技術

• ハイパーバイザー型

• コンテナ型

OSミドルウェア

アプリ仮想化管理ソフト

OSミドルウェア

アプリ仮想化管理ソフト

OS

コンテナ

VM

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で行う利点

• CIインフラのConfiguration as Codeが可能

• メリット

• 手動ミス回避

• 構成バージョン管理

• リソース有効活用

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

BitbucketPipeline

• 良いところ

• フルマネージドサービス

• コンテナでCI可

• 悪いところ

• Dockerin Docker不可

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:仕組みあり

今日お話ししたこと

• Jenkinsとの関わり

• Jenkins運用で嫌になったところ

• ポストJenkinsへ要求する機能

• Dockerとは

• ポストJenkins候補の紹介

• ポストJenkinsの決定