不要删除詹金斯建设,如果它标记为QUOT;保持此版本永远" - Groovy脚本删除詹金斯构建 [英] Do not delete a Jenkins build if it's marked as "Keep this build forever" - Groovy script to delete Jenkins builds

查看:209
本文介绍了不要删除詹金斯建设,如果它标记为QUOT;保持此版本永远" - Groovy脚本删除詹金斯构建的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有删除所有下​​面的Groovy脚本生成一个给定的詹金斯工作的不同之处在于用户提供1个版本号(即要保留)。

  / *** BEGIN META {
  名:批量删除构建除给予集结号
  意见:对于一个给定的工作和给定的版本号,删除所有除建设提供一个用户。
  参数:作业名','buildNumber'],
  核心:1.409,
  作家:[
     {名:阿伦Sangal}
  ]
} END META ** /
//注意:如果不使用Scriptler&GT下方取消注释参数= 2.0,或者如果你只是粘贴脚本手动。
// -----逻辑在这个脚本需要5000为无限数量,减少/增加从你自己的经历此值。
//作业的名称。
//高清作业名=一些在职//内部版本号的范围进行删除。
//高清buildNumber =5高清lastBuildNumber = buildNumber.toInteger() - 1;
高清nextBuildNumber = buildNumber.toInteger()+ 1;
导入jenkins.model *。
进口hudson.model.Fingerprint.RangeSet;高清JIJ = jenkins.model.Jenkins.instance.getItem(工作名);的println(保持JOB_NAME:$ {JOBNAME}和版本号:$ {} buildNumber);
的println高清setBuildRange =1 - $ {} lastBuildNumber
DEF范围= RangeSet.fromString(setBuildRange,真);
jij.getBuilds(范围)。每个{it.delete()}
的println(构建已被删除 - 范围:+ setBuildRange)setBuildRange =$ {nextBuildNumber} -5000
范围= RangeSet.fromString(setBuildRange,真);
jij.getBuilds(范围)。每个{it.delete()}
的println(构建已被删除 - 范围:+ setBuildRange)

这非常适用于任何詹金斯的工作。对于例如:如果你的詹金斯作业名称是TestJob,你有15个建立即打造#1詹金斯建设15,你要删除所有,但保留构建#13,然后该脚本将删除这些版本(版本#1 -12和14-15 - 即使你任何标记为构建保持此版本永远),并只保留构建#13



现在,我要的是:


  1. 我应该在这个脚本改为不删构建 - 如果构建标记为詹金斯为保持此版本永远。我尝试了脚本,它删除了永远保持建太多。


  2. 可以说,如果我在詹金斯使用构建名二传手插件,它可以给我建立的名称作为什么名字我想即,而不是领只是建立为构建1号或2,或# 15,我会建设成为构建#2.75.0.1,2.75.0.2,2.75.0.3,.....,2.75.0.15(因为我会设置生成的名称/描述,使用一些变量,它包含2.75.0 (作为发行版本值),并与实际工作詹金斯的版本号也就是最后4位后缀它 - 例如:设置名称为:

      $ {ENV,VAR =somepropertyvariable} $ {} BUILD_NUMBER

    在这种情况下,我就开始变得詹金斯作为构建以2.75.0.1 2.75.0.x(其中x是该版本(2.75.0)的最后一个版本#)。同样,当我将更改属性发行版本IE下2.75.1或2.76.0,那么同样詹金斯的工作将开始给我建立为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发布版本)。

    在这种情况下,如果我的工作詹金斯的构建历史(显示所有建立了2.75.0.x,2.75.1.x和2.76.0.x),应该我做什么,然后改变这个脚本包括一个第3参数/参数。这第三个参数将发布/版本值,即无论是2.75.0或2.75.1或2.76.0,然后这个脚本应该删除只发布版本号(也不应该删除其他版本的编译)。



解决方案

确定 - 解决我的问题2是在这里。我还在努力解决问题1

http://scriptlerweb.appspot.com/script/show/102001

bulkDeleteJenkinsBuildsExceptOne_OfAGivenRelease.groovy

  / *** BEGIN META {
  名:批量删除构建除给予集结号
  意见:对于一个给定的工作和特定的build numnber,删除所有构建一个给定的发行版本(Mminterim),且除用户提供的一个有时詹金斯作业使用构建名称二传手插件,同样的工作,产生2.75。 0.1和2.76.0.43
  参数:作业名','releaseVersion','buildNumber'],
  核心:1.409,
  作家:[
     {名:阿伦Sangal}
  ]
} END META ** /
//注意:如果不使用Scriptler&GT下方取消注释参数= 2.0,或者如果你只是粘贴脚本手动。
// -----逻辑在这个脚本需要5000为无限数量,减少/增加从你自己的经历此值。
//作业的名称。
//高清作业名=一些在职//释放一个詹金斯工作/版本 - 如果你用生成名为二传手插件在詹金斯获取即建立像2.75.0.1,2.75.0.2,..,2.75.0.15等。
//及以上时,发布/版本值(2.75.0)更改为新的值,即2.75.1或2.76.0和开始建立的新版本/版本从#1日起实施。
//高清releaseVersion =2.75.0//内部版本号的范围进行删除。
//高清buildNumber =5高清lastBuildNumber = buildNumber.toInteger() - 1;
高清nextBuildNumber = buildNumber.toInteger()+ 1;
导入jenkins.model *。
进口hudson.model.Fingerprint.RangeSet;高清JIJ = jenkins.model.Jenkins.instance.getItem(工作名);
//高清打造= jij.getLastBuild();的println
的println( - 詹金斯JOB_NAME:$ {JOBNAME} - 版本:$ {} releaseVersion - 保持版本号:$ {} buildNumber);
的println
的println - 范围前给予版本号:$ {} buildNumber
的println高清setBuildRange =1 - $ {} lastBuildNumber
DEF范围= RangeSet.fromString(setBuildRange,真);
jij.getBuilds(范围)。每个{
  如果(it.getDisplayName()。找到(/ $ {} releaseVersion * /)){
     的println##删除>>>>>>>>计算值:+ it.getDisplayName();     //试图找到 - 如果它标记为詹金斯如何不删除构建保持此版本永远。如果有人有一个想法,请在GitHub上的新版本更新此脚本。
     //如果(!build.isKeepLo​​g()){
          it.delete();
     //}其他{
     )+ build.getWhyKeepLo​​g(;: - //的println构建不能删除为
     //}
  }
}的println
的println - 范围后给予版本号:$ {} buildNumber
的println
setBuildRange =$ {nextBuildNumber} -5000
范围= RangeSet.fromString(setBuildRange,真);
jij.getBuilds(范围)。每个{
  如果(it.getDisplayName()。找到(/ $ {} releaseVersion * /)){
     的println##删除>>>>>>>>计算值:+ it.getDisplayName();
     it.delete();
  }
}的println
的println( - 构建已成功删除了上述版本:$ {releaseVersion})
的println

你也可以通过詹金斯作业中调用这个脚本(需要3个参数作为scriptler剧本提到的)-OR从浏览器中调用它,以及:使用以下链接:

的http ://YourJenkinsServerName:PORT/job/Some_Jenkins_Job_That_You_Will_Create/buildWithParameters?jobName=Test_AppSvc&releaseVersion=2.75.0&buildNumber=15

I have the following Groovy script which deletes all builds of a given Jenkins job except one build number that user provides (i.e. wants to retain).

/*** 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)

This works well for any Jenkins job. For ex: If your Jenkins job name is "TestJob" and you have 15 builds i.e. build# 1 to build 15 in Jenkins, and you want to delete all but retain build# 13, then this script will delete the builds (build# 1-12 and 14-15 - even if you mark any build as "Keep this build forever") and only keep build#13.


Now, what I want is:

  1. what should I change in this script to not delete a build - if a build is marked in Jenkins as "Keep this build forever". I tried the script and it deleted that keep forever build too.

  2. Lets say, if I'm using "Build name setter plugin" in Jenkins, which can give me build names as what name I want i.e. instead of getting just build as build#1 or #2, or #15, I will get build as build# 2.75.0.1, 2.75.0.2, 2.75.0.3, ..... , 2.75.0.15 (as I would have set the build name/description as use some variable which contains 2.75.0 (as a release version value) and suffixed it with the actual Jenkins job's build number i.e. the last 4th digit - ex: set the name as:

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

    In this case, I'll start getting Jenkins builds as 2.75.0.1 to 2.75.0.x (where x is the last build# of that release (2.75.0)). Similarly, when I'll change the property release version to next i.e. 2.75.1 or 2.76.0, then the same Jenkins job will start giving me builds as 2.75.1.0, 2.75.1.1, ...., 2.75.1.x or 2.76.0.1, 2.76.0.2, ...., 2.76.0.x and so on. During the release version change, let say, our build will start from 1 again (as I mentioned above for 2.75.1 and 2.76.0 release versions).

    In this case, if my Jenkins job's build history (shows all builds for 2.75.0.x, 2.75.1.x and 2.76.0.x), then what change should I make in this script to include a 3rd parameter/argument. This 3rd argument will take release /version value i.e. either 2.75.0 or 2.75.1 or 2.76.0 and then this script should delete build numbers on that release only (and should NOT delete other release's builds).

解决方案

OK - Solution for my question 2 is here: I'm still working on fixing question 1.

http://scriptlerweb.appspot.com/script/show/102001

bulkDeleteJenkinsBuildsExceptOne_OfAGivenRelease.groovy

/*** BEGIN META {
  "name" : "Bulk Delete Builds except the given build number",
  "comment" : "For a given job and a given build numnber, delete all builds of a given release version (M.m.interim) only and except the user provided one. Sometimes a Jenkins job use Build Name setter plugin and same job generates 2.75.0.1 and 2.76.0.43",
  "parameters" : [ 'jobName', 'releaseVersion', '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 release / version of a Jenkins job - i.e. in case you use "Build name" setter plugin in Jenkins for getting builds like 2.75.0.1, 2.75.0.2, .. , 2.75.0.15 etc.
// and over the time, change the release/version value (2.75.0) to a newer value i.e. 2.75.1 or 2.76.0 and start builds of this new release/version from #1 onwards.
//def releaseVersion = "2.75.0"

// 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);
//def build = jij.getLastBuild();

println ""
println("- Jenkins Job_Name: ${jobName} -- Version: ${releaseVersion} -- Keep Build Number: ${buildNumber}");
println ""
println "  -- Range before given build number: ${buildNumber}"
println ""

def setBuildRange = "1-${lastBuildNumber}"
def range = RangeSet.fromString(setBuildRange, true);
jij.getBuilds(range).each {
  if ( it.getDisplayName().find(/${releaseVersion}.*/)) {
     println "     ## Deleting >>>>>>>>>: " + it.getDisplayName();

     // Trying to find - how to NOT delete a build in Jenkins if it's marked as "keep this build forever". If someone has an idea, please update this script with a newer version in GitHub.
     //if ( !build.isKeepLog()) {
          it.delete();
     //} else {
     //   println "build -- can't be deleted as :" + build.getWhyKeepLog();
     //}
  }
}



println ""
println "  -- Range after  given build number: ${buildNumber}"
println ""
setBuildRange = "${nextBuildNumber}-5000"
range = RangeSet.fromString(setBuildRange, true);
jij.getBuilds(range).each {
  if ( it.getDisplayName().find(/${releaseVersion}.*/)) {
     println "     ## Deleting >>>>>>>>>: " + it.getDisplayName();
     it.delete();
  }
}

println ""
println("- Builds have been successfully deleted for the above mentioned release: ${releaseVersion}")
println ""

One can also call this script via a Jenkins job (requires 3 parameters as mentioned in the scriptler script) -OR call it from browser as well: using the following link:

http ://YourJenkinsServerName:PORT/job/Some_Jenkins_Job_That_You_Will_Create/buildWithParameters?jobName=Test_AppSvc&releaseVersion=2.75.0&buildNumber=15

这篇关于不要删除詹金斯建设,如果它标记为QUOT;保持此版本永远" - Groovy脚本删除詹金斯构建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆