jenkins with docker
DESCRIPTION
2013/12/20 第8回 Jenkins勉強会 https://github.com/ydnjp/jenkins-with-docker-demo http://techblog.yahoo.co.jp/event/jenkins-with-docker/TRANSCRIPT
![Page 1: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/1.jpg)
Jenkins with Docker
13/12/20 第8回 Jenkins 勉強会 Kazuki Suda
![Page 2: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/2.jpg)
Kazuki Suda
! @superbrothers
" github.com/superbrothers
![Page 3: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/3.jpg)
Docker とは
LXC ベースの軽量仮想化
コピーオンライトのファイルシステム
aufs, devicemapper, btrfs...
仮想マシンと比べ軽量で通常のプロセスのように高速にコンテナを起動できる
![Page 4: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/4.jpg)
ジョブごとにクリーンな 実行環境を一瞬で作ることが できる!
![Page 5: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/5.jpg)
LXC
Jenkins おじさん スレーブノード
Jenkins マスタから Docker がインストールされたスレーブに対してジョブを実行し、ジョブスクリプトでコンテナの作成、削除を行う。
![Page 6: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/6.jpg)
# 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](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/7.jpg)
# ジョブスクリプト !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](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/8.jpg)
省略...
![Page 9: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/9.jpg)
複数のコンテナをバッググラウンドで同時に作成し、travis-ci のように複数のバージョンでテストを同時に実行する
もっと Docker を活用してみる
![Page 10: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/10.jpg)
# 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](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/12.jpg)
![Page 13: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/13.jpg)
Docker を使うことでクリーンな環境が一瞬で手に入る
Jenkins と Docker を組み合わせると工夫次第でもっと面白いことができるかも?
まとめ
![Page 14: Jenkins with Docker](https://reader033.vdocuments.net/reader033/viewer/2022052310/55518eccb4c90580128b5129/html5/thumbnails/14.jpg)