3

ユーザーが提供する(つまり、保持したい)1つのビルド番号を除いて、特定のJenkinsジョブのすべてのビルドを削除する次のGroovyスクリプトがあります。

/*** BEGIN META {
  "name" : "Bulk Delete Builds except the given build number",
  "comment" : "For a given job and a given build number, delete all build except the user provided one.",
  "parameters" : [ 'jobName', 'buildNumber' ],
  "core": "1.409",
  "authors" : [
     { name : "Arun Sangal" }
  ]
} END META **/


// NOTE: Uncomment parameters below if not using Scriptler >= 2.0, or if you're just pasting the script in manually.
// ----- Logic in this script takes 5000 as the infinite number, decrease / increase this value from your own experience.
// The name of the job.
//def jobName = "some-job"

// The range of build numbers to delete.
//def buildNumber = "5"

def lastBuildNumber = buildNumber.toInteger() - 1;
def nextBuildNumber = buildNumber.toInteger() + 1;


import jenkins.model.*;
import hudson.model.Fingerprint.RangeSet;

def jij = jenkins.model.Jenkins.instance.getItem(jobName);

println("Keeping Job_Name: ${jobName} and build Number: ${buildNumber}");
println ""

def setBuildRange = "1-${lastBuildNumber}"
def range = RangeSet.fromString(setBuildRange, true);
jij.getBuilds(range).each { it.delete() }
println("Builds have been deleted - Range: " + setBuildRange)

setBuildRange = "${nextBuildNumber}-5000"
range = RangeSet.fromString(setBuildRange, true);
jij.getBuilds(range).each { it.delete() }
println("Builds have been deleted - Range: " + setBuildRange)

これは、すべての Jenkins ジョブでうまく機能します。例: Jenkins ジョブ名が「TestJob」で、Jenkins にビルド # 1 からビルド 15 までの 15 個のビルドがあり、ビルド # 13 を保持してすべてを削除する場合、このスクリプトはビルドを削除します (ビルド # 1 -12 および 14-15 - ビルドを「このビルドを永久に保持する」としてマークし、ビルド #13 のみを保持する場合でも。


今、私が欲しいのは:

  1. ビルドを削除しないようにするには、このスクリプトで何を変更する必要がありますか? ビルドが Jenkins で「このビルドを永久に保持する」とマークされている場合。私はスクリプトを試してみましたが、永久にビルドを保持するものも削除されました。

  2. たとえば、Jenkins で「ビルド名セッター プラグイン」を使用している場合、ビルド名を必要な名前として指定できます。つまり、ビルドをビルド #1 または #2、または #15 として取得する代わりに、ビルドを取得します。 as build# 2.75.0.1, 2.75.0.2, 2.75.0.3, ..... , 2.75.0.15 (ビルド名/説明を 2.75.0 を含むいくつかの変数として設定したため (リリース バージョンの値として) ) 実際の Jenkins ジョブのビルド番号 (最後の 4 桁目) をサフィックスとして付けます - 例: 名前を次のように設定します:

    ${ENV,var="somepropertyvariable"}.${BUILD_NUMBER}
    

    この場合、Jenkins ビルドを 2.75.0.1 から 2.75.0.x (x はそのリリース (2.75.0) の最後のビルド番号) として取得し始めます。同様に、プロパティ リリース バージョンを次の 2.75.1 または 2.76.0 に変更すると、同じ Jenkins ジョブが 2.75.1.0、2.75.1.1、....、2.75.1 としてビルドを提供し始めます。 x または 2.76.0.1、2.76.0.2、....、2.76.0.x など。リリース バージョンの変更中に、ビルドが再び 1 から開始されるとします (2.75.1 および 2.76.0 リリース バージョンについて前述したように)。

    この場合、Jenkins ジョブのビルド履歴 (2.75.0.x、2.75.1.x、および 2.76.0.x のすべてのビルドを表示) の場合、このスクリプトで 3 番目のパラメーター/引数を含めるにはどのような変更を行う必要がありますか? . この 3 番目の引数はリリース / バージョンの値、つまり 2.75.0 または 2.75.1 または 2.76.0 を受け取り、このスクリプトはそのリリースのビルド番号のみを削除する必要があります (他のリリースのビルドは削除しないでください)。

4

3 に答える 3