当通过API发送请求的方式自动触发Jenkins job报错HTTP Status 403 – Forbidden的解决办法
报错场景:
当通过代码发送API请求去触发jenkins job报错403
分析报错的原因:
这个报错说明 Jenkins API 请求缺少 CSRF 防护的“crumb”令牌(防止跨站请求伪造)。
解决方法如下:
在 API 请求中带上 crumb
关闭 CSRF 防护(不推荐,安全风险)
由于不是在生产环境,所以选择最简单的方案解决,就是关闭CSRF防护
具体操作步骤: (Jenkins的部署方式是通过jenkins.war的方式放入Tomcat中运行的并且作为windows 服务启动)
Windows 服务方式
如果 Jenkins 作为 Windows 服务运行,可以在服务属性的“Java Options”里添加:
找到 Tomcat 的启动脚本
通常在bin
目录下,如catalina.bat
设置 JAVA_OPTS 环境变量
在启动脚本中添加如下内容(以 Windows 为例):在
catalina.bat
的开头添加:set JAVA_OPTS=-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true %JAVA_OPTS%
具体的位置例如:
setlocalset JAVA_OPTS=-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true %JAVA_OPTS%rem Suppress Terminate batch job on CTRL+C if not ""%1"" == ""run"" goto mainEntry if "%TEMP%" == "" goto mainEntry if exist "%TEMP%%<del>nx0.run" goto mainEntry echo Y>"%TEMP%%</del>nx0.run" if not exist "%TEMP%%<del>nx0.run" goto mainEntry echo Y>"%TEMP%%</del>nx0.Y" call "%<del>f0" %* <"%TEMP%%</del>nx0.Y" rem Use provided errorlevel set RETVAL=%ERRORLEVEL% del /Q "%TEMP%%<del>nx0.Y" >NUL 2>&1 exit /B %RETVAL% :mainEntry del /Q "%TEMP%%</del>nx0.run" >NUL 2>&1
4.重启windows 服务让设置生效