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

使用NestJS调用Jenkins API创建节点时遇400错误求排查

Jenkins节点创建API请求400错误排查及修复

核心问题分析

你的代码存在以下几个导致400 Bad Request的关键问题:

1. 请求Content-Type不匹配

Jenkins的/computer/doCreateItem接口不支持JSON格式请求体,它要求使用application/x-www-form-urlencoded表单编码格式。你当前设置的Content-Type: application/json不符合接口要求,这是触发错误的主要原因。

2. 请求体结构冗余且格式错误

  • URL中已经携带了name和type参数,请求体中无需重复传递这两个字段
  • json字段需要传递序列化后的JSON字符串,但外层不需要包裹在JSON对象中,而是作为表单的单独字段提交

3. 可能缺失认证信息(隐性问题)

如果你的Jenkins实例开启了权限验证,axiosInstance必须配置基础认证(用户名+API Token),否则也会返回400或403错误。

修复后的代码

import { HttpException, HttpStatus } from '@nestjs/common';
import qs from 'qs'; // 需要安装qs库处理表单编码

async createNode(agentName: string, url: string): Promise<void> {
  try {
    const nodeConfig = JSON.stringify({
      name: agentName,
      nodeDescription: '',
      numExecutors: 1,
      remoteFS: 'C:\\Jenkins',
      labelString: '',
      mode: 'EXCLUSIVE',
      retentionStrategy: {
        'stapler-class': 'hudson.slaves.RetentionStrategy$Always',
      },
      launcher: {
        'stapler-class': 'hudson.slaves.JNLPLauncher',
      },
      nodeProperties: {
        'stapler-class-bag': 'true',
      },
    });

    // 用qs库将数据转为表单编码格式
    const formData = qs.stringify({
      json: nodeConfig,
    });

    const response = await this.axiosInstance.post(
      `${url}/computer/doCreateItem?name=${agentName}&type=hudson.slaves.DumbSlave`,
      formData,
      {
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          // 若需认证,添加以下头(替换为你的用户名和API Token)
          // 'Authorization': `Basic ${Buffer.from('用户名:API_TOKEN').toString('base64')}`
        },
      },
    );

    // Jenkins创建成功后通常返回302重定向,需兼容该状态码
    if (![200, 302].includes(response.status)) {
      throw new HttpException(
        `创建节点失败: ${response.statusText}`,
        HttpStatus.INTERNAL_SERVER_ERROR,
      );
    }
  } catch (error) {
    throw new HttpException(
      `创建节点失败: ${error.response?.data || error.message}`,
      HttpStatus.INTERNAL_SERVER_ERROR,
    );
  }
}

额外注意事项

  • 安装qs库:执行npm install qs或yarn add qs处理表单编码
  • Jenkins API Token获取:在Jenkins个人设置中生成API Token,不要直接使用密码
  • 重定向处理:Jenkins创建节点成功后会返回302重定向到节点列表页,需兼容该状态码

内容的提问来源于stack exchange,提问作者אמיר שונים

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:43:11