如何编写管道以丢弃旧版本?


87

常规语法生成器不适用于示例步骤properties: Set Job Properties。我已经选择Discard old builds,然后10Max # of builds to keep字段中输入,然后Generate Groovy什么都没有显示。

詹金斯版本:2.7


Jenkins 2.32.3对我来说效果很好
Michel Jung

Answers:


181

至于声明性语法,可以使用以下代码options块:

pipeline {
  options {
    buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '30'))
  }
  ...
}

的参数logRotator(来自源代码):

  • daysToKeepStr:历史只保留到这一天。
  • numToKeepStr:仅保留此数量的构建日志。
  • artifactDaysToKeepStr:工件仅保留到这一天。
  • artifactNumToKeepStr:仅保留此数量的构件。

可以在Cloudbees知识库block文档中options找到更多信息。


1
这应该是每个分支还是每个管道?它似乎在我的环境中不起作用。
冷冻

是否需要参考源代码以获取各种选项的参数是否是一般惯例?该文档仅引用numToKeepStr,幸运的是,我在这里找到您的答复以找到其他参数。他们如何记录事物有点混乱。谢谢,尽管您是救生员。
emmdee

有人可以显示将这个buildDiscarder options语句放入(多管道)阶段块中的上下文吗?我已经尝试过,但是构建失败。
Christopher D. Emerson

53

您可以使用properties嵌套在BuildDiscarderProperty最终具有您要设置的密钥的方法。我仍然没有可靠的方法来查找每个键的正确语法。经过大量的猜测和检查:

properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '10']]]);

请注意,此代码段适用于脚本语法。


1
这行得通,但是为什么将其嵌套在两张地图中,您是如何工作的呢?
Rupert Madden-Abbott

我正在查看您的答案,但我不知道它的作用。它会保留最近的10个版本还是持续10天?我可以保留过去10周或3个月的构建时间吗?请解释中每个*Str字段的含义strategy。教男人钓鱼……等等
阿比吉特·萨卡

1
@AbhijitSarkar此类的javadoc中描述了所有选项:github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…–
apottere

@apottere 1.链接不在答案中。2.如果我要研究Javadoc,则无需回答。答案应尽可能完整。外部链接是可以的,只要在此处复制并解释了相关部分即可。
Abhijit Sarkar,

1
@AbhijitSarkar我不是OP,我只是告诉你在哪里可以找到答案。
apottere'Apr

17

Jenkins具有内置的语法生成器页面。

管道语法:代码段生成器
<your jenkins url> /管道语法/

管道语法:指令发生器
<your jenkins url> / directive-generator /

Discard old builds 指令生成器的示例 丢弃旧版本示例


17

对于脚本化管道,请使用:

properties([
    buildDiscarder(logRotator(daysToKeepStr: '3', numToKeepStr: '3')),
])

8
  1. 要在特定数后放弃构建:

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. 要在特定数量的构建后放弃构建

     options {
         buildDiscarder(logRotator(numToKeepStr: '7'))
     }
    

除了要保留的构建总数之外,仅增加了保留构建的天数:)
Jerald Sabu M

您应该对此类事情使用注释。我已经相应更新了我的答案。
Vadim Kotov's

我没有添加评论的声誉。
Jerald Sabu M

现在有。但总的来说,如果您没有声誉,就不应回答,而要发表评论
Vadim Kotov's

6

Vadim的答案由于某些未知原因对我不起作用。我将其简化如下,现在可以使用:

options {
    buildDiscarder(logRotator(numToKeepStr: '3'))
}

6

对于声明性管道,可以添加以下内容:

options {

    buildDiscarder(
        logRotator(
            // number of build logs to keep
            numToKeepStr:'5',
            // history to keep in days
            daysToKeepStr: '15',
            // artifacts are kept for days
            artifactDaysToKeepStr: '15',
            // number of builds have their artifacts kept
            artifactNumToKeepStr: '5'
        )
    )
}

谢谢,但是您在哪里找到的信息?代码?
silencej

1
我通常从这里开始jenkins-base-url:port if any/pipeline-syntax/。这也是另一个javadoc.jenkins.io/hudson/tasks/LogRotator.html。我有时还会查看插件的github源代码,以详细了解。@silencej
bhordupur

2

如果您想在多分支流水线作业级别(相对于所有单个对象Jenkinsfile)中配置构建保留,则也可以:https : //issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page =com .atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-325601

除了之外,BuildRetentionBranchProperty您还可以*BranchProperty在此处配置其他任何s:https : //github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

但是,至少对于我而言,Jenkins 2.73.2可能不会在GUI中显示它们。但是您仍然可以使用JobDSL或config.xml直接修改JobDSL (我不是说;-))


您在谈论Job DSL插件吗?它与詹金斯管道(Jenkins Pipelines)不同。我的意思是,并非每个使用管道的人都在使用Job DSL插件。
瓦迪姆·科托夫

@VadimKotov不,不是真的。我在Jenkins Pipelines中配置生成保留的问题。我不想在Jenkinsfile中执行此操作,而是在作业级别执行。我在这里使用了Job DSL,但这并不重要,因为这只是自动化构建作业设置的一种方法。但是,似乎在GUI中存在一个错误,该错误会阻止在您手动配置生成作业时出现上述设置。(JobDSL不会执行您无法通过GUI进行的任何操作)
Torben Knerr

2

如果您需要编程方式(即通过函数而不是使用options{}管道语法):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.