はじめに
会社で、jenkinsを使った自動テスト環境を作ることになり、環境構築をしたもののDocker環境で動かすのに相当苦労したため、備忘も兼ねて記載
まぁ、Docker環境っていうより、docker-composeの方で躓いた感じですが・・・
一応、成功だけじゃなくて、過程も含めて、記載
導入するjenkinsについて
Jenkins(ジェンキンス)とは、継続的インテグレーション(CI)や継続的デリバリー(CD)を実現のためのツール
あとは、下記を見てもらえれば、jenkinsとはなんぞやがわかってくれると思ってます・・・
引用文献
Jenkinsとは?» CloudBees|テクマトリックス
参考文献
Jenkins
Jenkins - Wikipedia - ウィキペディア
作業環境
ubuntu20.04
Docker 20.10.2
docker-compose 1.26.2
作業
前提
Dockerとdocker-compsoeはインストールされていること
手順
環境構築で、変更作業としては、こんな感じかな~
- 作業(結果:失敗)
- ソース
- 結果
- 調査
- 作業(結果:成功)
- ソース
- 結果
1. 作業(結果:失敗)
docker-compose
いつもどおり、なにも考えず、データは永続化したいので、Volumeでjenkins_homeを永続化
version: "3.7"
services:
jenkins:
container_name: jenkins
image: jenkinsci/blueocean:latest
volumes:
- ./jenkins/jenkins-data:/var/jenkins_home
restart: always
ports:
- "18080:8080"
- "50000:50000"
entrypoint: ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]
実行
docker-compose up -d
動いたかどうか確認
http://xxx.xxx.xxx.xx:18080
にアクセス!!
??あれ?
コンテナどうなってる?
docker logs -f jenkins
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
なんじゃこりゃ?
Dockerって基本rootだからPermissionでエラーすることないんやないの?
どういうこと?
2. 調査
ネットで頑張って調べる・・・
なんか調べてると、UIDとGUIDの1000がホスト側のフォルダに所有権に無いから、つければええよ感じっぽい・・・
UIDとGUIDの1000のホストの権限をつける?
あ~これ、コンテナ側が、rootでの起動をしていないのね・・・
でも、そうなると、shとか書かないと駄目だよな~
DockerfileにUser書いて、一度、rootでビルドした後に、実行時にjenkinsのユーザに変更して対応してたりするな~
面倒やな・・・って、コンテナのUIDとGUIDを直接rootにすればええんやない?
あんまり変更するのは、よろしくなさそうやけど・・・
まぁ、内部でしか使わんし、コンテナの起動ユーザをrootに書き換えちゃおう!!
参考文献
「Jenkins」Dockerイメージを使ってJenkinsの環境を構築する
ジェンキンスコンテナーを開始しますが、ボリュームに対して 'chown'を実行しましたが、アクセス許可が拒否されました
2015-02-10 Jenkinsの公式Dockerイメージ使ってみた
Dockerコンテナ上のJenkinsでコンテナをたててテストを実行する
Docker を使って Jenkins サーバーをローカルに構築する (プラグイン導入済み)
3. 作業(結果:成功)
docker-compose
version: "3.7"
services:
jenkins:
container_name: jenkins
user: 0:0
image: jenkinsci/blueocean:latest
volumes:
- ./jenkins/jenkins-data:/var/jenkins_home
restart: always
ports:
- "18080:8080"
- "50000:50000"
entrypoint: ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]
実行
docker-compose up -d
動いたかどうか確認
http://xxx.xxx.xxx.xx:18080
にアクセス!!
成功~!!
動きました~
フォルダの中にもjenkins_homeの中身がホスト側からアクセスできるようにもなりました!
最後に
今回、docker-composeファイルしか作りたくない一心でrootユーザにして起動させています。
まぁ、jenkinsとしては、推奨していないと思われますので、こんなやり方じゃなく他のやり方でやりたいとかであれば、
docker-cmposeを使わずにやる方法か、ビルドだけrootで行い、ビルド中にユーザ権限を付けるようにshを組むかすると良いかと思います。