Jenkins 服务器在访问 rest api 或使用 jenkins java 客户端创建作业时抛出 403

Jenkins 服务器在访问 rest api 或使用 jenkins java 客户端创建作业时抛出 403

我正在尝试使用 Java 客户端在 Jenkins 上创建一个作业(https://github.com/jenkinsci/java-client-api) 通过调用 .createJob(String jobName, String configXml) 。但是,Jenkins 服务器抛出 403 forbidden 错误。

示例代码:

HttpClientBuilder builder = HttpClientBuilder.create();
JenkinsHttpClient client = new JenkinsHttpClient(uri, builder, "XXX", "XXX");
JenkinsServer jenkins = new JenkinsServer(client);
String sourceXML = readFile("src/main/resources/config.xml");
System.out.println(String.format("Installed Jenkins Version >> %s", jenkins.getVersion().getLiteralVersion()));//works and gives correct result
jenkins.createJob("test-nov1", sourceXML);

现在,我收到错误:

Exception in thread "main" org.apache.http.client.HttpResponseException: status code: 403, reason phrase: Forbidden
    at com.offbytwo.jenkins.client.validator.HttpResponseValidator.validateResponse(HttpResponseValidator.java:11)
    at com.offbytwo.jenkins.client.JenkinsHttpClient.post_xml(JenkinsHttpClient.java:375)
    at com.offbytwo.jenkins.JenkinsServer.createJob(JenkinsServer.java:389)
    at com.offbytwo.jenkins.JenkinsServer.createJob(JenkinsServer.java:359)
    at com.hcl.OffByTwoJenkins.main(OffByTwoJenkins.java:31)

Jenkins 服务器安全性:当我选择“任何用户都可以做任何事情”时,作业创建成功。但是,当我选择“登录用户可以做任何事情”时,我收到上述错误。此外,即使我发送了正确的用户和密码,也拥有创建作业的所有权限(能够使用 Jenkins Web UI 创建作业)。实现此目的需要哪些权限或设置更改。

谢谢

答案1

要解决此问题,请尝试取消选中“防止跨站请求伪造漏洞”jenkins.com/configureSecurity部分并且它开始工作。

答案2

使用 API 令牌创建 JenkinsHttpClient 以避免此问题。

JenkinsHttpClient jenkinsHttpClient = new JenkinsHttpClient(new URI("http://192.168.0.11:8080"),
            "admin", "your api token");

您可以从 jenkins 仪表板生成 api 令牌(Jenkins>用户>选择用户>设置>添加新的 api 令牌)。

答案3

对我来说,使用trueforcrumbFlag有帮助:例如你应该调用jenkins.createJob("test-nov1", sourceXML, true);而不是jenkins.createJob("test-nov1", sourceXML);

相关内容