Jenkins / Hudsonのビルド履歴をクリアするにはどうすればよいですか?


87

最近、ハドソンビルドの1つの構成を更新しました。ビルド履歴が同期していません。ビルド履歴をクリアする方法はありますか?

どうぞよろしくお願いします


「完全にめちゃくちゃ」について詳しく教えてください。たぶん誰かが以前に同様の問題を経験していて、それを修正する方法をあなたに指示することができます。
Rob Hruska 2010

あいまいさについて申し訳ありません。修繕。
myusuf3 2010

:ここに新しく、もう少し具体的な質問があるstackoverflow.com/questions/13052390/...
エルワン・ルグラン

この投稿は役立つかもしれcodeketchup.blogspot.sg/2016/05/...
Nayana Adassuriya

ここで私が見つけた最高の答えは次のとおりです。superuser.com/questions/1418885/...
アスマズバイル

回答:


51

[ハドソンの管理] / [ディスクから構成を再読み込み]をクリックすると、ハドソンはすべてのビルド履歴データを再読み込みします。

ディスク上のデータが混乱している場合は、%HUDSON_HOME%\ jobs \ < projectname >ディレクトリに移動し、ビルドディレクトリを想定どおりに復元する必要があります。次に、構成データをリロードします。

すべてのビルド履歴を削除する方法を尋ねているだけの場合は、ビルドが少ない場合はUIから1つずつ削除するか、%HUDSON_HOME%\ jobs \ <プロジェクト名>ディレクトリに移動してすべてのビルドを削除します。そこにサブディレクトリがあります-それらはビルドに対応しています。その後、変更を有効にするためにサービスを再起動します。


「/ var / lib / jenkins / jobs / Demo」内のすべてのファイルとフォルダーを削除しましたが、このジョブ内のJenkins UIに移動すると、ビルド履歴が表示されます。
ポール2014

1
ディレクトリ構造を「サル」にした後、「Jenkinsの管理」に移動し、「ディスクから構成を再ロード」を選択します
DanBaker

1
@paul、そこでフォルダを削除した後、ビルド履歴がUIから消えたことを確認するには、Jenkinsを再起動する必要があります。ところで、Jenkinsを使用している場合、パスは通常/ var / jenkins_home / jobs / {project name} / builds /
Bright

このソリューションにはシステム側で多くの手順が必要だと思います。@ NayanaAdassuriyaからの回答ではるかにクリーンなソリューションが提供されています
lfn

108

スクリプトコンソール([Jenkinsの管理]> [スクリプトコンソール])とこのスクリプトのようなものを使用して、ジョブのビルド履歴を一括削除しますhttps://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

このスクリプトは、ある範囲のビルドのみを削除することを前提としています。特定のジョブのすべてのビルドを削除するには、次を使用します(テスト済み)。

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()

5
すごい!!間違いなく最善のアプローチです!:)
hek2mgl 2013年

素晴らしいトリックですが、ビルドカウンターをリセットするのはどうですか?そのためのスクリプトはありますか?
Jes Chergui 2015年

1
@JesCherguiビルド番号のリセットを表示するように更新しました。スクリプトコンソールを使用すると、あらゆる種類のものを制御できます。javadoc.jenkins-ci.orgを参照してください(AbstractProjectは、仕事を始めるのに適した場所です)
rjohnston 2015年

私のジェンキンスは、インスタンスへのアクセスなどが許可されていないと不満を漏らしました。この削除用に特別に設定した新しいパイプラインから実行していて、上記のコードを貼り付けて名前を変更しました。
ウィル

@これは、パイプラインジョブを非常に制限されたサンドボックスに配置するスクリプトセキュリティプラグインによるものでしょうか。[Jenkinsの管理]> [処理中のスクリプトの承認]で承認する署名があるかどうかを確認します。もう1つのオプションは、ジョブで管理スクリプトを実行するScriptler
ci.org

76

この答えはジェンキンスのためのものです

  1. Jenkinsホームページに移動→ Jenkinsの管理スクリプトコンソール

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

  2. そこで次のスクリプトを実行します。変更copy_folderyour project name

コード:

def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

私の投稿


4
これまでのベストアンサー
Dmitry Zaytsev 2016

1
これが最速のソリューションです。
davegallant 2016年

ええ、でもこれについては、Jenkinsを再起動しないでください。そうしないと、再起動後にビルドを実行したときにnextbuildnumberが1に更新されないようです。私は39歳で始めたので、これをやり直さなければなりませんでした。
ウィル

Jenkins 2.75の時点での作業
2017

22

別のオプションがあります:cURLでビルドを削除します。

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

編集:1を交換する必要がある場合がありますdoDeleteAllによってdoDelete構成や使用ジェンキンスのバージョンに応じて、この作業を行うために上記のURLで。


10

Jenkinsスクリプトを使用して、すべてのジョブのすべてのビルドを削除する方法は次のとおりです。

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 

9

プロジェクト構成を一時的に変更して、最後の1つのビルドのみを保存し、構成を再ロードして(古いビルドを破棄する必要があります)、構成設定を目的の値に再度変更できます。


申し訳ありませんが、数年のために今ハドソンを使用していないが、コンフィギュレーションをリロードについては、これを参照してください。stackoverflow.com/questions/5216552/...
the_mandrill

Jenkinsの管理者権限を持っていない人として、これが私にとって有効な唯一のオプションでした。
DrStrangepork

4

MultiBranchProject(パイプラインなど)のビルド履歴をクリアする場合は、Jenkinsホームページ→Jenkinsの管理→スクリプトコンソールに移動し、次のスクリプトを実行します。

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}

4

これは利用可能な最良のオプションです。

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

このコードは、すべてのJenkinsジョブビルド履歴を削除します。


2
上記のコードを実行する方法がわからない場合は、Jenkinsホーム> Jenkinsの管理>スクリプトコンソールに移動してください。このスクリプトを入力できるテキストフィールドがそこにあります。
ファラオツール

2

スクリプトコンソールの使用。

ジョブがグループ化されている場合は、スラッシュを付けてフルネームを付けることができます。

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

または、次のように階層をトラバースします。

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

2

ファイルシステムから直接削除することは安全ではありません。以下のスクリプトを実行して、すべてのジョブからすべてのビルドを(再帰的に)削除できます。

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}


1

%HUDSON_HOME%\jobs\<projectname>remove buildsdirに 移動してlastStable, lastSuccessfulリンクを削除し、nextBuildNumberファイルを削除します。

上記の手順を実行した後、UI
Jenkins-> Manage Jenkins-> Reload Configuration fromDiskから以下のリンクに移動します

必要に応じて行います


1

スクリプトコンソールメソッドを使用している場合は、代わりに次を使用して、ジョブがフォルダーコンテナにグループ化されているかどうかを考慮してください。

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

または

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)

0

案内する: %JENKINS_HOME%\jobs\jobName

ファイル「nextBuildNumber」を開き、番号を変更します。その後、Jenkins構成をリロードします。注:「nextBuildNumber」ファイルには、Jenkinsによって使用される次のビルド番号が含まれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.