LoginSignup
13
15

More than 5 years have passed since last update.

Dockerコンテナ上にSelenium用のJenkins環境を構築する

Last updated at Posted at 2016-02-18

この記事は「Dockerコンテナ上に開発環境一式を構築する」の一部です。

現在のステータス

Dockerfile

Java8の公式イメージはjava:8で入るようです。これはbuildpack-deps:jessie-scmをベースにしています。Jenkinsの公式イメージはjenkins:latestですね。これはjava:8-jdkがベースになっています。コンテナごとにいろいろ環境に差異があると余計な手間になりかねないのでubuntu14.04を使います。次のLTSである16.04が出たらアップデートを考えます。

# Jenkins Dockerfile
FROM ubuntu:14.04
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get -y upgrade

ENV HOME /root
RUN locale-gen ja_JP.UTF-8
ENV LANG       ja_JP.UTF-8
ENV LC_ALL     ja_JP.UTF-8

# Install.
RUN apt-get install -y build-essential software-properties-common
RUN apt-get install -y byobu curl git htop man zip unzip wget

# Install java 8
RUN add-apt-repository ppa:webupd8team/java -y && apt-get update
RUN (echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && apt-get install -y oracle-java8-installer oracle-java8-set-default

# X frame buffer & firefox & chrome
RUN apt-get install -y Xvfb firefox fonts-ipafont
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
RUN sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update
RUN apt-get install -y google-chrome-stable

#user
ENV USER jenkins
RUN /usr/sbin/useradd $USER

# time
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

Java8の後にXvfb等を入れてます。chromeはそのままではapt-get installできないのでdepを取って来ます。

build.sh
#/bin/sh

. ../../setenv.sh
CONTAINER=jenkins

cd $DOCKER_HOME/$CONTAINER/docker
docker build --force-rm -t "lavans-$CONTAINER:latest" .

ちなみにこれを作っている最中にglibcのバグの件でパッケージが見つからないエラーがでました。docker build --no-cacheオプションをつけてapt-get updateを再実行させることで解消しました。

$ chmod 755 build.sh
$ ./build.sh

jenkins本体の用意

update.sh
#/bin/sh

mv jenkins.war jenkins.war.1
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

起動終了スクリプト

run.sh
#/bin/sh

. ../setenv.sh
CONTAINER=jenkins

docker run -v $DOCKER_HOME/$CONTAINER:/home/$CONTAINER -u $CONTAINER -d \
  -v /dev/shm:/dev/shm -e HOME="/home/$CONTAINER" --privileged \
  --name $CONTAINER -p 8081:8080 --dns=$DNS \
  lavans-$CONTAINER java -Xmx512m -Djava.awt.headless=true -Duser.timezone=Asia/Tokyo -jar $CONTAINER.war

-v /dev/shm:/dev/shmは仮想メモリをコンテナにマウントさせます。2016/02時点でdockerでは64MBにハードコーディングされているようで、デフォルトでchromeを動かすとすぐに落ちてしまいます。--privilegedはコンテナを特権モードにするオプションで、これがないとchrome起動時に--no-sandboxオプションが必要になります。-Duser.timezoneを指定しておかないとjenkinsのコンソールがUTCになってしまいます。

起動するプロセスはDockerfileのCMDに書いておいてrun.shで上書きできるのがいいかなと思っていたのですが、オプションをいろいろトライする時にいちいちビルドしなおすのは面倒なのでrun.shに書いておくのがいいかもしれません。

kill.sh
#!/bin/sh

CONTAINER=jenkins
docker kill $CONTAINER; docker rm $CONTAINER

参考

13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15