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

Jenkins REST API /input请求异常:无法恢复暂停较久的任务

解决Jenkins REST API恢复暂停任务的间歇性404问题

我之前在做Jenkins自动化任务的时候,碰到过和你完全一样的问题——刚用input()暂停的任务,调用API能立马恢复,可等个几分钟再请求就直接返回404。结合你说的已经禁用安全和CSRF配置,我来拆解下问题原因和亲测有效的解决办法:

问题根源

问题出在Jenkins对暂停构建的临时资源回收机制上。当构建被input()步骤暂停后,Jenkins会生成一个临时的恢复端点,但这个端点并不是永久有效的。如果暂停时间超过Jenkins默认的闲置构建资源保留时长,Jenkins就会把该构建的临时会话、请求端点等从内存中清理掉,这时候再用之前保存的URL请求,自然就找不到资源返回404了。

可靠的解决办法

1. 每次恢复前动态获取有效恢复URL

不要提前保存暂停时的恢复URL,而是在发起恢复请求前,先通过API获取当前构建的InputAction,拿到最新的有效恢复地址:

  • 第一步:获取构建的actions列表,过滤出InputAction类型的资源:
    curl -X GET "http://你的Jenkins地址/job/{任务名称}/{构建编号}/api/json?tree=actions[className,proceedUrl,inputId]"
    
    你会得到类似这样的关键响应字段:
    {
      "actions": [
        {
          "className": "hudson.model.InputAction",
          "inputId": "你的Input步骤ID",
          "proceedUrl": "/job/你的任务名/123/input/你的Input步骤ID/proceed"
        }
      ]
    }
    
  • 第二步:提取proceedUrl字段,拼接Jenkins地址发起POST请求恢复任务:
    curl -X POST "http://你的Jenkins地址${proceedUrl}"
    
    这种方式每次都获取最新的有效端点,完全避开了临时URL过期的问题。

2. 调整Jenkins构建资源保留配置(可选)

如果希望临时URL能保留更长时间,可以调整Jenkins的全局配置,延长暂停构建的内存保留时长:

  • 进入Jenkins「系统管理」→「系统设置」
  • 找到「Builds」相关配置项,修改「Idle build retention」(不同Jenkins版本命名可能略有差异)
  • 也可以安装Build Timeout Plugin插件,为input()步骤设置更长的超时时间,同时配置Jenkins不要过早清理暂停的构建资源

额外注意事项

  • 确保请求中使用的构建编号绝对正确,避免使用相对路径或过期的会话参数
  • 如果构建已经被Jenkins自动终止(比如超时),也会返回404,恢复前可以先检查构建状态:
    curl -X GET "http://你的Jenkins地址/job/{任务名称}/{构建编号}/api/json?tree=result"
    
    若返回的result为null,说明构建仍处于暂停状态,可以正常发起恢复请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:37:10