【问题标题】:How to write Pipeline to discard old builds?如何编写流水线来丢弃旧版本?
【发布时间】:2017-01-25 07:58:01
【问题描述】:

groovy 语法生成器不适用于示例步骤properties: Set Job Properties。我选择了Discard old builds,然后在Max # of builds to keep 字段中输入10,然后Generate Groovy 没有任何显示。

Jenkins 版本:2.7

【问题讨论】:

  • 使用 Jenkins 2.32.3 对我来说效果很好

标签: jenkins jenkins-pipeline


【解决方案1】:

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

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

请注意,此 sn-p 用于脚本语法。

【讨论】:

  • 这行得通,但为什么它嵌套在两个地图中,你是如何解决这个问题的?
  • 我正在查看您的答案,但我不明白它的作用。它会保留最后 10 个构建还是过去 10 天?我可以保留过去 10 周或 3 个月的构建吗?请解释strategy中每个*Str字段的含义。教人钓鱼……等等
  • @AbhijitSarkar 所有选项都在该类的 javadoc 中描述:github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…
  • @apottere 1. 链接不在答案中。 2.如果我要研究Javadoc,就不需要答案了。答案应尽可能完整。外部链接没问题,只要复制粘贴相关部分并在此处解释即可。
  • @AbhijitSarkar 我不是 OP,我只是想让你知道在哪里可以找到答案。
【解决方案2】:

至于声明式语法,您可以使用options 块:

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

logRotator 的参数(来自the source code):

  • daysToKeepStr:历史只保留至今。
  • numToKeepStr:只保留这个数量的构建日志。
  • artifactDaysToKeepStr: 文物只保留到今天。
  • artifactNumToKeepStr:只有这个数量的构建保留了它们的工件。

更多信息可以在Cloudbees knowledge basethe docs for options block找到。

【讨论】:

  • 这应该是每个分支还是每个管道?它似乎不适用于我的环境。
  • 各种选项的参数是否需要参考源码获取?文档仅引用numToKeepStr,幸运的是我在这里找到了您的回复以找到其他参数。他们如何记录事情有点混乱。谢谢你,虽然你是一个救生员。
  • 有人可以显示将此 buildDiscarder 选项语句放入(多管道)阶段块中的上下文吗?我试过了,但我的构建失败了。
  • 当您丢弃“构建”时,它是否会同时丢弃构建工件和关联的存储库?
  • @vadim-kotov 您的回答是关于如何提供出色答案的集体行动。您提供所有相关的详细信息以及阅读它们的外部参考。如果 stackoverflow 上的每个人都花时间回答这个问题,那么每个人都会受益匪浅。荣誉。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:
    1. 在特定天数后放弃构建:

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

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

    【讨论】:

    • 只是增加了保留构建的天数,除了要保留的构建总数:)
    • 您应该将 cmets 用于此类事情。我已经相应地更新了我的答案。
    • 我没有添加评论的声誉。
    • 现在你有了。但总的来说,如果你没有声誉,you shouldn't answer instead of commenting
    【解决方案5】:

    如果您想在多分支管道作业级别(相对于所有单独的Jenkinsfiles)配置构建保留,这也是可能的: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-325601

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

    不过,它们可能不会显示在 GUI 中,至少对我来说是 Jenkins 2.73.2。但是你仍然可以使用 JobDSL 或者直接修改config.xml(我没这么说;-))

    【讨论】:

    • 你说的是Job DSL Plugin吗?它与 Jenkins Pipelines 不同。我的意思是,并不是所有使用 Pipelines 的人都在使用 Job DSL Plugin。
    • @VadimKotov 不,不是。我遇到了在 Jenkins Pipelines 中配置构建保留的问题。我不想在 Jenkinsfile 中这样做,而是在工作级别上这样做。我在这里使用了 Job DSL,但这并不重要,因为这只是自动化构建作业设置的一种手段。但是,GUI 中似乎存在错误,当您手动配置构建作业时,会阻止上述设置出现。 (JobDSL 不会做任何其他情况下您无法通过 GUI 做的事情)
    【解决方案6】:

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

    管道语法:片段生成器
    <your jenkins url>/pipeline-syntax/

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

    Discard old builds 来自指令生成器的示例

    【讨论】:

      【解决方案7】:

      对于脚本化管道使用:

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

      【讨论】:

        【解决方案8】:

        如果您需要编程方式(即从函数中执行此操作,而不是使用options{} 管道语法):

        def someFunction() {
          ...
          properties([
            buildDiscarder(logRotator(numToKeepStr: '5'))
          ])
        }
        

        【讨论】:

          【解决方案9】:

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

          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'
                  )
              )
          }
          

          【讨论】:

          • 谢谢,但是你在哪里找到的信息?代码?
          • 我通常从jenkins-base-url:port if any/pipeline-syntax/ 开始。这也是另一个javadoc.jenkins.io/hudson/tasks/LogRotator.html。我有时也会查看插件的 github 源代码以详细了解。 @silencej
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-24
          • 2019-09-13
          相关资源
          最近更新 更多