/var/log/messages

debugging with sixth sense

Jenkins-swarm の Dockerfile 掘削

リポジトリは以下です。

Dockerfile 見ていきます。

してる事順に列挙してみます。最初は簡単なはずなので。

  • 最初に jenkins グループの jenkins ユーザ作成
  • yum で svn, mercurial, git 導入
  • yum clean all && rm -rf /var/cache/yum/* 実行してゴミ掃除
  • git-lfs 導入 (別途くわしく
  • swarm-slave 導入 (別途くわしく
  • docker entrypoint な環境変数の用意
  • 起動 (別途詳しく

最後のあたり、いくつか確認してみます。

1
VOLUME ["/opt/jenkins"]

これ、データボリュームというヤツなのですね。

あるいはこれ

1
USER $CONTAINER_UID

この記述以降の命令はここで指定されているユーザの権限で動作する模様。

1
WORKDIR ${SWARM_WORKDIR}

はカレントワーキングディレクトリの設定で、RUN cd ではなくこれ使え、との事。ということは最後のあたりの以下の一団の命令は

1
2
3
4
5
6
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

との事で特に何かを指定しなければ、って訳ではなさげですね。

Comments