はじめに
Kanonが出てからかなりの時間がすぎ、インストール対象のソフトはバージョンが上がり、Kanonを新しい環境にインストールするとすんなりいかないことが多くなりました。最新の環境(Docker+Trac1.2.3)対応は今作業中です。これまではMavenとJenkinsは除いてコンテナ化をしましたが、今回はMavenとJenkinsを含めてできるだけ昔のままのKanonをコンテナにし、今後数年間利用できる(といいな)ようにしました。
記事の内容を分割しました。
インストールするバージョン
できるだけ最新を追わないでビルドに問題がおきないようにバージョンを次のように選びました。
名 | バージョン | 備考 |
---|---|---|
コンテナ | CentOS6 | |
Trac | 0.12.7 | |
JDK | OpenJDK1.7.0 | |
Virtualenv | 1.11.3 | pipでバージョン指定 |
Maven | 3.0.5 | kanon-setupは3.1.1 CentOS7のyumと同じ |
Jenkins | 1.659 | リポジトリからビルド |
リポジトリ
コンテナイメージはDockerHubにあります。Jenkinsをソースからビルドしているので、問題なければイメージ(okazakiyuji/kanon:latest)を使用してください。
詳細を知りたい場合、ソースはBitbucketのKanonとBitbucketのCentOSから取得できます。
イメージ
コンテナは一つですが、メンテナンスを考えてDockerfileを次の二つに分けました。
ベースイメージ
CentOS, Virtualenv, Maven, JenkinsのコンテナでDockerHubのokazakiyuji/centos:c6-m30-j1xで取得できます。ソースはBitbucketから取得できます。
FROM centos:6
MAINTAINER okazakiyuji
# ロケールの設定(glibc-commonのreinstallは上で)
RUN yum install -y epel-release && yum -y reinstall glibc-common
ENV LANG="ja_JP.UTF-8" LANGUAGE="ja_JP:ja"
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# パッケージのインストール kanon-setupのものも先にインストールする
# jenkinsのビルドはjdk1.6はだめで1.7ならOk
ADD pkglist.rhel6 /tmp/
RUN yum -y update && \
yum -y install mercurial `cat /tmp/pkglist.rhel6` subversion-python && \
yum -y install java-1.7.0-openjdk-devel unzip wget && \
yum install -y epel-release && \
yum install -y python-pip --enablerepo=epel && \
pip install virtualenv==1.11.3 && \
rm -rf /var/cache/yum/* /tmp/pkglist.rhel6 && yum clean all
WORKDIR /tmp
# Mavenのインストール
# 少し古くなるが、なぜか3.0.5ならダウンロードできた
ARG maven_ver="3.0.5"
COPY apache-maven-$maven_ver-bin.tar.gz /tmp
RUN tar xzf apache-maven-$maven_ver-bin.tar.gz && \
mkdir -p /opt/maven && \
cp -r /tmp/apache-maven-$maven_ver/* /opt/maven/ && \
rm -r /tmp/apache-maven-$maven_ver
# Jenkinsのインストール
# できるだけ昔の物を入れるためリポジトリからビルド
ADD jenkins-1.x.zip /tmp/
# RUN git clone https://github.com/jenkinsci/jenkins.git /tmp/jenkins-1.x && \
# cd /tmp/jenkins-1.x && git checkout 1.x && \
RUN unzip jenkins-1.x.zip && cd jenkins-1.x && \
/opt/maven/bin/mvn clean install -pl war -am -DskipTests && \
cd .. && rm -r /tmp/jenkins-1.x && \
/usr/sbin/groupadd -g 981 jenkins && \
/usr/sbin/useradd -u 987 -d /var/lib/jenkins \
-s /bin/false -g jenkins jenkins && \
mkdir -p /usr/lib/jenkins /var/log/jenkins \
/var/cache/jenkins/war/META-INF && \
chown jenkins.jenkins -R /var/cache/jenkins /var/log/jenkins && \
cp /root/.m2/repository/org/jenkins-ci/main/jenkins-war/1.659-SNAPSHOT/jenkins-war-1.659-SNAPSHOT.war /usr/lib/jenkins/jenkins.war && \
rm -r /root/.m2
COPY jenkins/etc /etc
CMD ["tail", "-f", "/dev/null"]
Kanonイメージ
このベースを使って、もう一つのイメージはKanonのインストールとデータを永続化するための退避を行っています。
FROM okazakiyuji/centos:c6-m30-j1x
MAINTAINER okazakiyuji
WORKDIR /tmp
# Proxy設定が必要な環境でも動くように
COPY proxy-setting.sh /root/
RUN /root/proxy-setting.sh
ENV JENKINS_HOME="/var/lib/jenkins"
# kanonをインストール
COPY kanon /tmp/kanon
RUN hg clone https://bitbucket.org/okamototk/kanonconductor kanonconductor && \
cp -r /tmp/kanon/* kanonconductor/ && \
kanonconductor/kanon-setup && \
cp -fr kanonconductor/resource/jenkins-config/* $JENKINS_HOME && \
chown jenkins.jenkins -R $JENKINS_HOME && \
rm -rf /tmp/kanonconductor /tmp/kanon
# マウント場所のファイルの退避
RUN mkdir -p /tmp/save && cd /tmp/save && \
cp -r /var/opt/kanon ./var && \
cp -r /etc/opt/kanon ./etc && \
cp -r /opt/kanon ./opt && \
cp -r $JENKINS_HOME ./jenkins
# マウントする場所
VOLUME /opt/kanon
VOLUME /etc/opt/kanon
VOLUME /var/opt/kanon
VOLUME /var/lib/jenkins
# ホストに接続するポート
EXPOSE 80
# Kanonでリーバースプロキシの設定があるが…
EXPOSE 8080
# Maven動作確認用のファイルをコピーする
COPY maven-test/* /tmp/
WORKDIR /opt/kanon
# Proxy関連の設定を元に戻す
RUN /root/proxy-setting.sh revert
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["tail", "-f", "/dev/null"]