【问题标题】:Error while updating Jenkins job config using Rest API使用 Rest API 更新 Jenkins 作业配置时出错
【发布时间】:2016-12-20 12:31:23
【问题描述】:

我正在尝试使用我的 java 代码使用 Jenkins 的 rest API 更改作业的配置,但它无法连接到 Jenkins url。

请建议我进行更改,以便我可以在不重新启动 Jenkins 的情况下更新我的工作。我正在使用詹金斯 2.19.4。 是否有任何 jenkins 设置阻止我连接到 jenkins config.xml 或 java 代码有问题?

try
    {
        String fileDir = "D:\\"; // upload directory
          String fileName = "config.xml";
          URL url = new URL("http://myjenkins/job/test/config.xml"); // Jenkins URL localhost:8080, job named 'test'

          String user = "username"; // username
          String pass = "password"; // password or API token
          String authStr = user +":"+  pass;
          String encoding = DatatypeConverter.printBase64Binary(authStr.getBytes("utf-8"));

          HttpURLConnection connection = (HttpURLConnection) url.openConnection();

          connection.setReadTimeout(10000);
          connection.setConnectTimeout(15000);
          connection.setRequestMethod("POST");
          connection.setUseCaches(false);
          connection.setDoInput(true);
          connection.setDoOutput(true);
          connection.setRequestProperty  ("Authorization", "Basic " + encoding);

          try
          {

              String filePath = "D:\\config.xml";
              FileInputStream inputStream = new FileInputStream(new File(filePath));
              FileReader fr = new FileReader(new File(filePath));
              BufferedReader br = new BufferedReader(fr);

                String sCurrentLine;
                System.out.println(sCurrentLine = br.readLine());
              OutputStream os = connection.getOutputStream();

                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
                while ((sCurrentLine = br.readLine()) != null) {
                    //System.out.println("not going inside!!!!");
                    writer.write(sCurrentLine);
                    System.out.println(sCurrentLine);
                }
                writer.flush();
                writer.close();
                os.close();
                int responseCode=connection.getResponseCode();
                System.out.println(responseCode);                
          }
          catch(Exception e)
          {
              e.printStackTrace();
          }

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

【问题讨论】:

  • 错误是什么?
  • 我收到 403 http 响应,但 java.io 异常
  • 403 表明服务器理解请求但拒绝授权...检查用户/密码是否正确并以预期编码传递
  • 用户名和密码都正确。
  • @KrutiVyas 我仍然无法连接到 Jenkins。无法使用上述代码以及 CSRF。如何创建 jenkin 工作。

标签: java jenkins config jenkins-api


【解决方案1】:

403 响应的原因是 CSRF 安全性。要么从詹金斯禁用该选项。或者为每个 http 请求设置 Crumb。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 2017-05-06
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多