jenkins - Jenkins 管道中触发器指令的条件

标签 jenkins jenkins-pipeline jenkins-groovy jenkins-declarative-pipeline

Jenkins有一个不错的比较全面的documentation关于 Jenkinsfile 语法。但是我仍然没有找到答案是否可以在管道的顶层进行流量控制?字面上包括一些东西 if就在 pipeline {}部分(声明性)如:

pipeline {
    if (bla == foo) {
        triggers {
            ...configuration
        }
} 

或者
pipeline {
    triggers {
        if (bla == foo) {
            something...
        }
    }
} 
triggers section 是一个只能包含一次且只能包含在 pipeline 中的部分。部分。但是if语句似乎只能应用于阶段级别。

有谁知道如何在指令中有条件地包含一些东西,例如,triggers ,或有条件地包含指令本身?

最佳答案

您不能在 when 之外的管道中使用流量控制和 script ,但您可以为触发器参数之类的东西调用函数:

pipeline {
    agent any
    triggers{ cron( getCronParams() ) }
    ...
}

def getCronParams() {
    if( someCondition ) {
        return 'H */4 * * 1-5'
    }
    else {
        return 'H/30 */2 * * *'
    } 
}

另一种方法是使用 evaluate() 动态生成您的管道脚本。 :

evaluate """
pipeline {
    agent any        
    ${getTriggers()}    
    ...
}
"""

String getTriggers() {
    if( someCondition ) {
        return "triggers{ cron('H */4 * * 1-5') }"
    }
    else {
        return "triggers{ pollSCM('H */4 * * 1-5') }"
    } 
}

关于jenkins - Jenkins 管道中触发器指令的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61106044/

相关文章:

powershell - 使用 Powershell 将变量值传递到 Jenkins 文件中的不同本地范围

jenkins - 当我检查环境变量时,简单的Jenkins管道失败

jenkins - 在 Jenkinsfile 中触发远程构建(例如,从脚本)语法

jenkins - 在所有 Jenkins 页面上显示公告

ios - 如果出现 Xcode 警告,则 Jenkins 上的 Xcode 构建失败

windows - 在 Jenkins 服务器上运行时 Firefox 无法打开

jenkins - 从 Jenkinsfile 调用 gradlew

jenkins-pipeline - 并行阶段的优先级

jenkins - 在 workflow-cps groovy 代码中获取 CpsScript 实例?

jenkins - jenkins中执行groovy脚本和执行系统groovy脚本的区别?