Jenkins管道:当被cron触发时跳过交互式输入步骤?

whlutmcx  于 2023-04-05  发布在  Jenkins
关注(0)|答案(1)|浏览(125)

我有一个Jenkins脚本管道,它在开始时请求交互式输入,例如:

def options = input message: 'Select options', parameters: [...]

但是,我现在希望使用cron触发器按计划运行此作业。
我应该如何让它跳过input步骤,只有当作业在定时器上自动触发时,同时保留手动触发时手动选择参数的能力?

qeeaahzv

qeeaahzv1#

在这种情况下,我找不到一种内置的方法来让input返回其默认值,但是你可以手动完成,如下所示:

def options = [:]

// If there are any TimerTriggerCause then this build was started by a cron timer
if (currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause')) {
    // Options to default to when running automatically on a schedule
    options = [
        FOO: 'foo default could be different for auto-scheduled runs',
        BAR: true,
    ]
} else {
    // Interactive option selection
    options = input message: 'Select options',
        parameters: [
                string(name: 'FOO', defaultValue: 'foo default for interactive selection input', trim: true, description '...'),
                booleanParam(name: 'BAR', defaultValue: true, description: '...'),
        ]
}

echo "Chosen: ${options.toString()}"

if (options.BAR) {
    // do something based on `options.FOO`
}

不幸的是,您必须手动保持2个if块在添加/修改/删除参数方面“同步”,以便options在任何情况下都有一组一致的密钥。

相关问题