2017-11-02 8 views
3

私は、共有Jenkinsクラスタで何百ものジョブを実行する大規模な組織で働いています。Jenkinsジョブの終了後に孤立したドッカーコンテナをクリーニングする

私のJenkinsの仕事は、Dockerコンテナ内で実行されている信頼できないコードに対して統合テストを実行する必要があります。私はジェンキンスの仕事が突然終了すると(ジョブが中止されたりタイムアウトするなど)孤児のコンテナが残ってしまうことに恐れています。

https://github.com/moby/moby/issues/1905ulimitsは私にとってはうまくいきませんでした(これはit only works for containers that run bashなので、私がそうすることは保証できません)。

https://stackoverflow.com/a/26351355/14731を試しましたが、--lxc-confは、Docker for Windows(これはdockerでサポートされているすべてのプラットフォームで実行する必要があります)では認識されないオプションです。

アイデア?

答えて

1

物の外見では、人々はドッカーの外でこれを処理しています。

彼らは、アボートまたは失敗したビルドで孤立したドッカーコンテナをクリーンアップするJenkinsポストビルドステップを追加しています。

例としてMartin Kennethのbuild scriptを参照してください。

0

さてあなたはOLD_ $ジョブ名に既存のcontailerの名前を変更し、それを

  • docker container prune -f
  • を殺し、その後、例えば、あなたの仕事の最初と最後のステップで最初のきれいな古いdeadsをクリーンアップコマンドを持つことができますあなたの新しいコンテナ

打ち上げ何が必要

  • docker rename $jobname old$jobname
  • docker kill old$jobnameを行う - docker run --name $jobname$

  • +0

    私のJenkinsジョブが強制終了され、再び実行されない場合はどうなりますか?ポイントは、私は自分自身でコンテナをシャットダウンするのに十分な長さになることを保証することはできません。その場合は – Gili

    +0

    を実行し、-d(デタッチしたものやデーモンと思われる)の代わりに-i(対話式)を使ってコンテナを実行し、次のようなコマンドでテストを起動してください: 'docker run -i --name go_web_tests $ {JOB_NAME} shテスト.sh' プロセスが完了するとコンテナが死んでしまい、死んだコンテナが心配な人は、次のビルドをクリーンアップすることができます – martinkenneth

    +0

    残念ながら、私の場合はうまくいかないと思います。私のユニットテストは複数のコンテナ(例えばmysqlとwordpress)に依存しているので、対話モードでそれらのうちの1つだけを起動することができます。 – Gili

    関連する問題