221

私たちの Jenkins サーバーには、3 日間実行されているジョブがありますが、何もしていません。隅にある小さな X をクリックしても何も起こらず、コンソール出力ログにも何も表示されません。ビルド サーバーを確認しましたが、実際にはジョブがまったく実行されていないようです。

ファイルやロックなどを編集して、ジョブが「完了」したことをジェンキンスに伝える方法はありますか? 多くのジョブがあるため、サーバーを再起動する必要はありません。

4

27 に答える 27

270

"Manage Jenkins" > "Script Console" に移動して、サーバー上でスクリプトを実行し、ハングしているスレッドを中断します。

すべてのライブ スレッドを取得し、Thread.getAllStackTraces()ハングしているスレッドを中断できます。

Thread.getAllStackTraces().keySet().each() {
  t -> if (t.getName()=="YOUR THREAD NAME" ) {   t.interrupt();  }
}

アップデート:

スレッドを使用した上記のソリューションは、最近の Jenkins バージョンでは機能しない可能性があります。フリーズしたパイプラインを中断するには、代わりにこのソリューション ( by alexandru-bantiuc ) を参照して実行します。

Jenkins.instance.getItemByFullName("JobName")
                .getBuildByNumber(JobNumber)
                .finish(
                        hudson.model.Result.ABORTED,
                        new java.io.IOException("Aborting build")
                );
于 2014-10-10T18:48:05.170 に答える
30

最初に提案された解決策はかなり近いものです。interrupt() の代わりに stop() を使用すると、groovy システム スクリプトで際限なく実行されるランナウェイ スレッドを強制終了します。これにより、ジョブで実行されるすべてのビルドが強制終了されます。コードは次のとおりです。

Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {  
      println "Stopping $it.name"
      it.stop()
    }
}
于 2017-02-22T16:39:51.297 に答える
26

このタスクにはモニタリング プラグインを使用します。プラグインのインストール後

  1. Jenkins の管理 > Hudson/Jenkins マスターの監視に移動します。
  2. スレッドの詳細、右側の小さな青いリンクを展開します
  3. ハングしているジョブ名を検索します

    スレッドの名前は次のように始まります

    Executor #2 for master : executing <your-job-name> #<build-number>

  4. 希望するジョブの行の表の一番右にある赤い丸いボタンをクリックします。

于 2015-03-19T14:03:32.833 に答える
15

停止できないパイプライン ジョブがある場合は、次のことを試してください。

  1. ビルド進行状況バーの横にある赤い X をクリックして、ジョブを中止します。
  2. ビルドの「一時停止/再開」をクリックして一時停止します
  3. 「一時停止/再開」をクリックして、ビルドを再開します

パイプライン ジョブの一時停止/再開

Jenkins は、ジョブを終了する必要があることを認識し、ビルドを停止します。

于 2016-12-14T08:13:08.373 に答える
8

答えるには遅すぎると思いますが、私の助けは何人かの人々です。

  1. 監視プラグインをインストールします。( http://wiki.jenkins-ci.org/display/JENKINS/Monitoring )
  2. jenkinsUrl/monitoring/nodes に移動します
  3. 下部のスレッドセクションに移動します
  4. マスターの左側にある詳細ボタンをクリックします
  5. ユーザー時間 (ミリ秒) で並べ替え
  6. 次に、スレッドの名前を見てください。ビルドの名前と番号がわかります。
  7. それを殺します

申し訳ありませんが、画像を投稿するのに十分な評判がありません。

それが役立つことを願っています

于 2015-04-17T16:18:02.313 に答える
7

ビルドタイムアウトプラグインは、このような場合に便利です。時間がかかりすぎると、ジョブは自動的に強制終了されます。

于 2013-01-22T15:05:42.053 に答える
5

Jenkins のソースを見てきましたが、スレッド割り込みを介してジョブを停止しているように見えるため、私がやろうとしていることは不可能のようです。なぜ仕事がぶら下がっているのか分かりません..

編集:

止められない仕事の考えられる理由:

  • Jenkins が無限ループに陥った場合、中止することはできません。
  • Jenkins が Java VM 内でネットワークまたはファイル I/O を実行している場合 (長いファイルのコピーや SVN の更新など)、中止することはできません。
于 2013-01-22T11:38:44.993 に答える
3

私は通常、そのような場合に jenkins-cli を使用します。jar は ページ からダウンロードできますhttp://your-jenkins-host:PORT/cli。次に実行します

java -jar jenkins-cli.jar delete-builds name_of_job_to_delete hanging_job_number

補助情報:

のようなさまざまなビルドを渡すこともできます350:400。実行すると利用できる一般的なヘルプ

java -jar jenkins-cli.jar help

delete-buildsbyのコンテキスト コマンド ヘルプ

java -jar jenkins-cli.jar delete-builds
于 2014-12-11T14:07:10.320 に答える
0

これらの解決策はどれもうまくいきませんでした。サーバーがインストールされているマシンを再起動する必要がありました。殺せない仕事はなくなりました。

于 2019-12-03T16:41:42.780 に答える