Jenkins with Docker

264 Views

December 20, 13

スライド概要

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

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

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

2.

Kazuki Suda ! @superbrothers " github.com/superbrothers

3.

Docker とは LXC ベースの軽量仮想化 コピーオンライトのファイルシステム aufs, devicemapper, btrfs... 仮想マシンと比べ軽量で通常のプロセス のように高速にコンテナを起動できる

4.

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

5.

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

6.
[beta]
# 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.
[beta]
# 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.

省略...

9.

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

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.
[beta]
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})"

13.

まとめ Docker を使うことでクリーンな環境 が一瞬で手に入る Jenkins と Docker を組み合わせると 工夫次第でもっと面白いことができる かも?

14.