【问题标题】:How to avoid Jenkins Job DSL to overwrite triggers in pipelines如何避免 Jenkins Job DSL 覆盖管道中的触发器
【发布时间】:2019-11-05 12:29:28
【问题描述】:

让我们在 Jenkins Job DSL Groovy 中创建一个种子作业,它以这种方式生成管道:

pipeline {
    agent any
    stages {
        stage("DSL") {
            steps {
                jobDsl scriptText: """pipelineJob("test-pipeline-generated") {
                    definition {
                        cps {
                            script 'pipeline { agent(any); triggers{ cron("H/2 * * * *") }; stages { stage("Some") { steps { echo "Working ..." } } } }'
                        }
                    }
                }
                """
            }
        }
    }
}

它会生成一个管道作业,必须第一次手动触发以处理 triggers 定义,并且一切正常。但是,当再次触发种子作业时,它覆盖管道作业定义并且触发器再次消失。这意味着种子作业会禁用所有此类作业。

有人知道是否有任何解决方案吗?

我们希望将触发器保留在那里,如果管道中有更改,它将在第一次运行后处理。我们不想在作业 DSL 中指定触发器,因为用户习惯于在管道定义中指定它们。

【问题讨论】:

    标签: jenkins-pipeline jenkins-job-dsl


    【解决方案1】:

    如果您将触发器放在模板管道中(以及种子作业中),它也将保留在下一次运行中。

    【讨论】:

    • 那么我们就会有重复的触发器配置,这不是很好。我想看看“保持触发器不变”的说法。
    • 如果它是同一类型,您将不会有重复的触发器 - 管道一旦加载就会覆盖 config.xml 中的那个
    • 好的,同意,但是我们将有两个相同的定义:一个在 Job DSL 中,一个在管道定义中
    • 重复工作并且必须在 dsl 和管道中维护相同的触发器并不是真正的解决方案。
    猜你喜欢
    • 2021-09-20
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多