Jenkins with Docker

19,486 views

Published on

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

Published in: Technology
0 Comments
46 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
19,486
On SlideShare
0
From Embeds
0
Number of Embeds
13,858
Actions
Shares
0
Downloads
68
Comments
0
Likes
46
Embeds 0
No embeds

No notes for slide

Jenkins with Docker

  1. 1. Jenkins with Docker 13/12/20 第8回 Jenkins 勉強会 Kazuki Suda
  2. 2. Kazuki Suda ! @superbrothers " github.com/superbrothers
  3. 3. Docker とは LXC ベースの軽量仮想化 コピーオンライトのファイルシステム aufs, devicemapper, btrfs... 仮想マシンと比べ軽量で通常のプロセス のように高速にコンテナを起動できる
  4. 4. ジョブごとにクリーンな 実行環境を一瞬で作ることが できる!
  5. 5. Jenkins おじさん スレーブノード   LXC   Jenkins マスタから Docker がインストールさ れたスレーブに対してジョブを実行し、ジョブ スクリプトでコンテナの作成、削除を行う。
  6. 6. # 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"]
  7. 7. # Docker イメージのビルド ! docker build -t jenkins-with-docker/nodejs . # ジョブスクリプト ! 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 )"
  8. 8. 省略...
  9. 9. もっと Docker を活用してみる 複数のコンテナをバッググラウンドで 同時に作成し、travis-ci のように複 数のバージョンでテストを同時に実行 する
  10. 10. # Dockerfile for nodejs ! # nodejs RUN bash RUN bash RUN bash インストール -c ". /.nvm/nvm.sh; nvm install 0.8” -c ". /.nvm/nvm.sh; nvm install 0.10” -c ". /.nvm/nvm.sh; nvm install 0.11" Dockerfile を修正して3つのバージョ ンをインストールしておく
  11. 11. 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})"
  12. 12. まとめ Docker を使うことでクリーンな環境 が一瞬で手に入る Jenkins と Docker を組み合わせると 工夫次第でもっと面白いことができる かも?
  13. 13.

×