More Related Content
Similar to Jenkins with Docker (20)
More from Yahoo!デベロッパーネットワーク (20)
Jenkins with Docker
- 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. # 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
)"
- 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. 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})"