リポジトリは以下です。
Dockerfile 見ていきます。
してる事順に列挙してみます。最初は簡単なはずなので。
- 最初に jenkins グループの jenkins ユーザ作成
- yum で svn, mercurial, git 導入
- yum clean all && rm -rf /var/cache/yum/* 実行してゴミ掃除
- git-lfs 導入 (別途くわしく
- swarm-slave 導入 (別途くわしく
- docker entrypoint な環境変数の用意
- 起動 (別途詳しく
最後のあたり、いくつか確認してみます。
VOLUME ["/opt/jenkins"]
これ、データボリュームというヤツなのですね。
あるいはこれ
USER $CONTAINER_UID
この記述以降の命令はここで指定されているユーザの権限で動作する模様。
WORKDIR ${SWARM_WORKDIR}
はカレントワーキングディレクトリの設定で、RUN cd
ではなくこれ使え、との事。ということは最後のあたりの以下の一団の命令は
USER $CONTAINER_UID
WORKDIR ${SWARM_WORKDIR}
VOLUME ["/opt/jenkins"]
COPY imagescripts/docker-entrypoint.sh /home/jenkins/docker-entrypoint.sh
ENTRYPOINT ["/home/jenkins/docker-entrypoint.sh"]
CMD ["swarm"]
- $CONTAINER_UID の権限でカレントディレクトリを ${SWARM_WORKDIR} にして
/opt/jenkins
なデータボリュームを作り/home/jenkins/docker-entrypoint.sh swarm
実行 (余計な引数が無かった場合
という事になるのか。
以降で
以下について確認したメモを控えておく方向です。
- git-lfs
- swarm-slave 導入関連
git-lfs
large file 拡張、なのか。なんで導入してるのか、はまだ謎だな。基本的には導入して (install.sh 実行して)、git lfs init
で初期化を行なっているのみ、に見えます。
これはおそらく CI なプロジェクトで git lfs に依存していた場合の保険なのかな。
swarm-slave 導入関連
基本的には swarm-client-jar-with-dependencies.jar を取得して VOLUME でアレしたディレクトリに投入しているのみ、なのかな。
結局、最後に呼ばれるスクリプトが肝なのかどうか。
docker-entrypoint.sh
見てみます。してることを順に列挙。
- SWARM_DELAYED_START 定義されてれば値で
sleep
- SWARM_ENV_FILE 定義されてれば
source
で読み込み - SWARM_VM_PARAMETERS 定義されてれば変数に値設定
- SWARM_MASTER_URL 定義されてれば変数に設定
- SWARM_CLIENT_PARAMETERS 定義されてれば変数に設定
- SWARM_JENKINS_USER, SWARM_JENKINS_PASSWORD 定義されてれば変数に設定
- SWARM_CLIENT_EXECUTORS 定義されてれば変数に設定
- SWARM_CLIENT_LABELS 定義されてれば変数に設定
引数 swarm なら swarm-client-jar-with-dependencies.jar 実行なのか。あと、それぞれの環境変数 (上のやつ) がどういった形でオプション文字列に変換されるか、というと
- SWARM_JENKINS_USER と SWARM_JENKINS_PASSWORD はセットで “–username VAL –password VAL” なオプション文字列に変換されます
- SWARM_CLIENT_LABELS は “–labels VAL” なオプション文字列に変換されます
- SWARM_CLIENT_EXECUTORS は “–executors N” なオプション文字列に変換されます
- SWARM_MASTER_URL は -master オプションの VAL として使われます
- デフォルトパラメータとして “-fsroot /home/jenkins -disableSslVerification” が使われています
- SWARM_VM_PARAMETERS は何が指定されるべきなのかが不明
- SWARM_CLIENT_PARAMETERS も同様
- -fsroot オプションが二重に渡されているように見えます
結局、swarm-client-jar-with-dependencies.jar が何なのか、が謎なままなんですが。
Swarm Plugin の Usage によれば
There’s no required command option
との事で特に何かを指定しなければ、って訳ではなさげですね。