docker-composeを使って開発環境でJenkinsを動かせるようにした時のトラシュー
↓を参考にハンズオンしてみた時につまずいたポイントをまとめました。
docker-composeを使って開発環境でjenkinsを動かせるようにする
/var/jenkins_homeのパーミッションエラー
docker-compose.yml
version: "3"
services:
master:
container_name: master
image: jenkins:latest
ports:
- 18080:8080
volumes:
- ./jenkins_home:/var/jenkins_home
version: "3"
services:
master:
container_name: master
image: jenkins:latest
ports:
- 18080:8080
volumes:
- ./jenkins_home:/var/jenkins_home
docker-compose.ymlを上のように書きdocker-compose up
したところ、
master | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
master | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
というエラーメッセージが。↓の記事を参考にボリュームを/var/lib/jenkins_home
にしたところパーミッションエラーは起きなくなりました。
docker-compose permission denied: へっぽこSEのメモメモ
Jenkinsのプラグインインストールが失敗する
無事docker-compose up
が成功してJenkinsが立ち上がったのでブラウザからアクセスしてセットアップを完了しようと思ったのですが、
この有様。
調べたところ、Matserに使用したイメージが良くなかった模様。
Jenkinsのイメージには、2つ、有名なのがあり、混同しがちです。jenkinsとjenkins/jenkinsは異なるイメージです。
前者はdocker公式イメージで、後者はjenkinsチームがメンテしています。
公式の方がよいと思うかもしれませんが、開発には、後者が扱いやすいと思います。
proxy背後でJenkinsのプラグインをインストールする時のエラーの対処(docker&windows)
image: jenkins/jenkins:latest
と書き換えて再度プラグインをインストールすると上手くいきました。
Matserがslave01を認識できない
Masterの準備は完了したので、いよいよslaveを立てて疎通させようと思ったのですが、[新規ノード作成]をしても↓のslave02のような状態に...(画像は成功したあとのものです)
ログを見るとSSHログイン自体はできているようなのですが、
[SSH] Checking java version of /usr/local/java/bin/java
Couldn't figure out the Java version of /usr/local/java/bin/java
bash: /usr/local/java/bin/java: No such file or directory
というように、Javaのバージョンが取得できないエラーが発生しているようです。
試しにslave01コンテナに入って確認してみると、
$ sudo docker exec -it slave01 which java
/usr/local/openjdk-8/bin/java
$ sudo docker exec -it slave01 java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
あれ、取得できる・・・?
しばらく悩んだ後、[新規ノード作成]の[認証情報]で入力したユーザ名がjenkins
だったことを思い出し、今度はjenkins
ユーザでslave01に入ると、
$ sudo docker exec -it slave01 su - jenkins
jenkins@9a5854980721:~$ java -version
-su: java: command not found
jenkins@9a5854980721:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Javaコマンドが入っている/usr/local/openjdk-8/bin
がjenkins
ユーザの環境変数PATH
に入っていないことが判明しました。
調べたところ、jenkins
ユーザのPATH
を変えるよりもパスが通っているディレクトリに/usr/local/openjdk-8/bin/java
のシンボリックリンクを置く方がいいらしいことがわかった1ので、docker-compose.yml
と同じディレクトリに↓のDockerfile
を置き、docker-compose.yml
も書き換えました。(Dockerfile書かずにできるやり方があったら教えてほしいです)
FROM jenkinsci/ssh-slave
RUN ln -s /usr/local/openjdk-8/bin/java /usr/local/bin/java
version: "3"
services:
master:
container_name: master
image: jenkins/jenkins:latest
ports:
- 18080:8080
volumes:
- ./jenkins_home:/var/lib/jenkins_home
links:
- slave01
slave01:
container_name: slave01
build: .
environment:
- JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAA...
これでdocker-compose up -d
を実行すると、
$ docker-compose up -d
Recreating slave01 ... done
Recreating master ... done
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
master /sbin/tini -- /usr/local/b ... Up 50000/tcp, 0.0.0.0:18080->8080/tcp
slave01 setup-sshd Up 22/tcp
ちゃんと立ち上がっていますね。その後上手く疎通させられたことは、上に貼ったスクショのとおりです。
感想
なんやかんやありましたが、やっぱりDocker Composeは便利だなぁと思いました。
Author And Source
この問題について(docker-composeを使って開発環境でJenkinsを動かせるようにした時のトラシュー), 我々は、より多くの情報をここで見つけました https://qiita.com/yagaodekawasu/items/c2c4b29febd21a489f17著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .