Help us understand the problem. What is going on with this article?

Kanon(Trac+Maven+Jenkins)をできるだけ昔の形でコンテナ化した

More than 1 year has passed since last update.

はじめに

Kanonが出てからかなりの時間がすぎ、インストール対象のソフトはバージョンが上がり、Kanonを新しい環境にインストールするとすんなりいかないことが多くなりました。最新の環境(Docker+Trac1.2.3)対応は今作業中です。これまではMavenとJenkinsは除いてコンテナ化をしましたが、今回はMavenとJenkinsを含めてできるだけ昔のままのKanonをコンテナにし、今後数年間利用できる(といいな)ようにしました。

記事の内容を分割しました。
- Kanon(Trac0.12)コンテナの使い方
- proxyの中と外の環境でビルドと実行を行うためのスクリプト

インストールするバージョン

できるだけ最新を追わないでビルドに問題がおきないようにバージョンを次のように選びました。

バージョン 備考
コンテナ 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のKanonBitbucketのCentOSから取得できます。

イメージ

コンテナは一つですが、メンテナンスを考えてDockerfileを次の二つに分けました。

ベースイメージ

CentOS, Virtualenv, Maven, JenkinsのコンテナでDockerHubのokazakiyuji/centos:c6-m30-j1xで取得できます。ソースはBitbucketから取得できます。

Dockerfile
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のインストールとデータを永続化するための退避を行っています。

Dockerfile
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"]
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away