因為公司需要,所以使用 jenkins-client做遠程構建,但是在輸入了正確的賬號密碼以及jenkins的url之后,調用構建出現403
代碼如下
try { JenkinsServer jenkins = new JenkinsServer(new URI("JENKINS_URL"), JENKINS_USERNAME, JENKINS_PASSWORD); if (jenkins.isRunning()) { jenkins.getJob(JENKINS_JOB).build(); System.out.println(jenkins.getJob(JENKINS_JOB).getLastBuild().details().getResult()); } } catch (Exception e) { e.printStackTrace(); }
執行之后報
status code: 403, reason phrase: Forbidden
研究了一下發現了是jenkins的CSRF機制導致的,但是由於公司所用的jenkins版本較高,默認不支持關閉CSRF,所以需要在jenkins 控制台中手動關閉CSRF。
解決方案為在jenkins控制台中執行以下代碼。
// 允許禁用 hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true // 強制啟用 hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = false