You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新Jenkins任务并在更新后立即应用新参数运行

Jenkins Job DSL更新任务后立即启动的解决方案

根因说明

Job DSL 执行pipelineJob配置块时,只会将配置变更暂存到内存缓冲区,所有配置修改要等到整个DSL脚本执行完成后才会正式写入Jenkins的任务配置存储。同一脚本内紧跟pipelineJob调用启动任务的逻辑,读取的是未修改前的旧任务配置,因此新参数不会生效。

单脚本实现方案

方案1:启动时显式传入最新参数(最推荐)

更新任务配置时你已经持有最新的folders变量值,启动任务时直接显式传入参数即可,无需等待配置落地,稳定性最高:

// 创建或更新流水线任务
pipelineJob("secondJob") {
    stringParam('Folders', folders,'New folders')
    // 其余任务配置
}
// 启动时直接传入最新参数,wait: false 对应原queue的非阻塞效果
build job: "secondJob", parameters: [string(name: 'Folders', value: folders)], wait: false

方案2:轮询等待配置生效后启动

如果你必须依赖任务的默认参数配置(比如同时更新了大量参数不想逐个传递),可以增加轮询逻辑校验配置更新完成后再启动任务:

import jenkins.model.Jenkins

def targetJobName = "secondJob"
def expectedFoldersVal = folders

// 创建或更新流水线任务
pipelineJob(targetJobName) {
    stringParam('Folders', expectedFoldersVal,'New folders')
    // 其余任务配置
}

// 最多轮询10秒,每500毫秒校验一次配置
def maxRetry = 20
def retryCount = 0
def configUpdated = false
while (retryCount < maxRetry && !configUpdated) {
    def job = Jenkins.instance.getItemByFullName(targetJobName)
    def currentDefaultVal = job.getProperty(ParametersDefinitionProperty.class)?.getParameterDefinition('Folders')?.defaultValue
    if (currentDefaultVal == expectedFoldersVal) {
        configUpdated = true
        break
    }
    sleep(500)
    retryCount++
}

if (configUpdated) {
    queue(targetJobName)
} else {
    throw new Exception("任务配置更新超时,请检查权限或Job DSL运行状态")
}

注意:该方案需要Jenkins脚本安全模块批准对应的方法调用权限。

方案3:配置块内后置触发启动

你也可以直接在pipelineJob的configure块末尾追加启动逻辑,配置写入完成后会自动执行启动操作:

import jenkins.model.Jenkins

pipelineJob("secondJob") {
    stringParam('Folders', folders,'New folders')
    // 其余任务配置
    configure { project ->
        // 配置落地后直接加入执行队列
        Jenkins.instance.queue.schedule(project, 0)
    }
}

使用建议

优先选择方案1,无需额外权限配置也没有轮询开销,适配绝大多数业务场景。如果任务属于某个文件夹或者多分支流水线下的子任务,注意传入任务的完整路径即可。

内容的提问来源于stack exchange,提问作者worldpotato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:00:00