因為公司需要,所以使用 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
