見出し画像

[Jenkins/Docker] buildDiscarderの設定をしても成果物が削除されない

手元にサクッと環境作ってテストするか~とか思ってたら結構ハマッたので備忘録。見出し画像は2-3年くらい前に行った社員旅行中に、ブルースクリーンを見つけてうれしくなって撮影したものです。

検証に利用したコード

検証環境構築

Jenkins

上記ドキュメントの通りに構築

Jenkins Plugin

画像2

DockerとDocker Pipelineを追加

JenkinsのセカンダリグループにDockerを追加

$ sudo usermod -a -G docker jenkins

再起動

$ sudo systemctl restart jenkins

環境構築完了。

事象

buildDiscardarの設定は以下の通り

画像1

結果

ビルドの履歴は削除されるが、成果物は削除されず残り続ける。

ビルド履歴は最新の物のみ

画像3

成果物は古いビルドの物が残ってしまっている

画像4

考えられる原因

Jenkinsの実行ユーザが成果物'output.txt'に対してWrite権限を持っていないためファイルの削除に失敗している。

画像5

考えられる対策

※非推奨 Jenkinsの実行ユーザをrootユーザに変更する
> JenkinsからOS上のすべてにアクセスできるようになるため、セキュリティリスクが高くなる


※非推奨 Jenkinsの実行ユーザにsudoのアクセス権限を与える
> 上記と同様の理由でセキュリティリスクが高い

良さそう ホストのJenkinsユーザと同一のUID/GIDを持つユーザを作成し、そのユーザの権限でDockerコンテナを実行する。
> 【TAS】多分これがベストプラクティスだと思います。

禁じ手 Dockerを使わない

実際の対策

セキュリティリスクを考慮して③の方法を採用するのが良いと思われる。
Dockerを利用しない場合は依存関係の問題や環境汚染の問題が別で発生するため、④は考慮しない。

で、ここまで整理してやっとわかったんですけど、Jenkinsfileのdockerfileの部分で引数に-u root渡してるのが悪いじゃん。ここ消したら直ったわ。は~~~~~~~~~。Jenkinsの環境構築が一番時間かかったわ。

画像6

雰囲気で使ってるJenkinsとDocker(とDeclarative Pipeline)について少しだけ勉強になりました。

---

今日の一曲

やばかろ?

この記事が気に入ったらサポートをしてみませんか?