![見出し画像](https://assets.st-note.com/production/uploads/images/65673083/rectangle_large_type_2_ad8ffed43043a5f4e64dfb0bb115ab3f.jpg?width=800)
[Jenkins/Docker] buildDiscarderの設定をしても成果物が削除されない
手元にサクッと環境作ってテストするか~とか思ってたら結構ハマッたので備忘録。見出し画像は2-3年くらい前に行った社員旅行中に、ブルースクリーンを見つけてうれしくなって撮影したものです。
検証に利用したコード
検証環境構築
Jenkins
上記ドキュメントの通りに構築
Jenkins Plugin
DockerとDocker Pipelineを追加
JenkinsのセカンダリグループにDockerを追加
$ sudo usermod -a -G docker jenkins
再起動
$ sudo systemctl restart jenkins
環境構築完了。
事象
buildDiscardarの設定は以下の通り
結果
ビルドの履歴は削除されるが、成果物は削除されず残り続ける。
ビルド履歴は最新の物のみ
成果物は古いビルドの物が残ってしまっている
考えられる原因
Jenkinsの実行ユーザが成果物'output.txt'に対してWrite権限を持っていないためファイルの削除に失敗している。
考えられる対策
①※非推奨 Jenkinsの実行ユーザをrootユーザに変更する
> JenkinsからOS上のすべてにアクセスできるようになるため、セキュリティリスクが高くなる
②※非推奨 Jenkinsの実行ユーザにsudoのアクセス権限を与える
> 上記と同様の理由でセキュリティリスクが高い
③良さそう ホストのJenkinsユーザと同一のUID/GIDを持つユーザを作成し、そのユーザの権限でDockerコンテナを実行する。
> 【TAS】多分これがベストプラクティスだと思います。
④禁じ手 Dockerを使わない
実際の対策
セキュリティリスクを考慮して③の方法を採用するのが良いと思われる。
Dockerを利用しない場合は依存関係の問題や環境汚染の問題が別で発生するため、④は考慮しない。
で、ここまで整理してやっとわかったんですけど、Jenkinsfileのdockerfileの部分で引数に-u root渡してるのが悪いじゃん。ここ消したら直ったわ。は~~~~~~~~~。Jenkinsの環境構築が一番時間かかったわ。
雰囲気で使ってるJenkinsとDocker(とDeclarative Pipeline)について少しだけ勉強になりました。
---
雑
今日の一曲
やばかろ?
この記事が気に入ったらサポートをしてみませんか?