Docker: CIサーバのJenkinsをインストールする

DockerでJenkinsを動かす手順を記載します。

1 JenkinsをHTTPで動かす

JenkinsをHTTPで動かす手順を記載します。

  • Jenkinsのコンテナは8080/tcpをHTTPのポートとして開放します。Jenkinsのコンテナの8080/tcpをホストマシンの80/tcpにマッピングします。
  • データの永続化の為、Jenkinsがデータを格納するJENKINS_HOME(デフォルトでは/var/jenkins_home)をjenkins_homeというボリュームにマッピングします。

以下のコマンドでJenkinsのコンテナを動かします。

$ docker run -d --name jenkins \
         -p 80:8080 \
         -v jenkins_home:/var/jenkins_home \
         jenkins/jenkins:lts

Jenkinsの初期パスワードは${JENKINS_HOME}/secrets/initialAdminPasswordに格納されます。Jenkinsのコンテナが立ち上がるのに若干の時間が必要です。

$ while : ; do
    docker cp jenkins:/var/jenkins_home/secrets/initialAdminPassword . \
           > /dev/null 2>&1 && break
    sleep 10;
  done
$ cat initialAdminPassword
$ rm -f initialAdminPassword

ホストマシンのIPアドレスかホスト名で以下のURLにアクセスします。

http://<ipaddr>

2 JenkinsをHTTPSで動かす

JenkinsをHTTPSで動かす手順を記載します。

  • Jenkinsのコンテナが使用するHTTPSのポートを8443/tcpにします。443等の低いポートはbindに失敗します。Jenkinsのコンテナの8443/tcpをホストマシンの443/tcpにマッピングします。
  • HTTPSで使用するSSL証明書をdebianのコンテナで作成し、jenkins_homeのボリュームに格納します。

利用する変数を定義します。

$ JENKINS_HOME="/var/jenkins_home"
$ JENKINS_OPTS="--httpPort=-1"
$ JENKINS_OPTS="${JENKINS_OPTS} --httpsPort=8443"
$ JENKINS_OPTS="${JENKINS_OPTS} --httpsPrivateKey=${JENKINS_HOME}/jenkins.key"
$ JENKINS_OPTS="${JENKINS_OPTS} --httpsCertificate=${JENKINS_HOME}/jenkins.pem"

debianのコンテナのopensslでSSL証明書を作成してjenkins_homeのボリュームに格納します。

$ docker run --rm \
         -v jenkins_home:${JENKINS_HOME} \
         debian:jessie \
         /bin/sh -c "
set -e
apt update -y
apt install -y openssl
cd ${JENKINS_HOME}
openssl genrsa -out jenkins.key
cat <<EOF | openssl req -new -key jenkins.key -out jenkins.crt
AU
Some-State
city
company
section




EOF
openssl x509 -req -days 9999 -in jenkins.crt -signkey jenkins.key \
        -out jenkins.pem
"

以下のコマンドでJenkinsのコンテナを動かします。

$ docker run -d --name jenkins \
         -p 443:8443 \
         -e JENKINS_HOME=${JENKINS_HOME} \
         -e JENKINS_OPTS="${JENKINS_OPTS}" \
         -v jenkins_home:${JENKINS_HOME} \
         jenkins/jenkins:lts

Jenkinsの初期パスワードは${JENKINS_HOME}/secrets/initialAdminPasswordに格納されます。Jenkinsのコンテナが立ち上がるのに若干の時間が必要です。

$ while : ; do
    docker cp jenkins:/var/jenkins_home/secrets/initialAdminPassword . \
           > /dev/null 2>&1 && break
    sleep 10;
  done
$ cat initialAdminPassword
$ rm -f initialAdminPassword

ホストマシンのIPアドレスかホスト名で以下のURLにアクセスします。

https://<ipaddr>

0001_Jenkins.png