51

rmジョブがホストされている場所で古いjenkinsビルドを削除します。

my_job/builds/$ rm -rf [1-9]*

これらの古いビルドは、引き続きジョブページに表示されます。コマンドラインでそれらを削除するにはどうすればよいですか?
(各ビルドユーザーインターフェイスに削除ボタンなし)

4

10 に答える 10

55

別のオプションは次のとおりです。cURLを使用してビルドをリモートで削除します。(URLの先頭を、ブラウザーでJenkinsにアクセスするために使用するものに置き換えてください。)

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

上記は、ジョブmyJobのビルド#1から#56を削除します。

Jenkinsインスタンスで認証が有効になっている場合は、次のようにユーザー名とAPIトークンを指定する必要があります。

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

APIトークンは、Jenkinsの/ me/configureページからフェッチする必要があります。[APIトークンを表示...]ボタンをクリックするだけで、ユーザー名とAPIトークンの両方が表示されます。

編集:以下のコメントでyegeniyが指摘しているように、構成によっては、これを機能させるために上記のURLで置換doDeleteAllする必要がある場合があります。doDelete

于 2014-03-10T14:41:49.897 に答える
43

これはCLIに追加されたか、少なくとも作業中のようです:http: //jenkins.361315.n4.nabble.com/How-to-purge-old-builds-td385290.html

構文は次のようになります。java -jar jenkins-cli.jar -s http://my.jenkins.host delete-builds myproject '1-7499' --username $user --password $password

于 2012-10-24T15:57:50.927 に答える
24
  1. ホームjenkinsディレクトリを確認してください:
    • "Jenkinsの管理"==>"システムの構成" ここに画像の説明を入力してください
    • フィールド「ホームディレクトリ」を確認します(通常は / var / lib / jenkinsです) 。

すべてのjenkinsジョブビルドを削除するコマンド

/jenkins_home/jobs> rm -rf */builds/*
  1. 削除後、構成を再ロードする必要があります。

    • "Manage Jenkins"==>"ディスクから構成をリロード"

ここに画像の説明を入力してください

于 2013-06-05T03:48:01.907 に答える
13

HudsonAPIを使用してGroovyスクリプトで実行できます。jenkinsインストールにアクセスします。

http://localhost:38080/script.

たとえば、次のスクリプトを使用してすべてのプロジェクトのすべての古いビルドを削除するには、次のようにします。注:フィンガープリントを使用する場合は、すべての履歴が失われることに注意してください。

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    System.out.println("Deleting all builds of job "+item.name)
    for(build in item.getBuilds()){
      build.delete()
    }  
  }
  else {
    System.out.println("Skipping job "+item.name+", currently building")
  }
}

または、すべてのワークスペースをクリーニングする場合:

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

Jenkinswikiには多くの例があります

于 2014-08-11T18:26:28.910 に答える
9

Jenkinsに古いビルドを削除させるのではなく、手動でこれを行う必要がある理由はありますか?

日数またはビルド数に基づいて、古いビルドを自動的に削除するようにジョブ構成を変更できます。それについて心配したり、追跡したりする必要はもうありません。Jenkinsがあなたに代わってそれを行います。

于 2012-10-25T17:34:37.183 に答える
1

次のスクリプトは、古いビルドのジョブをクリーンアップします。ビルドを手動で削除する場合は、ディスクから構成をリロードする必要があります。

import hudson.model.*

for(item in Hudson.instance.items) {
    if (!item.isBuilding()) {
        println("Deleting old builds of job " + item.name)
        for (build in item.getBuilds()) {
            //delete all except the last
            if (build.getNumber() < item.getLastBuild().getNumber()) {
                println "delete " + build
                try {
                    build.delete()
                } catch (Exception e) {
                    println e
                }
            }
        }
    } else {
        println("Skipping job " + item.name + ", currently building")
    }
}
于 2017-02-05T10:20:29.830 に答える
0

Jenkins Scriptlerコンソールから、次のGroovyスクリプトを実行して、ビューの下にリストされているすべてのビルドのジョブを削除します。

import jenkins.model.Jenkins

hudson.model.Hudson.instance.getView('<ViewName>').items.each() {
    println it.fullDisplayName


    def jobname = it.fullDisplayName
    def item = hudson.model.Hudson.instance.getItem(jobname)
    def build = item.getLastBuild()
    if (item.getLastBuild() != null) {
        Jenkins.instance.getItemByFullName(jobname).builds.findAll {
            it.number <= build.getNumber()
        }.each {
            it.delete()
        }

    }
}
于 2016-11-03T05:28:13.243 に答える
0

スクリプトコンソールからこれを実行しますが、ジョブ名を変更する必要があります。

def jobName = "name"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
于 2019-04-21T10:16:21.040 に答える
0
def jobName = "MY_JOB_NAME"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().findAll { it.number < 10 }.each { it.delete() }

12のビルドがある場合、これはビルド0〜9をクリアし、12、11、10が残っていることになります。スクリプトコンソールにドロップするだけです

于 2019-07-26T18:14:58.500 に答える
0

このスクリプトは、すべてのJenkinsジョブのビルド保持設定を構成します。

値を30と200から必要なスイートに変更し、スクリプトを実行してから、Jenkinsサービスを再起動します。

#!/bin/bash

cd $HOME
for xml in $(find jobs -name config.xml)
do
    sed -i 's#<daysToKeep>.*#<daysToKeep>30</daysToKeep>#' $xml
    sed -i 's#<numToKeep>.*#<numToKeep>200</numToKeep>#' $xml
done
于 2021-02-05T07:26:07.500 に答える