14
Jenkins with Docker 13/12/20 第8回 Jenkins 勉強会 Kazuki Suda

Jenkins with Docker

  • Upload
    yahoo

  • View
    14.776

  • Download
    2

Embed Size (px)

DESCRIPTION

2013/12/20 第8回 Jenkins勉強会 https://github.com/ydnjp/jenkins-with-docker-demo http://techblog.yahoo.co.jp/event/jenkins-with-docker/

Citation preview

Page 1: Jenkins with Docker

Jenkins with Docker

13/12/20 第8回 Jenkins 勉強会 Kazuki Suda

Page 2: Jenkins with Docker

Kazuki Suda

! @superbrothers

" github.com/superbrothers

Page 3: Jenkins with Docker

Docker とは

LXC ベースの軽量仮想化

コピーオンライトのファイルシステム

aufs, devicemapper, btrfs...

仮想マシンと比べ軽量で通常のプロセスのように高速にコンテナを起動できる

Page 4: Jenkins with Docker

ジョブごとにクリーンな 実行環境を一瞬で作ることが できる!

Page 5: Jenkins with Docker

LXC

Jenkins おじさん スレーブノード

Jenkins マスタから Docker がインストールされたスレーブに対してジョブを実行し、ジョブスクリプトでコンテナの作成、削除を行う。

Page 6: Jenkins with Docker

# Dockerfile for nodejs !FROM ubuntu:12.04 !RUN apt-get -q update; apt-get -y upgrade RUN apt-get -y install build-essential sudo git-core !# NVM インストール RUN git clone --depth 1 https://github.com/creationix/nvm.git ~/.nvm !# nodejs インストール RUN bash -c ". /.nvm/nvm.sh; nvm install 0.10" !# スクリプト実行ユーザの作成 RUN useradd -u 45678 -s /bin/bash -m worker !# ワークスペースのマウント先を作成 RUN mkdir /workspace !ENTRYPOINT ["/bin/bash", "-c"]

Page 7: Jenkins with Docker

# ジョブスクリプト !docker run \ -v ${WORKSPACE}:/workspace \ # Workspace をマウント -w /workspace \ # Working Directory を指定 -u worker \ # 実行ユーザを指定 -e HOME=/home/worker \ # 環境変数を指定 jenkins-with-docker/nodejs "$(cat <<EOL # イメージを指定 source /.nvm/nvm.sh # 実行スクリプトを指定 nvm use 0.10 npm install npm test EOL )"

# Docker イメージのビルド !docker build -t jenkins-with-docker/nodejs .

Page 8: Jenkins with Docker

省略...

Page 9: Jenkins with Docker

複数のコンテナをバッググラウンドで同時に作成し、travis-ci のように複数のバージョンでテストを同時に実行する

もっと Docker を活用してみる

Page 10: Jenkins with Docker

# Dockerfile for nodejs !# nodejs インストール RUN bash -c ". /.nvm/nvm.sh; nvm install 0.8” RUN bash -c ". /.nvm/nvm.sh; nvm install 0.10” RUN bash -c ". /.nvm/nvm.sh; nvm install 0.11"

Dockerfile を修正して3つのバージョンをインストールしておく

Page 11: Jenkins with Docker

VERSIONS=(0.8 0.10 0.11) !for ((i = 0; i < "${#VERSIONS[@]}"; i++)); do VERSION="${VERSIONS[$i]}" ! # ワークスペースをビルド番号、言語バージョン単位で複製する _WORKSPACE="${WORKSPACE}.${BUILD_NUMBER}.${VERSION}" cp -R "${WORKSPACE}" "${_WORKSPACE}" ! CONTAINER_ID=$(docker run \ -d \ # コンテナをバッググラウンドで実行 -v "${_WORKSPACE}":/workspace \ # Workspace をマウント -w /workspace \ # Working Directory を指定 -u worker \ # 実行ユーザを指定 -e HOME=/home/worker \ # 環境変数を指定 jenkins-with-docker/nodejs "$(cat <<EOL source /.nvm/nvm.sh nvm use ${VERSION} # バージョンを指定する npm install npm test EOL )") # コンテナ ID をスペース区切りでまとめる CONTAINER_IDS="${CONTAINER_IDS} ${CONTAINER_ID}" done !# docker wait は複数のコンテナ ID を受け取り、全てのコンテナが終了ステータスを返すまで待つ # コンテナ ID の引数順に終了ステータスを出力する EXIT_STATUSES="$(docker wait ${CONTAINER_IDS})"

細かいのであとで ゆったり眺めてください!

Page 12: Jenkins with Docker
Page 13: Jenkins with Docker

Docker を使うことでクリーンな環境が一瞬で手に入る

Jenkins と Docker を組み合わせると工夫次第でもっと面白いことができるかも?

まとめ

Page 14: Jenkins with Docker